@milaboratories/pl-client 2.18.5 → 3.1.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 (213) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +12 -22
  2. package/dist/_virtual/_rolldown/runtime.js +6 -11
  3. package/dist/core/PromiseTracker.cjs +2 -3
  4. package/dist/core/PromiseTracker.cjs.map +1 -1
  5. package/dist/core/PromiseTracker.d.ts.map +1 -0
  6. package/dist/core/PromiseTracker.js +1 -2
  7. package/dist/core/PromiseTracker.js.map +1 -1
  8. package/dist/core/StatefulPromise.cjs +1 -2
  9. package/dist/core/StatefulPromise.cjs.map +1 -1
  10. package/dist/core/StatefulPromise.js +1 -1
  11. package/dist/core/StatefulPromise.js.map +1 -1
  12. package/dist/core/abstract_stream.d.ts.map +1 -0
  13. package/dist/core/advisory_locks.cjs +1 -2
  14. package/dist/core/advisory_locks.cjs.map +1 -1
  15. package/dist/core/advisory_locks.js +1 -1
  16. package/dist/core/advisory_locks.js.map +1 -1
  17. package/dist/core/auth.cjs +2 -3
  18. package/dist/core/auth.cjs.map +1 -1
  19. package/dist/core/auth.d.ts.map +1 -0
  20. package/dist/core/auth.js +1 -2
  21. package/dist/core/auth.js.map +1 -1
  22. package/dist/core/cache.d.ts.map +1 -0
  23. package/dist/core/client.cjs +63 -36
  24. package/dist/core/client.cjs.map +1 -1
  25. package/dist/core/client.d.ts +3 -1
  26. package/dist/core/client.d.ts.map +1 -0
  27. package/dist/core/client.js +54 -27
  28. package/dist/core/client.js.map +1 -1
  29. package/dist/core/config.cjs +16 -17
  30. package/dist/core/config.cjs.map +1 -1
  31. package/dist/core/config.d.ts.map +1 -0
  32. package/dist/core/config.js +16 -16
  33. package/dist/core/config.js.map +1 -1
  34. package/dist/core/default_client.cjs +6 -7
  35. package/dist/core/default_client.cjs.map +1 -1
  36. package/dist/core/default_client.d.ts.map +1 -0
  37. package/dist/core/default_client.js +1 -2
  38. package/dist/core/default_client.js.map +1 -1
  39. package/dist/core/driver.cjs +1 -2
  40. package/dist/core/driver.cjs.map +1 -1
  41. package/dist/core/driver.d.ts.map +1 -0
  42. package/dist/core/driver.js +1 -1
  43. package/dist/core/error_resource.cjs +1 -2
  44. package/dist/core/error_resource.cjs.map +1 -1
  45. package/dist/core/error_resource.js +1 -1
  46. package/dist/core/errors.cjs +11 -4
  47. package/dist/core/errors.cjs.map +1 -1
  48. package/dist/core/errors.d.ts +2 -1
  49. package/dist/core/errors.d.ts.map +1 -0
  50. package/dist/core/errors.js +9 -3
  51. package/dist/core/errors.js.map +1 -1
  52. package/dist/core/final.cjs +3 -4
  53. package/dist/core/final.cjs.map +1 -1
  54. package/dist/core/final.d.ts.map +1 -0
  55. package/dist/core/final.js +1 -2
  56. package/dist/core/final.js.map +1 -1
  57. package/dist/core/ll_client.cjs +35 -18
  58. package/dist/core/ll_client.cjs.map +1 -1
  59. package/dist/core/ll_client.d.ts +6 -1
  60. package/dist/core/ll_client.d.ts.map +1 -0
  61. package/dist/core/ll_client.js +25 -8
  62. package/dist/core/ll_client.js.map +1 -1
  63. package/dist/core/ll_transaction.cjs +4 -5
  64. package/dist/core/ll_transaction.cjs.map +1 -1
  65. package/dist/core/ll_transaction.d.ts.map +1 -0
  66. package/dist/core/ll_transaction.js +1 -2
  67. package/dist/core/ll_transaction.js.map +1 -1
  68. package/dist/core/stat.cjs +1 -2
  69. package/dist/core/stat.cjs.map +1 -1
  70. package/dist/core/stat.d.ts.map +1 -0
  71. package/dist/core/stat.js +1 -1
  72. package/dist/core/transaction.cjs +32 -21
  73. package/dist/core/transaction.cjs.map +1 -1
  74. package/dist/core/transaction.d.ts.map +1 -0
  75. package/dist/core/transaction.js +23 -12
  76. package/dist/core/transaction.js.map +1 -1
  77. package/dist/core/type_conversion.cjs +8 -9
  78. package/dist/core/type_conversion.cjs.map +1 -1
  79. package/dist/core/type_conversion.js +4 -5
  80. package/dist/core/type_conversion.js.map +1 -1
  81. package/dist/core/types.cjs +3 -4
  82. package/dist/core/types.cjs.map +1 -1
  83. package/dist/core/types.d.ts.map +1 -0
  84. package/dist/core/types.js +2 -3
  85. package/dist/core/types.js.map +1 -1
  86. package/dist/core/unauth_client.cjs +4 -5
  87. package/dist/core/unauth_client.cjs.map +1 -1
  88. package/dist/core/unauth_client.d.ts.map +1 -0
  89. package/dist/core/unauth_client.js +1 -2
  90. package/dist/core/unauth_client.js.map +1 -1
  91. package/dist/core/websocket_stream.cjs +4 -5
  92. package/dist/core/websocket_stream.cjs.map +1 -1
  93. package/dist/core/websocket_stream.js +1 -2
  94. package/dist/core/websocket_stream.js.map +1 -1
  95. package/dist/core/wire.d.ts.map +1 -0
  96. package/dist/helpers/pl.cjs +12 -14
  97. package/dist/helpers/pl.cjs.map +1 -1
  98. package/dist/helpers/pl.d.ts.map +1 -0
  99. package/dist/helpers/pl.js +5 -7
  100. package/dist/helpers/pl.js.map +1 -1
  101. package/dist/helpers/poll.cjs +3 -4
  102. package/dist/helpers/poll.cjs.map +1 -1
  103. package/dist/helpers/poll.d.ts.map +1 -0
  104. package/dist/helpers/poll.js +1 -2
  105. package/dist/helpers/poll.js.map +1 -1
  106. package/dist/helpers/retry_strategy.cjs +1 -2
  107. package/dist/helpers/retry_strategy.cjs.map +1 -1
  108. package/dist/helpers/retry_strategy.js +1 -1
  109. package/dist/helpers/retry_strategy.js.map +1 -1
  110. package/dist/helpers/tx_helpers.cjs +3 -4
  111. package/dist/helpers/tx_helpers.cjs.map +1 -1
  112. package/dist/helpers/tx_helpers.d.ts.map +1 -0
  113. package/dist/helpers/tx_helpers.js +1 -2
  114. package/dist/helpers/tx_helpers.js.map +1 -1
  115. package/dist/index.cjs +34 -34
  116. package/dist/index.d.ts +2 -2
  117. package/dist/index.js +2 -3
  118. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs +3 -4
  119. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -1
  120. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +1 -0
  121. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js +1 -2
  122. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -1
  123. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +2039 -644
  124. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
  125. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +62 -13
  126. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -1
  127. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +78 -8
  128. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +1 -0
  129. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +60 -11
  130. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -1
  131. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +658 -51
  132. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +1 -0
  133. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +2033 -639
  134. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
  135. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +251 -22
  136. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -1
  137. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts +104 -10
  138. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +1 -0
  139. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +248 -19
  140. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -1
  141. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +28 -15
  142. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -1
  143. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts +4 -0
  144. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +1 -0
  145. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +27 -14
  146. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
  147. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +17 -16
  148. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -1
  149. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts +4 -0
  150. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +1 -0
  151. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +15 -14
  152. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -1
  153. package/dist/proto-grpc/google/protobuf/any.cjs +2 -3
  154. package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -1
  155. package/dist/proto-grpc/google/protobuf/any.d.ts.map +1 -0
  156. package/dist/proto-grpc/google/protobuf/any.js +1 -2
  157. package/dist/proto-grpc/google/protobuf/any.js.map +1 -1
  158. package/dist/proto-grpc/google/protobuf/duration.cjs +2 -3
  159. package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
  160. package/dist/proto-grpc/google/protobuf/duration.d.ts.map +1 -0
  161. package/dist/proto-grpc/google/protobuf/duration.js +1 -2
  162. package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
  163. package/dist/proto-grpc/google/protobuf/timestamp.cjs +2 -3
  164. package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
  165. package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +1 -0
  166. package/dist/proto-grpc/google/protobuf/timestamp.js +1 -2
  167. package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
  168. package/dist/proto-grpc/google/rpc/code.cjs +1 -2
  169. package/dist/proto-grpc/google/rpc/code.cjs.map +1 -1
  170. package/dist/proto-grpc/google/rpc/code.d.ts.map +1 -0
  171. package/dist/proto-grpc/google/rpc/code.js +1 -1
  172. package/dist/proto-grpc/google/rpc/code.js.map +1 -1
  173. package/dist/proto-rest/index.cjs +8 -9
  174. package/dist/proto-rest/index.cjs.map +1 -1
  175. package/dist/proto-rest/index.d.ts.map +1 -0
  176. package/dist/proto-rest/index.js +1 -2
  177. package/dist/proto-rest/index.js.map +1 -1
  178. package/dist/proto-rest/plapi.d.ts +281 -28
  179. package/dist/proto-rest/plapi.d.ts.map +1 -0
  180. package/dist/test/tcp-proxy.cjs +2 -3
  181. package/dist/test/tcp-proxy.cjs.map +1 -1
  182. package/dist/test/tcp-proxy.d.ts.map +1 -0
  183. package/dist/test/tcp-proxy.js +1 -2
  184. package/dist/test/tcp-proxy.js.map +1 -1
  185. package/dist/test/test_config.cjs +16 -19
  186. package/dist/test/test_config.cjs.map +1 -1
  187. package/dist/test/test_config.d.ts.map +1 -0
  188. package/dist/test/test_config.js +3 -6
  189. package/dist/test/test_config.js.map +1 -1
  190. package/dist/util/pl.cjs +1 -2
  191. package/dist/util/pl.cjs.map +1 -1
  192. package/dist/util/pl.js +1 -1
  193. package/dist/util/util.cjs +1 -2
  194. package/dist/util/util.cjs.map +1 -1
  195. package/dist/util/util.js +1 -1
  196. package/package.json +8 -8
  197. package/src/core/client.ts +80 -30
  198. package/src/core/errors.ts +11 -0
  199. package/src/core/ll_client.test.ts +8 -0
  200. package/src/core/ll_client.ts +30 -2
  201. package/src/core/ll_transaction.test.ts +12 -2
  202. package/src/core/transaction.ts +41 -10
  203. package/src/core/type_conversion.ts +1 -1
  204. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.ts +119 -15
  205. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.ts +2274 -322
  206. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.ts +276 -20
  207. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.ts +11 -0
  208. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.ts +2 -2
  209. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.ts +11 -0
  210. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.ts +3 -3
  211. package/src/proto-grpc/google/protobuf/descriptor.ts +2 -5
  212. package/src/proto-grpc/google/protobuf/struct.ts +1 -1
  213. package/src/proto-rest/plapi.ts +293 -22
@@ -4,6 +4,22 @@
4
4
  * Do not make direct changes to the file.
5
5
  */
6
6
  interface paths {
7
+ "/v1/auth/grant-access": {
8
+ parameters: {
9
+ query?: never;
10
+ header?: never;
11
+ path?: never;
12
+ cookie?: never;
13
+ };
14
+ get?: never;
15
+ put?: never;
16
+ post: operations["Platform_GrantAccess"];
17
+ delete?: never;
18
+ options?: never;
19
+ head?: never;
20
+ patch?: never;
21
+ trace?: never;
22
+ };
7
23
  "/v1/auth/jwt-token": {
8
24
  parameters: {
9
25
  query?: never;
@@ -36,6 +52,22 @@ interface paths {
36
52
  patch?: never;
37
53
  trace?: never;
38
54
  };
55
+ "/v1/auth/revoke-grant": {
56
+ parameters: {
57
+ query?: never;
58
+ header?: never;
59
+ path?: never;
60
+ cookie?: never;
61
+ };
62
+ get?: never;
63
+ put?: never;
64
+ post: operations["Platform_RevokeGrant"];
65
+ delete?: never;
66
+ options?: never;
67
+ head?: never;
68
+ patch?: never;
69
+ trace?: never;
70
+ };
39
71
  "/v1/controller/aliases-and-urls": {
40
72
  parameters: {
41
73
  query?: never;
@@ -228,7 +260,7 @@ interface paths {
228
260
  patch?: never;
229
261
  trace?: never;
230
262
  };
231
- "/v1/locks/lease": {
263
+ "/v1/locks/lease/create": {
232
264
  parameters: {
233
265
  query?: never;
234
266
  header?: never;
@@ -236,9 +268,78 @@ interface paths {
236
268
  cookie?: never;
237
269
  };
238
270
  get?: never;
239
- put: operations["Platform_UpdateLease"]; /** @description Locks */
271
+ put?: never;
272
+ /**
273
+ * @description LeaseResource creates a lease for a resource. A lease is a temporary lock that needs periodic renewal to stay valid.
274
+ * Leases are a separate mechanism from locks: leases are focused on 'clients', while locks are focused on 'resources'.
275
+ * To keep the lease active, the client needs the lease ID that is generated when a lease is created and used for lease updates.
276
+ */
240
277
  post: operations["Platform_LeaseResource"];
241
- delete: operations["Platform_ReleaseLease"];
278
+ delete?: never;
279
+ options?: never;
280
+ head?: never;
281
+ patch?: never;
282
+ trace?: never;
283
+ };
284
+ "/v1/locks/lease/release": {
285
+ parameters: {
286
+ query?: never;
287
+ header?: never;
288
+ path?: never;
289
+ cookie?: never;
290
+ };
291
+ get?: never;
292
+ put?: never;
293
+ post: operations["Platform_ReleaseLease"];
294
+ delete?: never;
295
+ options?: never;
296
+ head?: never;
297
+ patch?: never;
298
+ trace?: never;
299
+ };
300
+ "/v1/locks/lease/update": {
301
+ parameters: {
302
+ query?: never;
303
+ header?: never;
304
+ path?: never;
305
+ cookie?: never;
306
+ };
307
+ get?: never;
308
+ put?: never;
309
+ post: operations["Platform_UpdateLease"];
310
+ delete?: never;
311
+ options?: never;
312
+ head?: never;
313
+ patch?: never;
314
+ trace?: never;
315
+ };
316
+ "/v1/locks/lock/create": {
317
+ parameters: {
318
+ query?: never;
319
+ header?: never;
320
+ path?: never;
321
+ cookie?: never;
322
+ };
323
+ get?: never;
324
+ put?: never;
325
+ /**
326
+ * @description LockFieldValues gets the resource and obtains a lock on all resolved values of listed fields:
327
+ * - get the resource that will take the lock ('FOR' resource) (lock cannot be obtained 'FOR' or 'ON' deleted resource)
328
+ * - list resource's fields, take fields with names set in request
329
+ * - get resolved values of listed fields (IDs of 'ON' resources).
330
+ * - acquire lock on all 'ON' resources, marking 'FOR' resource as an owner.
331
+ *
332
+ * Lock logic constraints:
333
+ * - Locking is optimistic: if two processes try to obtain a lock on the same resource, one of them
334
+ * succeeds, while the other fails with an error (no long waiting)
335
+ * - Only resolved reference can be locked: to obtain a lock for a particular field's value, the backend needs to know
336
+ * the resource ID this field points to. Unless all listed field references are resolved to a final ID, the lock will fail.
337
+ * - Only an original resource can be locked: if a resource is 'pure' (supports deduplication), it has to pass deduplication before
338
+ * being lockable. An attempt to lock a resource that has not become original will fail.
339
+ * - Locking is a one-way operation: it cannot be 'released' or 'revoked'.
340
+ */
341
+ post: operations["Platform_LockFieldValues"];
342
+ delete?: never;
242
343
  options?: never;
243
344
  head?: never;
244
345
  patch?: never;
@@ -375,7 +476,8 @@ interface components {
375
476
  };
376
477
  DetachFilter_Response: Record<string, never>;
377
478
  Exists_Request: {
378
- resourceId: string;
479
+ resourceId: string; /** Format: bytes */
480
+ resourceSignature: string;
379
481
  };
380
482
  Exists_Response: {
381
483
  exists: boolean;
@@ -385,27 +487,39 @@ interface components {
385
487
  type: number;
386
488
  features: components["schemas"]["Resource_Features"];
387
489
  /**
388
- * @description _resolved_ value of field or _assigned_ if the field was assigned to a resource.
389
- * If field refers to another field, it will get
390
- * value only when this chain of references ends up with direct resource
391
- * reference. At that moment all fields in the chain will get their values
490
+ * @description _resolved_ value of a field or _assigned_ if the field was assigned to a resource.
491
+ * If a field refers to another field, it will get
492
+ * a value only when this chain of references ends up with a direct resource
493
+ * reference. At that moment, all fields in the chain will get their values
392
494
  * resolved and will start to refer to the same resource directly.
393
495
  */
394
496
  value: string;
497
+ /**
498
+ * Format: bytes
499
+ * @description Signature for value resource ID, inheriting the parent resource's color.
500
+ * Populated server-side when the parent resource has a known color in the current TX.
501
+ */
502
+ valueSignature: string;
395
503
  /**
396
504
  * Format: enum
397
- * @description If the value was empty, assigned or finally resolved.
505
+ * @description Whether the value is empty, assigned, or finally resolved.
398
506
  */
399
507
  valueStatus: number; /** @description If the value is in its final state (ready, duplicate or error) */
400
508
  valueIsFinal: boolean;
401
509
  /**
402
- * @description Resource error resource id if any.
403
- * Is intended to report problems _from_ platform to client.
510
+ * @description Error resource ID, if any.
511
+ * Is intended to report problems _from_ the platform to the client.
404
512
  */
405
513
  error: string;
514
+ /**
515
+ * Format: bytes
516
+ * @description Signature for error resource ID, inheriting the parent resource's color.
517
+ */
518
+ errorSignature: string;
406
519
  };
407
520
  FieldRef: {
408
- resourceId: string;
521
+ resourceId: string; /** Format: bytes */
522
+ resourceSignature: string;
409
523
  fieldName: string;
410
524
  };
411
525
  FieldSchema: {
@@ -413,10 +527,12 @@ interface components {
413
527
  name: string;
414
528
  };
415
529
  GetJWTToken_Request: {
416
- expiration: string;
530
+ expiration: string; /** Format: enum */
531
+ requestedRole: number;
417
532
  };
418
533
  GetJWTToken_Response: {
419
- token: string;
534
+ token: string; /** Format: bytes */
535
+ sessionId: string;
420
536
  };
421
537
  GetNotifications_Request: {
422
538
  controllerType: string; /** Format: uint32 */
@@ -433,7 +549,8 @@ interface components {
433
549
  controllerUrl: string;
434
550
  };
435
551
  Get_Request: {
436
- resourceId: string;
552
+ resourceId: string; /** Format: bytes */
553
+ resourceSignature: string;
437
554
  loadFields: boolean;
438
555
  };
439
556
  Get_Response: {
@@ -444,6 +561,16 @@ interface components {
444
561
  } & {
445
562
  [key: string]: unknown;
446
563
  };
564
+ GrantAccess_Request: {
565
+ resourceId: string; /** Format: bytes */
566
+ resourceSignature: string;
567
+ targetUser: string;
568
+ permissions: components["schemas"]["Grant_Permissions"];
569
+ };
570
+ GrantAccess_Response: Record<string, never>; /** @description Permissions describes access level for a grant. */
571
+ Grant_Permissions: {
572
+ writable: boolean;
573
+ };
447
574
  License_Response: {
448
575
  /** Format: int32 */status: number;
449
576
  isOk: boolean;
@@ -490,6 +617,7 @@ interface components {
490
617
  resourceCreated: boolean;
491
618
  resourceDeleted: boolean;
492
619
  resourceReady: boolean;
620
+ resourceRecovered: boolean;
493
621
  resourceDuplicate: boolean;
494
622
  resourceError: boolean; /** @description Field events */
495
623
  inputsLocked: boolean;
@@ -524,6 +652,7 @@ interface components {
524
652
  allOutputsSet: boolean;
525
653
  genericOtwSet: boolean;
526
654
  dynamicChanged: boolean;
655
+ resourceRecovered: boolean;
527
656
  };
528
657
  Notification_FieldChange: {
529
658
  old: components["schemas"]["Field"];
@@ -531,8 +660,7 @@ interface components {
531
660
  };
532
661
  Ping_Response: {
533
662
  coreVersion: string;
534
- coreFullVersion: string;
535
- serverInfo: string; /** Format: enum */
663
+ coreFullVersion: string; /** Format: enum */
536
664
  compression: number;
537
665
  /**
538
666
  * @description instanceID is a unique ID that changes when we reset DB state.
@@ -558,6 +686,7 @@ interface components {
558
686
  };
559
687
  Release_Request: {
560
688
  resourceId: string; /** Format: bytes */
689
+ resourceSignature: string; /** Format: bytes */
561
690
  leaseId: string;
562
691
  };
563
692
  Release_Response: Record<string, never>;
@@ -566,7 +695,8 @@ interface components {
566
695
  };
567
696
  RemoveAliasesAndUrls_Response: Record<string, never>;
568
697
  Resource: {
569
- id: string; /** Format: bytes */
698
+ resourceId: string; /** Format: bytes */
699
+ resourceSignature: string; /** Format: bytes */
570
700
  canonicalId: string; /** Format: enum */
571
701
  kind: number;
572
702
  type: components["schemas"]["ResourceType"]; /** Format: bytes */
@@ -591,7 +721,31 @@ interface components {
591
721
  };
592
722
  ResourceSchema: {
593
723
  type: components["schemas"]["ResourceType"];
594
- fields: components["schemas"]["FieldSchema"][];
724
+ fields: components["schemas"]["FieldSchema"][]; /** @description Access restriction flags for non-controller roles */
725
+ accessFlags: components["schemas"]["ResourceSchema_AccessFlags"];
726
+ freeInputs: boolean;
727
+ freeOutputs: boolean;
728
+ };
729
+ ResourceSchema_AccessFlags: {
730
+ /**
731
+ * @description Deny-list approach: default = allowed (true)
732
+ * Controllers set these to false to restrict non-controller roles (role='u', role='w')
733
+ */
734
+ createResource: boolean; /** @description IMPORTANT: read_fields=false with write_fields=true is a forbidden combination */
735
+ readFields: boolean;
736
+ writeFields: boolean; /** @description IMPORTANT: read_kv=false with write_kv=true is a forbidden combination */
737
+ readKv: boolean;
738
+ writeKv: boolean;
739
+ /**
740
+ * @description Per-field-type overrides (map: field_type → bool)
741
+ * When defined for a field type, overrides resource-level flags
742
+ */
743
+ readByFieldType: {
744
+ [key: string]: boolean;
745
+ };
746
+ writeByFieldType: {
747
+ [key: string]: boolean;
748
+ };
595
749
  };
596
750
  ResourceType: {
597
751
  name: string;
@@ -600,6 +754,12 @@ interface components {
600
754
  Resource_Features: {
601
755
  ephemeral: boolean;
602
756
  };
757
+ RevokeGrant_Request: {
758
+ resourceId: string; /** Format: bytes */
759
+ resourceSignature: string;
760
+ targetUser: string;
761
+ };
762
+ RevokeGrant_Response: Record<string, never>;
603
763
  SetFeatures_Request: {
604
764
  features: components["schemas"]["ResourceAPIFeature"][];
605
765
  };
@@ -646,6 +806,37 @@ interface components {
646
806
  pathItems: never;
647
807
  }
648
808
  interface operations {
809
+ Platform_GrantAccess: {
810
+ parameters: {
811
+ query?: never;
812
+ header?: never;
813
+ path?: never;
814
+ cookie?: never;
815
+ };
816
+ requestBody: {
817
+ content: {
818
+ "application/json": components["schemas"]["GrantAccess_Request"];
819
+ };
820
+ };
821
+ responses: {
822
+ /** @description OK */200: {
823
+ headers: {
824
+ [name: string]: unknown;
825
+ };
826
+ content: {
827
+ "application/json": components["schemas"]["GrantAccess_Response"];
828
+ };
829
+ }; /** @description Default error response */
830
+ default: {
831
+ headers: {
832
+ [name: string]: unknown;
833
+ };
834
+ content: {
835
+ "application/json": components["schemas"]["Status"];
836
+ };
837
+ };
838
+ };
839
+ };
649
840
  Platform_GetJWTToken: {
650
841
  parameters: {
651
842
  query?: never;
@@ -704,6 +895,37 @@ interface operations {
704
895
  };
705
896
  };
706
897
  };
898
+ Platform_RevokeGrant: {
899
+ parameters: {
900
+ query?: never;
901
+ header?: never;
902
+ path?: never;
903
+ cookie?: never;
904
+ };
905
+ requestBody: {
906
+ content: {
907
+ "application/json": components["schemas"]["RevokeGrant_Request"];
908
+ };
909
+ };
910
+ responses: {
911
+ /** @description OK */200: {
912
+ headers: {
913
+ [name: string]: unknown;
914
+ };
915
+ content: {
916
+ "application/json": components["schemas"]["RevokeGrant_Response"];
917
+ };
918
+ }; /** @description Default error response */
919
+ default: {
920
+ headers: {
921
+ [name: string]: unknown;
922
+ };
923
+ content: {
924
+ "application/json": components["schemas"]["Status"];
925
+ };
926
+ };
927
+ };
928
+ };
707
929
  Platform_WriteControllerAliasesAndUrls: {
708
930
  parameters: {
709
931
  query?: never;
@@ -1134,7 +1356,7 @@ interface operations {
1134
1356
  };
1135
1357
  };
1136
1358
  };
1137
- Platform_UpdateLease: {
1359
+ Platform_LeaseResource: {
1138
1360
  parameters: {
1139
1361
  query?: never;
1140
1362
  header?: never;
@@ -1143,7 +1365,7 @@ interface operations {
1143
1365
  };
1144
1366
  requestBody: {
1145
1367
  content: {
1146
- "application/json": components["schemas"]["Update_Request"];
1368
+ "application/json": components["schemas"]["Create_Request"];
1147
1369
  };
1148
1370
  };
1149
1371
  responses: {
@@ -1152,7 +1374,7 @@ interface operations {
1152
1374
  [name: string]: unknown;
1153
1375
  };
1154
1376
  content: {
1155
- "application/json": components["schemas"]["Update_Response"];
1377
+ "application/json": components["schemas"]["Create_Response"];
1156
1378
  };
1157
1379
  }; /** @description Default error response */
1158
1380
  default: {
@@ -1165,7 +1387,7 @@ interface operations {
1165
1387
  };
1166
1388
  };
1167
1389
  };
1168
- Platform_LeaseResource: {
1390
+ Platform_ReleaseLease: {
1169
1391
  parameters: {
1170
1392
  query?: never;
1171
1393
  header?: never;
@@ -1174,7 +1396,7 @@ interface operations {
1174
1396
  };
1175
1397
  requestBody: {
1176
1398
  content: {
1177
- "application/json": components["schemas"]["Create_Request"];
1399
+ "application/json": components["schemas"]["Release_Request"];
1178
1400
  };
1179
1401
  };
1180
1402
  responses: {
@@ -1183,7 +1405,7 @@ interface operations {
1183
1405
  [name: string]: unknown;
1184
1406
  };
1185
1407
  content: {
1186
- "application/json": components["schemas"]["Create_Response"];
1408
+ "application/json": components["schemas"]["Release_Response"];
1187
1409
  };
1188
1410
  }; /** @description Default error response */
1189
1411
  default: {
@@ -1196,7 +1418,7 @@ interface operations {
1196
1418
  };
1197
1419
  };
1198
1420
  };
1199
- Platform_ReleaseLease: {
1421
+ Platform_UpdateLease: {
1200
1422
  parameters: {
1201
1423
  query?: never;
1202
1424
  header?: never;
@@ -1205,7 +1427,7 @@ interface operations {
1205
1427
  };
1206
1428
  requestBody: {
1207
1429
  content: {
1208
- "application/json": components["schemas"]["Release_Request"];
1430
+ "application/json": components["schemas"]["Update_Request"];
1209
1431
  };
1210
1432
  };
1211
1433
  responses: {
@@ -1214,7 +1436,38 @@ interface operations {
1214
1436
  [name: string]: unknown;
1215
1437
  };
1216
1438
  content: {
1217
- "application/json": components["schemas"]["Release_Response"];
1439
+ "application/json": components["schemas"]["Update_Response"];
1440
+ };
1441
+ }; /** @description Default error response */
1442
+ default: {
1443
+ headers: {
1444
+ [name: string]: unknown;
1445
+ };
1446
+ content: {
1447
+ "application/json": components["schemas"]["Status"];
1448
+ };
1449
+ };
1450
+ };
1451
+ };
1452
+ Platform_LockFieldValues: {
1453
+ parameters: {
1454
+ query?: never;
1455
+ header?: never;
1456
+ path?: never;
1457
+ cookie?: never;
1458
+ };
1459
+ requestBody: {
1460
+ content: {
1461
+ "application/json": components["schemas"]["Create_Request"];
1462
+ };
1463
+ };
1464
+ responses: {
1465
+ /** @description OK */200: {
1466
+ headers: {
1467
+ [name: string]: unknown;
1468
+ };
1469
+ content: {
1470
+ "application/json": components["schemas"]["Create_Response"];
1218
1471
  };
1219
1472
  }; /** @description Default error response */
1220
1473
  default: {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plapi.d.ts","names":[],"sources":["../../src/proto-rest/plapi.ts"],"mappings":";;AAKA;;;UAAiB,KAAA;EACf,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,kBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA,GA3BF;IA8BA,GAAA,EAAK,UAAA;IACL,GAAA;IACA,IAAA;IACA,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,iCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA,EAAQ,UAAA;IACR,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,oCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,2BAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA,EAAQ,UAAA;IACR,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,8BAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA,UAjBA;IAmBA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,aAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA,EAAK,UAAA;IACL,GAAA;IACA,IAAA;IACA,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,wBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IAbA;;;;;IAmBA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,wBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IAJE;;;;;;;;;;;;;;;;IAqBF,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,uBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,UAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA,GAiBA;IAdF,GAAA,EAAK,UAAA;IACL,GAAA;IACA,IAAA;IACA,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA,GAoBF;IAjBA,GAAA,EAAK,UAAA;IACL,GAAA;IACA,IAAA;IACA,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,gCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA,UAoBA;IAlBA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,gCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;EAEF,aAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,GAAA;IACA,GAAA;IACA,IAAA,EAAM,UAAA;IACN,MAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA;AAAA;AAAA,UAIa,UAAA;EACf,OAAA;IACE,oBAAA;MACE,cAAA;MACA,UAAA;MACA,QAAA;IAAA;IAEF,qBAAA,EAAuB,MAAA;IACvB,0BAAA;MACE,YAAA;MACA,cAAA;IAAA;IAEF,2BAAA,EAA6B,MAAA;IAC7B,qBAAA;MACE,cAAA;IAAA;IAEF,sBAAA,EAAwB,MAAA;IACxB,cAAA;MA4UsB,mBA1UpB,IAAA,UA8UoB;MA5UpB,EAAA,EAAI,UAAA;IAAA;IAEN,eAAA;MACE,QAAA,EAAU,UAAA;IAAA;IAEZ,kBAAA;MACE,cAAA;IAAA;IAEF,mBAAA,EAAqB,MAAA;IACrB,oBAAA;MACE,cAAA;MACA,UAAA;IAAA;IAEF,qBAAA,EAAuB,MAAA;IACvB,cAAA;MACE,UAAA,UA3BA;MA6BA,iBAAA;IAAA;IAEF,eAAA;MACE,MAAA;IAAA;IAEF,KAAA;MA3BwB,uFA6BtB,EAAA,EAAI,UAAA,yBA1BJ;MA4BA,IAAA;MACA,QAAA,EAAU,UAAA;MAzBZ;;;;;;;MAiCE,KAAA;MAzBA;;;;;MA+BA,cAAA;MAxBA;;;;MA6BA,WAAA,UAtBI;MAwBJ,YAAA;MArBA;;;;MA0BA,KAAA;MALA;;;;MAUA,cAAA;IAAA;IAEF,QAAA;MACE,UAAA,UAOA;MALA,iBAAA;MACA,SAAA;IAAA;IAEF,WAAA;MAUA,mBARE,IAAA;MACA,IAAA;IAAA;IAEF,mBAAA;MACE,UAAA,UAcF;MAZE,aAAA;IAAA;IAEF,oBAAA;MACE,KAAA,UAcA;MAZA,SAAA;IAAA;IAEF,wBAAA;MACE,cAAA,UAiBA;MAfA,gBAAA;IAAA;IAEF,yBAAA;MACE,aAAA,EAAe,UAAA;IAAA;IAEjB,cAAA;MACE,eAAA;MACA,UAAA;IAAA;IAEF,eAAA;MACE,aAAA;IAAA;IAEF,WAAA;MACE,UAAA,UAsBoB;MApBpB,iBAAA;MACA,UAAA;IAAA;IAEF,YAAA;MACE,QAAA,EAAU,UAAA;IAAA,GA+BZ;IA5BA,iBAAA;MA8BE,uDA5BA,OAAA;IAAA;MAAA,CAEC,GAAA;IAAA;IAEH,mBAAA;MACE,UAAA,UAgCA;MA9BA,iBAAA;MACA,UAAA;MACA,WAAA,EAAa,UAAA;IAAA;IAEf,oBAAA,EAAsB,MAAA,iBAgCpB;IA9BF,iBAAA;MACE,QAAA;IAAA;IAEF,gBAAA;MA8BK,oBA5BH,MAAA;MACA,IAAA;MA6BS;;;;MAxBT,YAAA;IAAA;IAEF,sBAAA;MACE,IAAA;MACA,IAAA;MACA,IAAA;QAAA,CACG,GAAA;MAAA;IAAA;IAGL,oBAAA;MACE,OAAA,EAAS,UAAA;IAAA;IAEX,0BAAA;MACE,KAAA,EAAO,UAAA;IAAA;IAET,YAAA;MACE,cAAA;MACA,OAAA;MACA,UAAA;MACA,YAAA,EAAc,UAAA;MACd,MAAA,EAAQ,UAAA;MACR,YAAA;QAAA,CACG,GAAA,WAAc,UAAA;MAAA;MAEjB,OAAA,EAAS,UAAA;MACT,UAAA;MACA,MAAA,EAAQ,UAAA;IAAA;IAEV,kBAAA;MACE,YAAA,EAAc,UAAA;MACd,UAAA;MACA,WAAA,EAAa,UAAA;MACb,OAAA,EAAS,UAAA;IAAA;IAEX,8BAAA;MACE,GAAA;MACA,eAAA;MACA,eAAA;MACA,aAAA;MACA,iBAAA;MACA,iBAAA;MACA,aAAA,WA+BA;MA7BA,YAAA;MACA,aAAA;MACA,YAAA;MACA,aAAA;MACA,QAAA;MACA,YAAA;MACA,SAAA;MACA,aAAA;MACA,aAAA;MACA,cAAA;IAAA;IAEF,0BAAA;MACE,MAAA;QAAA,CACG,GAAA;MAAA;IAAA;IAGL,mBAAA;MACE,eAAA;MACA,eAAA;MACA,aAAA;MACA,iBAAA;MACA,aAAA;MACA,YAAA;MACA,aAAA;MACA,YAAA;MACA,aAAA;MACA,QAAA;MACA,YAAA;MACA,SAAA;MACA,aAAA;MACA,aAAA;MACA,cAAA;MACA,iBAAA;IAAA;IAEF,wBAAA;MACE,GAAA,EAAK,UAAA;MACL,GAAA,EAAK,UAAA;IAAA;IAEP,aAAA;MACE,WAAA;MACA,eAAA,UA6CA;MA3CA,WAAA;MA6CA;;;;;;MAtCA,UAAA;MACA,QAAA;MACA,EAAA;MACA,IAAA;IAAA;IAEF,gBAAA;MACE,cAAA;MACA,OAAA;QAAA,CACG,GAAA,WAAc,UAAA;MAAA;MAEjB,eAAA,EAAiB,UAAA;IAAA;IAEnB,iBAAA;MACE,YAAA;MACA,cAAA;IAAA;IAEF,eAAA;MACE,UAAA,UA6CQ;MA3CR,iBAAA,UA6Ca;MA3Cb,OAAA;IAAA;IAEF,gBAAA,EAAkB,MAAA;IAClB,4BAAA;MACE,cAAA;IAAA;IAEF,6BAAA,EAA+B,MAAA;IAC/B,QAAA;MACE,UAAA,UAwDG;MAtDH,iBAAA,UAyDG;MAvDH,WAAA,UA2DA;MAzDA,IAAA;MACA,IAAA,EAAM,UAAA,6BA4DN;MA1DA,IAAA;MACA,QAAA,EAAU,UAAA;MACV,MAAA,EAAQ,UAAA,wBA8DR;MA5DA,SAAA;MACA,YAAA;MACA,aAAA;MACA,aAAA;MACA,OAAA;MACA,kBAAA;MACA,gBAAA,UA6DF;MA3DE,WAAA,UA6DA;MA3DA,WAAA;IAAA;IAEF,kBAAA;MACE,cAAA;MACA,WAAA;MACA,YAAA,EAAc,UAAA;MACd,QAAA;IAAA;IAEF,cAAA;MACE,IAAA,EAAM,UAAA;MACN,MAAA,EAAQ,UAAA,8BAsER;MApEA,WAAA,EAAa,UAAA;MACb,UAAA;MACA,WAAA;IAAA;IAEF,0BAAA;MAsEA;;;;MAjEE,cAAA,WAqEG;MAnEH,UAAA;MACA,WAAA,WAuEJ;MArEI,MAAA;MACA,OAAA;MAuEJ;;;;MAlEI,eAAA;QAAA,CACG,GAAA;MAAA;MAEH,gBAAA;QAAA,CACG,GAAA;MAAA;IAAA;IAGL,YAAA;MACE,IAAA;MACA,OAAA;IAAA;IAEF,iBAAA;MACE,SAAA;IAAA;IAEF,mBAAA;MACE,UAAA,UAoNwB;MAlNxB,iBAAA;MACA,UAAA;IAAA;IAEF,oBAAA,EAAsB,MAAA;IACtB,mBAAA;MACE,QAAA,EAAU,UAAA;IAAA;IAEZ,oBAAA,EAAsB,MAAA;IACtB,QAAA;MACE,IAAA;MACA,OAAA;QAAA,CACG,GAAA;MAAA;IAAA,GA4WqB;IAxW1B,MAAA;MAgY0B;;;;MA3XxB,IAAA,UAmbsB;MAjbtB,OAAA,UAocwB;MAlcxB,OAAA,EAAS,UAAA;IAAA;IAEX,YAAA;MACE,IAAA;IAAA;IAEF,aAAA,EAAe,MAAA;IACf,cAAA;MACE,cAAA;MACA,OAAA;QAAA,CACG,GAAA,WAAc,UAAA;MAAA;MAEjB,eAAA,EAAiB,UAAA;IAAA;IAEnB,eAAA,EAAiB,MAAA;IACjB,2BAAA;MACE,cAAA;MACA,aAAA;QAAA,CACG,GAAA;MAAA;IAAA;IAGL,4BAAA,EAA8B,MAAA;EAAA;EAEhC,SAAA;EACA,UAAA;EACA,aAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA23BoC,sBAz3BlC,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAVtB;MAcF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAHwB,sBAKtB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAKtB;MADF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;IACA,SAAA;MAYI,sBAVF,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAkBxB;MAdA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA0BE,sBAxBA,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAgCtB;MA5BF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,sCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAwCM,sBAtCJ,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAgD1B;MA5CE,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,uCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAwDE,sBAtDA,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GA6DxB;MAzDA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,qCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAqEI,sBAnEF,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GA2EpB;MAvEJ,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAkF0B,sBAhFxB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAyFtB;MArFF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,6BAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAgGwB,sBA9FtB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAwGtB;MApGF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAgHO,sBA9GL,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAsHxB;MAlHA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,8BAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA+HA,sBA7HE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAoIpB;MAhIJ,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,gCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA2I0B,sBAzIxB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAoJxB;MAhJA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,sBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA4JE,sBA1JA,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAiKpB;MA7JJ,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,mCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAwK0B,sBAtKxB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAiLxB;MA7KA,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,2BAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAyLE,sBAvLA,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GA8LtB;MA1LF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAsMO,sBApML,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GA2MA;MAvMxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MAuNF,sBArNI,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GA2NtB;MAvNF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,gBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;IACA,SAAA;MAkOI,sBAhOF,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAwOpB;MApOJ,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,sBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA+O0B,sBA7OxB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAsPtB;MAlPF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,qBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;MA6PwB,sBA3PtB,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA,GAqQtB;MAjQF,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,oBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,wBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,yBAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,aAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;IACA,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,0BAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;IACA,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,iCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,iCAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;EAK5B,eAAA;IACE,UAAA;MACE,KAAA;MACA,MAAA;MACA,IAAA;MACA,MAAA;IAAA;IAEF,WAAA;MACE,OAAA;QACE,kBAAA,EAAoB,UAAA;MAAA;IAAA;IAGxB,SAAA;4BAEE,GAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;MAIxB,OAAA;QACE,OAAA;UAAA,CACG,IAAA;QAAA;QAEH,OAAA;UACE,kBAAA,EAAoB,UAAA;QAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -1,11 +1,10 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  let node_timers_promises = require("node:timers/promises");
3
3
  node_timers_promises = require_runtime.__toESM(node_timers_promises);
4
4
  let node_net = require("node:net");
5
5
  node_net = require_runtime.__toESM(node_net);
6
6
  let node_stream = require("node:stream");
7
7
  let node_stream_promises = require("node:stream/promises");
8
-
9
8
  //#region src/test/tcp-proxy.ts
10
9
  async function startTcpProxy(options) {
11
10
  const { port, targetPort } = options;
@@ -99,7 +98,7 @@ async function startTcpProxy(options) {
99
98
  }
100
99
  };
101
100
  }
102
-
103
101
  //#endregion
104
102
  exports.startTcpProxy = startTcpProxy;
103
+
105
104
  //# sourceMappingURL=tcp-proxy.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcp-proxy.cjs","names":["timers","net","Transform"],"sources":["../../src/test/tcp-proxy.ts"],"sourcesContent":["import * as net from \"node:net\";\nimport type { AddressInfo } from \"node:net\";\nimport { Transform } from \"node:stream\";\nimport type { TransformCallback } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport * as timers from \"node:timers/promises\";\n\nexport type TcpProxyOptions = {\n port?: number;\n targetPort: number;\n latency: number;\n verbose?: boolean;\n};\n\nexport async function startTcpProxy(options: TcpProxyOptions) {\n const { port, targetPort } = options;\n\n const state = {\n latency: options.latency,\n };\n\n const setLatency = (latency: number) => {\n state.latency = latency;\n };\n\n const getLatency = () => {\n return state.latency;\n };\n\n const connections = new Set<{ socket: net.Socket; client: net.Socket }>();\n\n async function disconnectAll(delayMs: number | undefined = undefined) {\n const kill = () => {\n for (const { socket, client } of connections) {\n if (!socket.destroyed) socket.destroy();\n if (!client.destroyed) client.destroy();\n }\n connections.clear();\n };\n if (delayMs !== undefined) await timers.setTimeout(delayMs);\n kill();\n }\n\n const server = net.createServer((socket: net.Socket) => {\n const client = net.createConnection({ port: targetPort }, () => {\n if (options.verbose) console.log(`connected to ${targetPort}`);\n });\n\n const pair = { socket, client };\n connections.add(pair);\n const onClose = () => connections.delete(pair);\n socket.on(\"close\", onClose);\n client.on(\"close\", onClose);\n\n class LatencyTransform extends Transform {\n private pendingTimer?: NodeJS.Timeout;\n constructor() {\n super();\n }\n\n _transform(chunk: Buffer, _enc: BufferEncoding, callback: TransformCallback) {\n // Backpressure is respected by delaying the callback until after push\n this.pendingTimer = setTimeout(() => {\n this.pendingTimer = undefined;\n this.push(chunk);\n callback();\n }, state.latency);\n }\n\n _destroy(err: Error | null, cb: (error?: Error | null) => void) {\n if (this.pendingTimer) clearTimeout(this.pendingTimer);\n this.pendingTimer = undefined;\n cb(err);\n }\n }\n\n const toClientLatency = new LatencyTransform();\n const toTargetLatency = new LatencyTransform();\n\n // Bidirectional pipelines with latency and error propagation\n pipeline(socket, toTargetLatency, client).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n\n pipeline(client, toClientLatency, socket).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n });\n\n server.listen({ port: port ?? 0 }, () => {\n console.log(\"Test TCP proxy server started on\", server.address());\n });\n\n // Wait for proxy to be ready\n await new Promise<void>((resolve, reject) => {\n if (server.listening) return resolve();\n const onError = (err: Error) => {\n server.off(\"listening\", onListening);\n reject(err);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n });\n\n return {\n server,\n get port() {\n return (server.address() as AddressInfo)?.port;\n },\n setLatency,\n getLatency,\n disconnectAll,\n close: async () => {\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n },\n };\n}\n\nexport type TestTcpProxy = Awaited<ReturnType<typeof startTcpProxy>>;\n"],"mappings":";;;;;;;;;AAcA,eAAsB,cAAc,SAA0B;CAC5D,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,QAAQ,EACZ,SAAS,QAAQ,SAClB;CAED,MAAM,cAAc,YAAoB;AACtC,QAAM,UAAU;;CAGlB,MAAM,mBAAmB;AACvB,SAAO,MAAM;;CAGf,MAAM,8BAAc,IAAI,KAAiD;CAEzE,eAAe,cAAc,UAA8B,QAAW;EACpE,MAAM,aAAa;AACjB,QAAK,MAAM,EAAE,QAAQ,YAAY,aAAa;AAC5C,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;AACvC,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;;AAEzC,eAAY,OAAO;;AAErB,MAAI,YAAY,OAAW,OAAMA,qBAAO,WAAW,QAAQ;AAC3D,QAAM;;CAGR,MAAM,SAASC,SAAI,cAAc,WAAuB;EACtD,MAAM,SAASA,SAAI,iBAAiB,EAAE,MAAM,YAAY,QAAQ;AAC9D,OAAI,QAAQ,QAAS,SAAQ,IAAI,gBAAgB,aAAa;IAC9D;EAEF,MAAM,OAAO;GAAE;GAAQ;GAAQ;AAC/B,cAAY,IAAI,KAAK;EACrB,MAAM,gBAAgB,YAAY,OAAO,KAAK;AAC9C,SAAO,GAAG,SAAS,QAAQ;AAC3B,SAAO,GAAG,SAAS,QAAQ;EAE3B,MAAM,yBAAyBC,sBAAU;GACvC,AAAQ;GACR,cAAc;AACZ,WAAO;;GAGT,WAAW,OAAe,MAAsB,UAA6B;AAE3E,SAAK,eAAe,iBAAiB;AACnC,UAAK,eAAe;AACpB,UAAK,KAAK,MAAM;AAChB,eAAU;OACT,MAAM,QAAQ;;GAGnB,SAAS,KAAmB,IAAoC;AAC9D,QAAI,KAAK,aAAc,cAAa,KAAK,aAAa;AACtD,SAAK,eAAe;AACpB,OAAG,IAAI;;;EAIX,MAAM,kBAAkB,IAAI,kBAAkB;AAI9C,qCAAS,QAHe,IAAI,kBAAkB,EAGZ,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;AAEF,qCAAS,QAAQ,iBAAiB,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;GACF;AAEF,QAAO,OAAO,EAAE,MAAM,QAAQ,GAAG,QAAQ;AACvC,UAAQ,IAAI,oCAAoC,OAAO,SAAS,CAAC;GACjE;AAGF,OAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,MAAI,OAAO,UAAW,QAAO,SAAS;EACtC,MAAM,WAAW,QAAe;AAC9B,UAAO,IAAI,aAAa,YAAY;AACpC,UAAO,IAAI;;EAEb,MAAM,oBAAoB;AACxB,UAAO,IAAI,SAAS,QAAQ;AAC5B,YAAS;;AAEX,SAAO,KAAK,SAAS,QAAQ;AAC7B,SAAO,KAAK,aAAa,YAAY;GACrC;AAEF,QAAO;EACL;EACA,IAAI,OAAO;AACT,UAAQ,OAAO,SAAS,EAAkB;;EAE5C;EACA;EACA;EACA,OAAO,YAAY;AACjB,SAAM,IAAI,SAAe,YAAY;AACnC,WAAO,YAAY,SAAS,CAAC;KAC7B;;EAEL"}
1
+ {"version":3,"file":"tcp-proxy.cjs","names":["timers","net","Transform"],"sources":["../../src/test/tcp-proxy.ts"],"sourcesContent":["import * as net from \"node:net\";\nimport type { AddressInfo } from \"node:net\";\nimport { Transform } from \"node:stream\";\nimport type { TransformCallback } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport * as timers from \"node:timers/promises\";\n\nexport type TcpProxyOptions = {\n port?: number;\n targetPort: number;\n latency: number;\n verbose?: boolean;\n};\n\nexport async function startTcpProxy(options: TcpProxyOptions) {\n const { port, targetPort } = options;\n\n const state = {\n latency: options.latency,\n };\n\n const setLatency = (latency: number) => {\n state.latency = latency;\n };\n\n const getLatency = () => {\n return state.latency;\n };\n\n const connections = new Set<{ socket: net.Socket; client: net.Socket }>();\n\n async function disconnectAll(delayMs: number | undefined = undefined) {\n const kill = () => {\n for (const { socket, client } of connections) {\n if (!socket.destroyed) socket.destroy();\n if (!client.destroyed) client.destroy();\n }\n connections.clear();\n };\n if (delayMs !== undefined) await timers.setTimeout(delayMs);\n kill();\n }\n\n const server = net.createServer((socket: net.Socket) => {\n const client = net.createConnection({ port: targetPort }, () => {\n if (options.verbose) console.log(`connected to ${targetPort}`);\n });\n\n const pair = { socket, client };\n connections.add(pair);\n const onClose = () => connections.delete(pair);\n socket.on(\"close\", onClose);\n client.on(\"close\", onClose);\n\n class LatencyTransform extends Transform {\n private pendingTimer?: NodeJS.Timeout;\n constructor() {\n super();\n }\n\n _transform(chunk: Buffer, _enc: BufferEncoding, callback: TransformCallback) {\n // Backpressure is respected by delaying the callback until after push\n this.pendingTimer = setTimeout(() => {\n this.pendingTimer = undefined;\n this.push(chunk);\n callback();\n }, state.latency);\n }\n\n _destroy(err: Error | null, cb: (error?: Error | null) => void) {\n if (this.pendingTimer) clearTimeout(this.pendingTimer);\n this.pendingTimer = undefined;\n cb(err);\n }\n }\n\n const toClientLatency = new LatencyTransform();\n const toTargetLatency = new LatencyTransform();\n\n // Bidirectional pipelines with latency and error propagation\n pipeline(socket, toTargetLatency, client).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n\n pipeline(client, toClientLatency, socket).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n });\n\n server.listen({ port: port ?? 0 }, () => {\n console.log(\"Test TCP proxy server started on\", server.address());\n });\n\n // Wait for proxy to be ready\n await new Promise<void>((resolve, reject) => {\n if (server.listening) return resolve();\n const onError = (err: Error) => {\n server.off(\"listening\", onListening);\n reject(err);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n });\n\n return {\n server,\n get port() {\n return (server.address() as AddressInfo)?.port;\n },\n setLatency,\n getLatency,\n disconnectAll,\n close: async () => {\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n },\n };\n}\n\nexport type TestTcpProxy = Awaited<ReturnType<typeof startTcpProxy>>;\n"],"mappings":";;;;;;;;AAcA,eAAsB,cAAc,SAA0B;CAC5D,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,QAAQ,EACZ,SAAS,QAAQ,SAClB;CAED,MAAM,cAAc,YAAoB;AACtC,QAAM,UAAU;;CAGlB,MAAM,mBAAmB;AACvB,SAAO,MAAM;;CAGf,MAAM,8BAAc,IAAI,KAAiD;CAEzE,eAAe,cAAc,UAA8B,KAAA,GAAW;EACpE,MAAM,aAAa;AACjB,QAAK,MAAM,EAAE,QAAQ,YAAY,aAAa;AAC5C,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;AACvC,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;;AAEzC,eAAY,OAAO;;AAErB,MAAI,YAAY,KAAA,EAAW,OAAMA,qBAAO,WAAW,QAAQ;AAC3D,QAAM;;CAGR,MAAM,SAASC,SAAI,cAAc,WAAuB;EACtD,MAAM,SAASA,SAAI,iBAAiB,EAAE,MAAM,YAAY,QAAQ;AAC9D,OAAI,QAAQ,QAAS,SAAQ,IAAI,gBAAgB,aAAa;IAC9D;EAEF,MAAM,OAAO;GAAE;GAAQ;GAAQ;AAC/B,cAAY,IAAI,KAAK;EACrB,MAAM,gBAAgB,YAAY,OAAO,KAAK;AAC9C,SAAO,GAAG,SAAS,QAAQ;AAC3B,SAAO,GAAG,SAAS,QAAQ;EAE3B,MAAM,yBAAyBC,YAAAA,UAAU;GACvC;GACA,cAAc;AACZ,WAAO;;GAGT,WAAW,OAAe,MAAsB,UAA6B;AAE3E,SAAK,eAAe,iBAAiB;AACnC,UAAK,eAAe,KAAA;AACpB,UAAK,KAAK,MAAM;AAChB,eAAU;OACT,MAAM,QAAQ;;GAGnB,SAAS,KAAmB,IAAoC;AAC9D,QAAI,KAAK,aAAc,cAAa,KAAK,aAAa;AACtD,SAAK,eAAe,KAAA;AACpB,OAAG,IAAI;;;EAIX,MAAM,kBAAkB,IAAI,kBAAkB;AAI9C,GAAA,GAAA,qBAAA,UAAS,QAHe,IAAI,kBAAkB,EAGZ,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;AAEF,GAAA,GAAA,qBAAA,UAAS,QAAQ,iBAAiB,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;GACF;AAEF,QAAO,OAAO,EAAE,MAAM,QAAQ,GAAG,QAAQ;AACvC,UAAQ,IAAI,oCAAoC,OAAO,SAAS,CAAC;GACjE;AAGF,OAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,MAAI,OAAO,UAAW,QAAO,SAAS;EACtC,MAAM,WAAW,QAAe;AAC9B,UAAO,IAAI,aAAa,YAAY;AACpC,UAAO,IAAI;;EAEb,MAAM,oBAAoB;AACxB,UAAO,IAAI,SAAS,QAAQ;AAC5B,YAAS;;AAEX,SAAO,KAAK,SAAS,QAAQ;AAC7B,SAAO,KAAK,aAAa,YAAY;GACrC;AAEF,QAAO;EACL;EACA,IAAI,OAAO;AACT,UAAQ,OAAO,SAAS,EAAkB;;EAE5C;EACA;EACA;EACA,OAAO,YAAY;AACjB,SAAM,IAAI,SAAe,YAAY;AACnC,WAAO,YAAY,SAAS,CAAC;KAC7B;;EAEL"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp-proxy.d.ts","names":[],"sources":["../../src/test/tcp-proxy.ts"],"mappings":";;;KAOY,eAAA;EACV,IAAA;EACA,UAAA;EACA,OAAA;EACA,OAAA;AAAA;AAAA,iBAGoB,aAAA,CAAc,OAAA,EAAS,eAAA,GAAe,OAAA;;;;;mDAiBF,OAAA;;;KA+F9C,YAAA,GAAe,OAAA,CAAQ,UAAA,QAAkB,aAAA"}
@@ -2,7 +2,6 @@ import * as timers from "node:timers/promises";
2
2
  import * as net from "node:net";
3
3
  import { Transform } from "node:stream";
4
4
  import { pipeline } from "node:stream/promises";
5
-
6
5
  //#region src/test/tcp-proxy.ts
7
6
  async function startTcpProxy(options) {
8
7
  const { port, targetPort } = options;
@@ -96,7 +95,7 @@ async function startTcpProxy(options) {
96
95
  }
97
96
  };
98
97
  }
99
-
100
98
  //#endregion
101
99
  export { startTcpProxy };
100
+
102
101
  //# sourceMappingURL=tcp-proxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcp-proxy.js","names":[],"sources":["../../src/test/tcp-proxy.ts"],"sourcesContent":["import * as net from \"node:net\";\nimport type { AddressInfo } from \"node:net\";\nimport { Transform } from \"node:stream\";\nimport type { TransformCallback } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport * as timers from \"node:timers/promises\";\n\nexport type TcpProxyOptions = {\n port?: number;\n targetPort: number;\n latency: number;\n verbose?: boolean;\n};\n\nexport async function startTcpProxy(options: TcpProxyOptions) {\n const { port, targetPort } = options;\n\n const state = {\n latency: options.latency,\n };\n\n const setLatency = (latency: number) => {\n state.latency = latency;\n };\n\n const getLatency = () => {\n return state.latency;\n };\n\n const connections = new Set<{ socket: net.Socket; client: net.Socket }>();\n\n async function disconnectAll(delayMs: number | undefined = undefined) {\n const kill = () => {\n for (const { socket, client } of connections) {\n if (!socket.destroyed) socket.destroy();\n if (!client.destroyed) client.destroy();\n }\n connections.clear();\n };\n if (delayMs !== undefined) await timers.setTimeout(delayMs);\n kill();\n }\n\n const server = net.createServer((socket: net.Socket) => {\n const client = net.createConnection({ port: targetPort }, () => {\n if (options.verbose) console.log(`connected to ${targetPort}`);\n });\n\n const pair = { socket, client };\n connections.add(pair);\n const onClose = () => connections.delete(pair);\n socket.on(\"close\", onClose);\n client.on(\"close\", onClose);\n\n class LatencyTransform extends Transform {\n private pendingTimer?: NodeJS.Timeout;\n constructor() {\n super();\n }\n\n _transform(chunk: Buffer, _enc: BufferEncoding, callback: TransformCallback) {\n // Backpressure is respected by delaying the callback until after push\n this.pendingTimer = setTimeout(() => {\n this.pendingTimer = undefined;\n this.push(chunk);\n callback();\n }, state.latency);\n }\n\n _destroy(err: Error | null, cb: (error?: Error | null) => void) {\n if (this.pendingTimer) clearTimeout(this.pendingTimer);\n this.pendingTimer = undefined;\n cb(err);\n }\n }\n\n const toClientLatency = new LatencyTransform();\n const toTargetLatency = new LatencyTransform();\n\n // Bidirectional pipelines with latency and error propagation\n pipeline(socket, toTargetLatency, client).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n\n pipeline(client, toClientLatency, socket).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n });\n\n server.listen({ port: port ?? 0 }, () => {\n console.log(\"Test TCP proxy server started on\", server.address());\n });\n\n // Wait for proxy to be ready\n await new Promise<void>((resolve, reject) => {\n if (server.listening) return resolve();\n const onError = (err: Error) => {\n server.off(\"listening\", onListening);\n reject(err);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n });\n\n return {\n server,\n get port() {\n return (server.address() as AddressInfo)?.port;\n },\n setLatency,\n getLatency,\n disconnectAll,\n close: async () => {\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n },\n };\n}\n\nexport type TestTcpProxy = Awaited<ReturnType<typeof startTcpProxy>>;\n"],"mappings":";;;;;;AAcA,eAAsB,cAAc,SAA0B;CAC5D,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,QAAQ,EACZ,SAAS,QAAQ,SAClB;CAED,MAAM,cAAc,YAAoB;AACtC,QAAM,UAAU;;CAGlB,MAAM,mBAAmB;AACvB,SAAO,MAAM;;CAGf,MAAM,8BAAc,IAAI,KAAiD;CAEzE,eAAe,cAAc,UAA8B,QAAW;EACpE,MAAM,aAAa;AACjB,QAAK,MAAM,EAAE,QAAQ,YAAY,aAAa;AAC5C,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;AACvC,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;;AAEzC,eAAY,OAAO;;AAErB,MAAI,YAAY,OAAW,OAAM,OAAO,WAAW,QAAQ;AAC3D,QAAM;;CAGR,MAAM,SAAS,IAAI,cAAc,WAAuB;EACtD,MAAM,SAAS,IAAI,iBAAiB,EAAE,MAAM,YAAY,QAAQ;AAC9D,OAAI,QAAQ,QAAS,SAAQ,IAAI,gBAAgB,aAAa;IAC9D;EAEF,MAAM,OAAO;GAAE;GAAQ;GAAQ;AAC/B,cAAY,IAAI,KAAK;EACrB,MAAM,gBAAgB,YAAY,OAAO,KAAK;AAC9C,SAAO,GAAG,SAAS,QAAQ;AAC3B,SAAO,GAAG,SAAS,QAAQ;EAE3B,MAAM,yBAAyB,UAAU;GACvC,AAAQ;GACR,cAAc;AACZ,WAAO;;GAGT,WAAW,OAAe,MAAsB,UAA6B;AAE3E,SAAK,eAAe,iBAAiB;AACnC,UAAK,eAAe;AACpB,UAAK,KAAK,MAAM;AAChB,eAAU;OACT,MAAM,QAAQ;;GAGnB,SAAS,KAAmB,IAAoC;AAC9D,QAAI,KAAK,aAAc,cAAa,KAAK,aAAa;AACtD,SAAK,eAAe;AACpB,OAAG,IAAI;;;EAIX,MAAM,kBAAkB,IAAI,kBAAkB;AAI9C,WAAS,QAHe,IAAI,kBAAkB,EAGZ,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;AAEF,WAAS,QAAQ,iBAAiB,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;GACF;AAEF,QAAO,OAAO,EAAE,MAAM,QAAQ,GAAG,QAAQ;AACvC,UAAQ,IAAI,oCAAoC,OAAO,SAAS,CAAC;GACjE;AAGF,OAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,MAAI,OAAO,UAAW,QAAO,SAAS;EACtC,MAAM,WAAW,QAAe;AAC9B,UAAO,IAAI,aAAa,YAAY;AACpC,UAAO,IAAI;;EAEb,MAAM,oBAAoB;AACxB,UAAO,IAAI,SAAS,QAAQ;AAC5B,YAAS;;AAEX,SAAO,KAAK,SAAS,QAAQ;AAC7B,SAAO,KAAK,aAAa,YAAY;GACrC;AAEF,QAAO;EACL;EACA,IAAI,OAAO;AACT,UAAQ,OAAO,SAAS,EAAkB;;EAE5C;EACA;EACA;EACA,OAAO,YAAY;AACjB,SAAM,IAAI,SAAe,YAAY;AACnC,WAAO,YAAY,SAAS,CAAC;KAC7B;;EAEL"}
1
+ {"version":3,"file":"tcp-proxy.js","names":[],"sources":["../../src/test/tcp-proxy.ts"],"sourcesContent":["import * as net from \"node:net\";\nimport type { AddressInfo } from \"node:net\";\nimport { Transform } from \"node:stream\";\nimport type { TransformCallback } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport * as timers from \"node:timers/promises\";\n\nexport type TcpProxyOptions = {\n port?: number;\n targetPort: number;\n latency: number;\n verbose?: boolean;\n};\n\nexport async function startTcpProxy(options: TcpProxyOptions) {\n const { port, targetPort } = options;\n\n const state = {\n latency: options.latency,\n };\n\n const setLatency = (latency: number) => {\n state.latency = latency;\n };\n\n const getLatency = () => {\n return state.latency;\n };\n\n const connections = new Set<{ socket: net.Socket; client: net.Socket }>();\n\n async function disconnectAll(delayMs: number | undefined = undefined) {\n const kill = () => {\n for (const { socket, client } of connections) {\n if (!socket.destroyed) socket.destroy();\n if (!client.destroyed) client.destroy();\n }\n connections.clear();\n };\n if (delayMs !== undefined) await timers.setTimeout(delayMs);\n kill();\n }\n\n const server = net.createServer((socket: net.Socket) => {\n const client = net.createConnection({ port: targetPort }, () => {\n if (options.verbose) console.log(`connected to ${targetPort}`);\n });\n\n const pair = { socket, client };\n connections.add(pair);\n const onClose = () => connections.delete(pair);\n socket.on(\"close\", onClose);\n client.on(\"close\", onClose);\n\n class LatencyTransform extends Transform {\n private pendingTimer?: NodeJS.Timeout;\n constructor() {\n super();\n }\n\n _transform(chunk: Buffer, _enc: BufferEncoding, callback: TransformCallback) {\n // Backpressure is respected by delaying the callback until after push\n this.pendingTimer = setTimeout(() => {\n this.pendingTimer = undefined;\n this.push(chunk);\n callback();\n }, state.latency);\n }\n\n _destroy(err: Error | null, cb: (error?: Error | null) => void) {\n if (this.pendingTimer) clearTimeout(this.pendingTimer);\n this.pendingTimer = undefined;\n cb(err);\n }\n }\n\n const toClientLatency = new LatencyTransform();\n const toTargetLatency = new LatencyTransform();\n\n // Bidirectional pipelines with latency and error propagation\n pipeline(socket, toTargetLatency, client).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n\n pipeline(client, toClientLatency, socket).catch((err) => {\n socket.destroy(err);\n client.destroy(err);\n });\n });\n\n server.listen({ port: port ?? 0 }, () => {\n console.log(\"Test TCP proxy server started on\", server.address());\n });\n\n // Wait for proxy to be ready\n await new Promise<void>((resolve, reject) => {\n if (server.listening) return resolve();\n const onError = (err: Error) => {\n server.off(\"listening\", onListening);\n reject(err);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n });\n\n return {\n server,\n get port() {\n return (server.address() as AddressInfo)?.port;\n },\n setLatency,\n getLatency,\n disconnectAll,\n close: async () => {\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n },\n };\n}\n\nexport type TestTcpProxy = Awaited<ReturnType<typeof startTcpProxy>>;\n"],"mappings":";;;;;AAcA,eAAsB,cAAc,SAA0B;CAC5D,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,QAAQ,EACZ,SAAS,QAAQ,SAClB;CAED,MAAM,cAAc,YAAoB;AACtC,QAAM,UAAU;;CAGlB,MAAM,mBAAmB;AACvB,SAAO,MAAM;;CAGf,MAAM,8BAAc,IAAI,KAAiD;CAEzE,eAAe,cAAc,UAA8B,KAAA,GAAW;EACpE,MAAM,aAAa;AACjB,QAAK,MAAM,EAAE,QAAQ,YAAY,aAAa;AAC5C,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;AACvC,QAAI,CAAC,OAAO,UAAW,QAAO,SAAS;;AAEzC,eAAY,OAAO;;AAErB,MAAI,YAAY,KAAA,EAAW,OAAM,OAAO,WAAW,QAAQ;AAC3D,QAAM;;CAGR,MAAM,SAAS,IAAI,cAAc,WAAuB;EACtD,MAAM,SAAS,IAAI,iBAAiB,EAAE,MAAM,YAAY,QAAQ;AAC9D,OAAI,QAAQ,QAAS,SAAQ,IAAI,gBAAgB,aAAa;IAC9D;EAEF,MAAM,OAAO;GAAE;GAAQ;GAAQ;AAC/B,cAAY,IAAI,KAAK;EACrB,MAAM,gBAAgB,YAAY,OAAO,KAAK;AAC9C,SAAO,GAAG,SAAS,QAAQ;AAC3B,SAAO,GAAG,SAAS,QAAQ;EAE3B,MAAM,yBAAyB,UAAU;GACvC;GACA,cAAc;AACZ,WAAO;;GAGT,WAAW,OAAe,MAAsB,UAA6B;AAE3E,SAAK,eAAe,iBAAiB;AACnC,UAAK,eAAe,KAAA;AACpB,UAAK,KAAK,MAAM;AAChB,eAAU;OACT,MAAM,QAAQ;;GAGnB,SAAS,KAAmB,IAAoC;AAC9D,QAAI,KAAK,aAAc,cAAa,KAAK,aAAa;AACtD,SAAK,eAAe,KAAA;AACpB,OAAG,IAAI;;;EAIX,MAAM,kBAAkB,IAAI,kBAAkB;AAI9C,WAAS,QAHe,IAAI,kBAAkB,EAGZ,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;AAEF,WAAS,QAAQ,iBAAiB,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAO,QAAQ,IAAI;AACnB,UAAO,QAAQ,IAAI;IACnB;GACF;AAEF,QAAO,OAAO,EAAE,MAAM,QAAQ,GAAG,QAAQ;AACvC,UAAQ,IAAI,oCAAoC,OAAO,SAAS,CAAC;GACjE;AAGF,OAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,MAAI,OAAO,UAAW,QAAO,SAAS;EACtC,MAAM,WAAW,QAAe;AAC9B,UAAO,IAAI,aAAa,YAAY;AACpC,UAAO,IAAI;;EAEb,MAAM,oBAAoB;AACxB,UAAO,IAAI,SAAS,QAAQ;AAC5B,YAAS;;AAEX,SAAO,KAAK,SAAS,QAAQ;AAC7B,SAAO,KAAK,aAAa,YAAY;GACrC;AAEF,QAAO;EACL;EACA,IAAI,OAAO;AACT,UAAQ,OAAO,SAAS,EAAkB;;EAE5C;EACA;EACA;EACA,OAAO,YAAY;AACjB,SAAM,IAAI,SAAe,YAAY;AACnC,WAAO,YAAY,SAAS,CAAC;KAC7B;;EAEL"}