@floegence/flowersec-core 3.2.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +57 -200
  2. package/THIRD_PARTY_NOTICES.md +11 -11
  3. package/dist/browser/index.d.ts +0 -5
  4. package/dist/browser/index.js +0 -3
  5. package/dist/cli.js +93 -64
  6. package/dist/facade.d.ts +0 -17
  7. package/dist/facade.js +0 -11
  8. package/dist/generated/unicode151.d.ts +2 -0
  9. package/dist/generated/unicode151.js +83 -0
  10. package/dist/interop/proxyServerPeer.js +34 -20
  11. package/dist/interop/serverParityPeer.js +11 -252
  12. package/dist/node/acceptor.d.ts +1 -57
  13. package/dist/node/acceptor.js +3 -420
  14. package/dist/node/acceptorV3.js +2 -2
  15. package/dist/node/connectSessionV3.js +2 -2
  16. package/dist/node/index.d.ts +2 -17
  17. package/dist/node/index.js +1 -9
  18. package/dist/node/nativeTransportAddon.d.ts +7 -36
  19. package/dist/node/nativeTransportAddon.js +7 -27
  20. package/dist/node/proxyServer.d.ts +2 -2
  21. package/dist/node/proxyServer.js +2 -2
  22. package/dist/node/rawQuicAdapterV3.d.ts +2 -2
  23. package/dist/node/rawQuicAdapterV3.js +1 -1
  24. package/dist/node/rawQuicServerV3.d.ts +2 -2
  25. package/dist/node/rawQuicServerV3.js +1 -1
  26. package/dist/node/rawQuicTls.d.ts +2 -0
  27. package/dist/node/{rawQuicAdapter.js → rawQuicTls.js} +30 -45
  28. package/dist/node/tunnelRuntimeV3.js +2 -2
  29. package/dist/proxy/integration.d.ts +5 -5
  30. package/dist/proxy/integration.js +2 -2
  31. package/dist/public/streamHandlers.d.ts +0 -3
  32. package/dist/public/streamHandlers.js +2 -4
  33. package/dist/public/streamMetadata.js +2 -2
  34. package/dist/runtime/errors.d.ts +2 -2
  35. package/dist/testSupport/tlsFixture.d.ts +2 -0
  36. package/dist/testSupport/tlsFixture.js +8 -0
  37. package/dist/utils/errors.d.ts +0 -2
  38. package/dist/utils/errors.js +0 -80
  39. package/dist/v3/artifact.js +17 -3
  40. package/dist/v3/carrier.d.ts +2 -2
  41. package/dist/v3/protocol.js +2 -103
  42. package/dist/v3/retryDisposition.d.ts +2 -2
  43. package/dist/v3/retryDisposition.js +0 -7
  44. package/dist/vendor/tr46.d.ts +4 -0
  45. package/dist/vendor/tr46.js +37 -32
  46. package/package.json +19 -17
  47. package/sbom/cyclonedx.json +62 -62
  48. package/sbom/spdx.json +65 -65
  49. package/dist/browser/connectSession.d.ts +0 -13
  50. package/dist/browser/connectSession.js +0 -40
  51. package/dist/browser/runtimeCapability.d.ts +0 -13
  52. package/dist/browser/runtimeCapability.js +0 -27
  53. package/dist/browser/sessionRuntime.d.ts +0 -2
  54. package/dist/browser/sessionRuntime.js +0 -21
  55. package/dist/browser/v2.d.ts +0 -3
  56. package/dist/browser/v2.js +0 -2
  57. package/dist/browser/webTransportClient.d.ts +0 -8
  58. package/dist/browser/webTransportClient.js +0 -55
  59. package/dist/connectionController.d.ts +0 -55
  60. package/dist/connectionController.js +0 -441
  61. package/dist/connector/adapters/rawQuicCandidate.d.ts +0 -5
  62. package/dist/connector/adapters/rawQuicCandidate.js +0 -71
  63. package/dist/connector/adapters/webSocketCandidate.d.ts +0 -7
  64. package/dist/connector/adapters/webSocketCandidate.js +0 -116
  65. package/dist/connector/adapters/webTransportCandidate.d.ts +0 -5
  66. package/dist/connector/adapters/webTransportCandidate.js +0 -73
  67. package/dist/connector/admissionCommit.d.ts +0 -31
  68. package/dist/connector/admissionCommit.js +0 -239
  69. package/dist/connector/sessionAcceptor.d.ts +0 -38
  70. package/dist/connector/sessionAcceptor.js +0 -158
  71. package/dist/connector/sessionConfig.d.ts +0 -3
  72. package/dist/connector/sessionConfig.js +0 -30
  73. package/dist/connector/sessionConnector.d.ts +0 -47
  74. package/dist/connector/sessionConnector.js +0 -606
  75. package/dist/node/connectSession.d.ts +0 -23
  76. package/dist/node/connectSession.js +0 -93
  77. package/dist/node/controlplane.d.ts +0 -137
  78. package/dist/node/controlplane.js +0 -443
  79. package/dist/node/rawQuicAdapter.d.ts +0 -9
  80. package/dist/node/rawQuicServer.d.ts +0 -24
  81. package/dist/node/rawQuicServer.js +0 -37
  82. package/dist/node/runtimeCapability.d.ts +0 -14
  83. package/dist/node/runtimeCapability.js +0 -24
  84. package/dist/node/sessionRuntime.d.ts +0 -2
  85. package/dist/node/sessionRuntime.js +0 -13
  86. package/dist/node/tunnelRuntime.d.ts +0 -42
  87. package/dist/node/tunnelRuntime.js +0 -559
  88. package/dist/node/v2.d.ts +0 -11
  89. package/dist/node/v2.js +0 -6
  90. package/dist/node/webSocketServer.d.ts +0 -24
  91. package/dist/node/webSocketServer.js +0 -135
  92. package/dist/public/artifact.d.ts +0 -11
  93. package/dist/public/artifact.js +0 -44
  94. package/dist/public/artifactLease.d.ts +0 -10
  95. package/dist/public/artifactLease.js +0 -41
  96. package/dist/public/connectError.d.ts +0 -6
  97. package/dist/public/connectError.js +0 -9
  98. package/dist/transport/webSocketAdapter.d.ts +0 -31
  99. package/dist/transport/webSocketAdapter.js +0 -370
  100. package/dist/transport/webTransportAdapter.d.ts +0 -27
  101. package/dist/transport/webTransportAdapter.js +0 -534
  102. package/dist/v2/admissionError.d.ts +0 -4
  103. package/dist/v2/admissionError.js +0 -8
  104. package/dist/v2/artifact.d.ts +0 -128
  105. package/dist/v2/artifact.js +0 -1131
  106. package/dist/v2/artifactLease.d.ts +0 -1
  107. package/dist/v2/artifactLease.js +0 -7
  108. package/dist/v2/capability.d.ts +0 -29
  109. package/dist/v2/capability.js +0 -190
  110. package/dist/v2/carrier.d.ts +0 -84
  111. package/dist/v2/carrier.js +0 -411
  112. package/dist/v2/contract.d.ts +0 -46
  113. package/dist/v2/contract.js +0 -1
  114. package/dist/v2/handshake.d.ts +0 -80
  115. package/dist/v2/handshake.js +0 -470
  116. package/dist/v2/index.d.ts +0 -14
  117. package/dist/v2/index.js +0 -7
  118. package/dist/v2/opaqueArtifact.d.ts +0 -1
  119. package/dist/v2/opaqueArtifact.js +0 -2
  120. package/dist/v2/protocol.d.ts +0 -99
  121. package/dist/v2/protocol.js +0 -737
  122. package/dist/v2/publicSession.d.ts +0 -1
  123. package/dist/v2/publicSession.js +0 -281
  124. package/dist/v2/retryDisposition.d.ts +0 -16
  125. package/dist/v2/retryDisposition.js +0 -30
  126. package/dist/v2/session.d.ts +0 -310
  127. package/dist/v2/session.js +0 -2127
  128. package/dist/v2/streamLifetimeLedger.d.ts +0 -31
  129. package/dist/v2/streamLifetimeLedger.js +0 -131
  130. package/dist/v2/streamMetadata.d.ts +0 -1
  131. package/dist/v2/streamMetadata.js +0 -7
  132. package/dist/v2/unreliableMessage.d.ts +0 -43
  133. package/dist/v2/unreliableMessage.js +0 -254
package/dist/facade.js CHANGED
@@ -1,19 +1,8 @@
1
- export * as v2 from "./v2/index.js";
2
1
  export { SessionError, UnreliableMessageError } from "./public/contract.js";
3
2
  export { createStreamMetadata, StreamMetadataError } from "./public/streamMetadata.js";
4
3
  export { HandlerRegistrationError, StreamHandlers, } from "./public/streamHandlers.js";
5
4
  export { ArtifactHandleV3 as Artifact, ArtifactParseErrorV3 as ArtifactError, createArtifactLeaseV3 as createArtifactLease, parseArtifactV3 as parseArtifact, } from "./v3/publicApi.js";
6
- /** @deprecated Use Artifact, ArtifactError, createArtifactLease, and parseArtifact. */
7
- export { ArtifactHandleV3, ArtifactParseErrorV3, createArtifactLeaseV3, parseArtifactV3, } from "./v3/publicApi.js";
8
5
  export { ArtifactLeaseV3 as ArtifactLease, ArtifactLeaseV3Error as ArtifactLeaseError, } from "./v3/artifactLease.js";
9
- /** @deprecated Use ArtifactLease and ArtifactLeaseError. */
10
- export { ArtifactLeaseV3, ArtifactLeaseV3Error } from "./v3/artifactLease.js";
11
6
  export { connectionDiagnosticV3 as connectionDiagnostic } from "./v3/connectionController.js";
12
- /** @deprecated Use connectionDiagnostic. */
13
- export { connectionDiagnosticV3 } from "./v3/connectionController.js";
14
7
  export { ConnectionControllerV3Error as ConnectionControllerError, } from "./v3/connectionController.js";
15
- /** @deprecated Use ConnectionControllerError. */
16
- export { ConnectionControllerV3Error } from "./v3/connectionController.js";
17
8
  export { ConnectErrorV3 as ConnectError } from "./v3/security.js";
18
- /** @deprecated Use ConnectError. */
19
- export { ConnectErrorV3 } from "./v3/security.js";
@@ -0,0 +1,2 @@
1
+ export declare const UNICODE_15_1_VERSION = "15.1.0";
2
+ export declare function unicode151Assigned(codePoint: number): boolean;
@@ -0,0 +1,83 @@
1
+ // Code generated by testdata/unicode15_1/generate_tables.mjs; DO NOT EDIT.
2
+ export const UNICODE_15_1_VERSION = "15.1.0";
3
+ const ASSIGNED_RANGES_HEX = "00000000037700037A00037F00038400038A00038C00038C00038E0003A10003A300052F00053100055600055900058A00058D00058F0005910005C7" +
4
+ "0005D00005EA0005EF0005F400060000070D00070F00074A00074D0007B10007C00007FA0007FD00082D00083000083E00084000085B00085E00085E" +
5
+ "00086000086A00087000088E00089000089100089800098300098500098C00098F0009900009930009A80009AA0009B00009B20009B20009B60009B9" +
6
+ "0009BC0009C40009C70009C80009CB0009CE0009D70009D70009DC0009DD0009DF0009E30009E60009FE000A01000A03000A05000A0A000A0F000A10" +
7
+ "000A13000A28000A2A000A30000A32000A33000A35000A36000A38000A39000A3C000A3C000A3E000A42000A47000A48000A4B000A4D000A51000A51" +
8
+ "000A59000A5C000A5E000A5E000A66000A76000A81000A83000A85000A8D000A8F000A91000A93000AA8000AAA000AB0000AB2000AB3000AB5000AB9" +
9
+ "000ABC000AC5000AC7000AC9000ACB000ACD000AD0000AD0000AE0000AE3000AE6000AF1000AF9000AFF000B01000B03000B05000B0C000B0F000B10" +
10
+ "000B13000B28000B2A000B30000B32000B33000B35000B39000B3C000B44000B47000B48000B4B000B4D000B55000B57000B5C000B5D000B5F000B63" +
11
+ "000B66000B77000B82000B83000B85000B8A000B8E000B90000B92000B95000B99000B9A000B9C000B9C000B9E000B9F000BA3000BA4000BA8000BAA" +
12
+ "000BAE000BB9000BBE000BC2000BC6000BC8000BCA000BCD000BD0000BD0000BD7000BD7000BE6000BFA000C00000C0C000C0E000C10000C12000C28" +
13
+ "000C2A000C39000C3C000C44000C46000C48000C4A000C4D000C55000C56000C58000C5A000C5D000C5D000C60000C63000C66000C6F000C77000C8C" +
14
+ "000C8E000C90000C92000CA8000CAA000CB3000CB5000CB9000CBC000CC4000CC6000CC8000CCA000CCD000CD5000CD6000CDD000CDE000CE0000CE3" +
15
+ "000CE6000CEF000CF1000CF3000D00000D0C000D0E000D10000D12000D44000D46000D48000D4A000D4F000D54000D63000D66000D7F000D81000D83" +
16
+ "000D85000D96000D9A000DB1000DB3000DBB000DBD000DBD000DC0000DC6000DCA000DCA000DCF000DD4000DD6000DD6000DD8000DDF000DE6000DEF" +
17
+ "000DF2000DF4000E01000E3A000E3F000E5B000E81000E82000E84000E84000E86000E8A000E8C000EA3000EA5000EA5000EA7000EBD000EC0000EC4" +
18
+ "000EC6000EC6000EC8000ECE000ED0000ED9000EDC000EDF000F00000F47000F49000F6C000F71000F97000F99000FBC000FBE000FCC000FCE000FDA" +
19
+ "0010000010C50010C70010C70010CD0010CD0010D000124800124A00124D00125000125600125800125800125A00125D00126000128800128A00128D" +
20
+ "0012900012B00012B20012B50012B80012BE0012C00012C00012C20012C50012C80012D60012D800131000131200131500131800135A00135D00137C" +
21
+ "0013800013990013A00013F50013F80013FD00140000169C0016A00016F800170000171500171F00173600174000175300176000176C00176E001770" +
22
+ "0017720017730017800017DD0017E00017E90017F00017F90018000018190018200018780018800018AA0018B00018F500190000191E00192000192B" +
23
+ "00193000193B00194000194000194400196D0019700019740019800019AB0019B00019C90019D00019DA0019DE001A1B001A1E001A5E001A60001A7C" +
24
+ "001A7F001A89001A90001A99001AA0001AAD001AB0001ACE001B00001B4C001B50001B7E001B80001BF3001BFC001C37001C3B001C49001C4D001C88" +
25
+ "001C90001CBA001CBD001CC7001CD0001CFA001D00001F15001F18001F1D001F20001F45001F48001F4D001F50001F57001F59001F59001F5B001F5B" +
26
+ "001F5D001F5D001F5F001F7D001F80001FB4001FB6001FC4001FC6001FD3001FD6001FDB001FDD001FEF001FF2001FF4001FF6001FFE002000002064" +
27
+ "00206600207100207400208E00209000209C0020A00020C00020D00020F000210000218B00219000242600244000244A002460002B73002B76002B95" +
28
+ "002B97002CF3002CF9002D25002D27002D27002D2D002D2D002D30002D67002D6F002D70002D7F002D96002DA0002DA6002DA8002DAE002DB0002DB6" +
29
+ "002DB8002DBE002DC0002DC6002DC8002DCE002DD0002DD6002DD8002DDE002DE0002E5D002E80002E99002E9B002EF3002F00002FD5002FF000303F" +
30
+ "0030410030960030990030FF00310500312F00313100318E0031900031E30031EF00321E00322000A48C00A49000A4C600A4D000A62B00A64000A6F7" +
31
+ "00A70000A7CA00A7D000A7D100A7D300A7D300A7D500A7D900A7F200A82C00A83000A83900A84000A87700A88000A8C500A8CE00A8D900A8E000A953" +
32
+ "00A95F00A97C00A98000A9CD00A9CF00A9D900A9DE00A9FE00AA0000AA3600AA4000AA4D00AA5000AA5900AA5C00AAC200AADB00AAF600AB0100AB06" +
33
+ "00AB0900AB0E00AB1100AB1600AB2000AB2600AB2800AB2E00AB3000AB6B00AB7000ABED00ABF000ABF900AC0000D7A300D7B000D7C600D7CB00D7FB" +
34
+ "00D80000FA6D00FA7000FAD900FB0000FB0600FB1300FB1700FB1D00FB3600FB3800FB3C00FB3E00FB3E00FB4000FB4100FB4300FB4400FB4600FBC2" +
35
+ "00FBD300FD8F00FD9200FDC700FDCF00FE1900FE2000FE5200FE5400FE6600FE6800FE6B00FE7000FE7400FE7600FEFC00FEFF00FEFF00FF0100FFBE" +
36
+ "00FFC200FFC700FFCA00FFCF00FFD200FFD700FFDA00FFDC00FFE000FFE600FFE800FFEE00FFF901000B01000D01002601002801003A01003C01003D" +
37
+ "01003F01004D01005001005D0100800100FA01010001010201010701013301013701018E01019001019C0101A00101A00101D00101FD01028001029C" +
38
+ "0102A00102D00102E00102FB01030001032301032D01034A01035001037A01038001039D01039F0103C30103C80103D501040001049D0104A00104A9" +
39
+ "0104B00104D30104D80104FB01050001052701053001056301056F01057A01057C01058A01058C0105920105940105950105970105A10105A30105B1" +
40
+ "0105B30105B90105BB0105BC0106000107360107400107550107600107670107800107850107870107B00107B20107BA010800010805010808010808" +
41
+ "01080A01083501083701083801083C01083C01083F01085501085701089E0108A70108AF0108E00108F20108F40108F50108FB01091B01091F010939" +
42
+ "01093F01093F0109800109B70109BC0109CF0109D2010A03010A05010A06010A0C010A13010A15010A17010A19010A35010A38010A3A010A3F010A48" +
43
+ "010A50010A58010A60010A9F010AC0010AE6010AEB010AF6010B00010B35010B39010B55010B58010B72010B78010B91010B99010B9C010BA9010BAF" +
44
+ "010C00010C48010C80010CB2010CC0010CF2010CFA010D27010D30010D39010E60010E7E010E80010EA9010EAB010EAD010EB0010EB1010EFD010F27" +
45
+ "010F30010F59010F70010F89010FB0010FCB010FE0010FF601100001104D01105201107501107F0110C20110CD0110CD0110D00110E80110F00110F9" +
46
+ "0111000111340111360111470111500111760111800111DF0111E10111F401120001121101121301124101128001128601128801128801128A01128D" +
47
+ "01128F01129D01129F0112A90112B00112EA0112F00112F901130001130301130501130C01130F01131001131301132801132A011330011332011333" +
48
+ "01133501133901133B01134401134701134801134B01134D01135001135001135701135701135D01136301136601136C01137001137401140001145B" +
49
+ "01145D0114610114800114C70114D00114D90115800115B50115B80115DD01160001164401165001165901166001166C0116800116B90116C00116C9" +
50
+ "01170001171A01171D01172B01173001174601180001183B0118A00118F20118FF01190601190901190901190C011913011915011916011918011935" +
51
+ "01193701193801193B0119460119500119590119A00119A70119AA0119D70119DA0119E4011A00011A47011A50011AA2011AB0011AF8011B00011B09" +
52
+ "011C00011C08011C0A011C36011C38011C45011C50011C6C011C70011C8F011C92011CA7011CA9011CB6011D00011D06011D08011D09011D0B011D36" +
53
+ "011D3A011D3A011D3C011D3D011D3F011D47011D50011D59011D60011D65011D67011D68011D6A011D8E011D90011D91011D93011D98011DA0011DA9" +
54
+ "011EE0011EF8011F00011F10011F12011F3A011F3E011F59011FB0011FB0011FC0011FF1011FFF01239901240001246E012470012474012480012543" +
55
+ "012F90012FF2013000013455014400014646016800016A38016A40016A5E016A60016A69016A6E016ABE016AC0016AC9016AD0016AED016AF0016AF5" +
56
+ "016B00016B45016B50016B59016B5B016B61016B63016B77016B7D016B8F016E40016E9A016F00016F4A016F4F016F87016F8F016F9F016FE0016FE4" +
57
+ "016FF0016FF10170000187F7018800018CD5018D00018D0801AFF001AFF301AFF501AFFB01AFFD01AFFE01B00001B12201B13201B13201B15001B152" +
58
+ "01B15501B15501B16401B16701B17001B2FB01BC0001BC6A01BC7001BC7C01BC8001BC8801BC9001BC9901BC9C01BCA301CF0001CF2D01CF3001CF46" +
59
+ "01CF5001CFC301D00001D0F501D10001D12601D12901D1EA01D20001D24501D2C001D2D301D2E001D2F301D30001D35601D36001D37801D40001D454" +
60
+ "01D45601D49C01D49E01D49F01D4A201D4A201D4A501D4A601D4A901D4AC01D4AE01D4B901D4BB01D4BB01D4BD01D4C301D4C501D50501D50701D50A" +
61
+ "01D50D01D51401D51601D51C01D51E01D53901D53B01D53E01D54001D54401D54601D54601D54A01D55001D55201D6A501D6A801D7CB01D7CE01DA8B" +
62
+ "01DA9B01DA9F01DAA101DAAF01DF0001DF1E01DF2501DF2A01E00001E00601E00801E01801E01B01E02101E02301E02401E02601E02A01E03001E06D" +
63
+ "01E08F01E08F01E10001E12C01E13001E13D01E14001E14901E14E01E14F01E29001E2AE01E2C001E2F901E2FF01E2FF01E4D001E4F901E7E001E7E6" +
64
+ "01E7E801E7EB01E7ED01E7EE01E7F001E7FE01E80001E8C401E8C701E8D601E90001E94B01E95001E95901E95E01E95F01EC7101ECB401ED0101ED3D" +
65
+ "01EE0001EE0301EE0501EE1F01EE2101EE2201EE2401EE2401EE2701EE2701EE2901EE3201EE3401EE3701EE3901EE3901EE3B01EE3B01EE4201EE42" +
66
+ "01EE4701EE4701EE4901EE4901EE4B01EE4B01EE4D01EE4F01EE5101EE5201EE5401EE5401EE5701EE5701EE5901EE5901EE5B01EE5B01EE5D01EE5D" +
67
+ "01EE5F01EE5F01EE6101EE6201EE6401EE6401EE6701EE6A01EE6C01EE7201EE7401EE7701EE7901EE7C01EE7E01EE7E01EE8001EE8901EE8B01EE9B" +
68
+ "01EEA101EEA301EEA501EEA901EEAB01EEBB01EEF001EEF101F00001F02B01F03001F09301F0A001F0AE01F0B101F0BF01F0C101F0CF01F0D101F0F5" +
69
+ "01F10001F1AD01F1E601F20201F21001F23B01F24001F24801F25001F25101F26001F26501F30001F6D701F6DC01F6EC01F6F001F6FC01F70001F776" +
70
+ "01F77B01F7D901F7E001F7EB01F7F001F7F001F80001F80B01F81001F84701F85001F85901F86001F88701F89001F8AD01F8B001F8B101F90001FA53" +
71
+ "01FA6001FA6D01FA7001FA7C01FA8001FA8801FA9001FABD01FABF01FAC501FACE01FADB01FAE001FAE801FAF001FAF801FB0001FB9201FB9401FBCA" +
72
+ "01FBF001FBF901FFFE02A6DF02A70002B73902B74002B81D02B82002CEA102CEB002EBE002EBF002EE5D02F80002FA1D02FFFE03134A0313500323AF" +
73
+ "03FFFE03FFFF04FFFE04FFFF05FFFE05FFFF06FFFE06FFFF07FFFE07FFFF08FFFE08FFFF09FFFE09FFFF0AFFFE0AFFFF0BFFFE0BFFFF0CFFFE0CFFFF" +
74
+ "0DFFFE0DFFFF0E00010E00010E00200E007F0E01000E01EF0EFFFE10FFFF";
75
+ export function unicode151Assigned(codePoint) {
76
+ for (let offset = 0; offset < ASSIGNED_RANGES_HEX.length; offset += 12) {
77
+ const start = Number.parseInt(ASSIGNED_RANGES_HEX.slice(offset, offset + 6), 16);
78
+ const end = Number.parseInt(ASSIGNED_RANGES_HEX.slice(offset + 6, offset + 12), 16);
79
+ if (codePoint >= start && codePoint <= end)
80
+ return true;
81
+ }
82
+ return false;
83
+ }
@@ -1,10 +1,13 @@
1
- import { authorizeRuntime, createAcceptor, createEndpointSet, Issuer, parseArtifact, ProxyServer, SessionHandlers, } from "../node/v2.js";
1
+ import { spawn } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ import { createAcceptor, parseArtifact, ProxyServer, SessionHandlers, } from "../node/index.js";
4
+ import { testCertificatePEM, testPrivateKeyPEM } from "../testSupport/tlsFixture.js";
2
5
  const ORIGIN = "https://app.example";
3
6
  const args = process.argv.slice(2);
4
7
  if (args.length !== 2 || args[0] !== "--upstream" || args[1] === undefined) {
5
8
  throw new Error("usage: proxyServerPeer --upstream http://127.0.0.1:<port>");
6
9
  }
7
- void run(args[1]).catch((error) => {
10
+ await run(args[1]).catch((error) => {
8
11
  console.error(error instanceof Error ? error.stack ?? error.message : String(error));
9
12
  process.exitCode = 1;
10
13
  });
@@ -34,7 +37,7 @@ async function run(upstream) {
34
37
  });
35
38
  const handlers = new SessionHandlers({ maxConcurrentStreams: 4 });
36
39
  proxy.register(handlers);
37
- let record;
40
+ let trustedArtifact;
38
41
  const acceptor = await createAcceptor({
39
42
  listeners: [{
40
43
  carrier: "websocket",
@@ -42,34 +45,26 @@ async function run(upstream) {
42
45
  host: "127.0.0.1",
43
46
  port: 0,
44
47
  allowedOrigins: [ORIGIN],
48
+ tls: { certificate: testCertificatePEM, privateKey: testPrivateKeyPEM },
45
49
  }],
46
- maxInboundStreams: 8,
47
- authorize: async (request) => {
48
- if (record === undefined)
49
- throw new Error("authorization record is unavailable");
50
- const artifact = parseArtifact(record.artifactJSON);
51
- authorizeRuntime(request, record, "proxy-matrix-node");
52
- return { decision: "allow", artifact };
53
- },
50
+ maxInboundStreams: 16,
51
+ authorize: async () => trustedArtifact === undefined
52
+ ? { accepted: false, retryable: false, reason: "invalid_credential" }
53
+ : { accepted: true, artifact: trustedArtifact },
54
54
  resolveHandlers: () => handlers,
55
55
  });
56
56
  try {
57
57
  const address = acceptor.addresses()[0];
58
58
  if (address === undefined)
59
59
  throw new Error("Node ProxyServer listener did not bind");
60
- const issued = new Issuer().issueDirect({
61
- session: { channelId: "browser-proxy-node", maxInboundStreams: 8 },
62
- endpoints: createEndpointSet(`ws://127.0.0.1:${address.port}/flowersec/v2/direct`),
63
- rendezvousGroupId: "browser-proxy-node",
64
- listenerAudience: "browser-proxy-matrix",
65
- upstreamAddress: `${address.host}:${address.port}`,
66
- });
67
- record = issued.authorizationRecord();
60
+ const artifactJSON = await issueArtifact(`wss://localhost:${address.port}/flowersec/v3/direct`);
61
+ trustedArtifact = parseArtifact(artifactJSON);
68
62
  const acceptedPromise = acceptor.accept();
69
63
  process.stdout.write(`${JSON.stringify({
70
64
  runtime: "node-typescript",
71
- artifact_json: new TextDecoder().decode(issued.artifactJSON()),
65
+ artifact_json: artifactJSON,
72
66
  origin: ORIGIN,
67
+ trust_pem: testCertificatePEM,
73
68
  })}\n`);
74
69
  const accepted = await acceptedPromise;
75
70
  const serving = accepted.serve().catch((error) => error);
@@ -81,3 +76,22 @@ async function run(upstream) {
81
76
  await acceptor.close();
82
77
  }
83
78
  }
79
+ async function issueArtifact(endpoint) {
80
+ const child = spawn("go", ["run", "./internal/cmd/parity-artifact-issuer"], {
81
+ cwd: fileURLToPath(new URL("../../../flowersec-go", import.meta.url)),
82
+ env: { ...process.env, FLOWERSEC_SERVER_PARITY_PEER: "1" },
83
+ stdio: ["pipe", "pipe", "pipe"],
84
+ });
85
+ child.stdin.end(`${JSON.stringify({ mode: "direct", endpoint })}\n`);
86
+ const stdout = [];
87
+ const stderr = [];
88
+ child.stdout.on("data", (chunk) => stdout.push(chunk));
89
+ child.stderr.on("data", (chunk) => stderr.push(chunk));
90
+ const code = await new Promise((resolve) => child.once("exit", resolve));
91
+ if (code !== 0)
92
+ throw new Error(`proxy artifact issuer failed: ${Buffer.concat(stderr).toString("utf8")}`);
93
+ const response = JSON.parse(Buffer.concat(stdout).toString("utf8"));
94
+ if (response.artifact_json === undefined)
95
+ throw new Error("proxy artifact issuer omitted artifact");
96
+ return response.artifact_json;
97
+ }
@@ -3,21 +3,14 @@ import { createPrivateKey, createPublicKey, X509Certificate } from "node:crypto"
3
3
  import { spawn } from "node:child_process";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { createStreamMetadata, } from "../public/streamMetadata.js";
6
- import { createAcceptor, RPCHandlers, SessionHandlers } from "../node/acceptor.js";
7
- import { createTunnelRuntime } from "../node/tunnelRuntime.js";
8
- import { createArtifactLease } from "../public/artifactLease.js";
9
- import { parseArtifact } from "../public/artifact.js";
10
- import { connect } from "../node/connectSession.js";
11
- import { Issuer, createEndpointSet } from "../node/controlplane.js";
6
+ import { RPCHandlers, SessionHandlersV3 } from "../node/acceptor.js";
12
7
  import { SessionError } from "../public/contract.js";
13
8
  import { createAcceptorV3 } from "../node/acceptorV3.js";
14
9
  import { createTunnelRuntimeV3 } from "../node/tunnelRuntimeV3.js";
15
10
  import { verifyTunnelAuthorizationGrantV3 } from "../node/runtimeAuthorizationV3.js";
16
11
  import { connectV3 } from "../node/connectSessionV3.js";
17
12
  import { createArtifactLeaseV3, parseArtifactV3 } from "../v3/publicApi.js";
18
- import { SessionHandlersV3 } from "../node/acceptor.js";
19
13
  const RUNTIME = "node-typescript";
20
- const PROTOCOL = process.env.FLOWERSEC_PARITY_PROTOCOL ?? "v2";
21
14
  const ORIGIN = process.env.FLOWERSEC_PARITY_ORIGIN ?? "https://client.example";
22
15
  const ECHO_RPC = 7001;
23
16
  const NOTIFY_RPC = 7002;
@@ -73,9 +66,7 @@ class ExecutedCases {
73
66
  }
74
67
  function createHandlers(path) {
75
68
  const rpcHandlers = new RPCHandlers();
76
- const sessionHandlers = PROTOCOL === "v3"
77
- ? new SessionHandlersV3({ maxConcurrentStreams: 16 })
78
- : new SessionHandlers({ maxConcurrentStreams: 16 });
69
+ const sessionHandlers = new SessionHandlersV3({ maxConcurrentStreams: 16 });
79
70
  const notifications = new SignalQueue();
80
71
  const activeStreams = { value: 0 };
81
72
  const executed = new ExecutedCases();
@@ -339,16 +330,9 @@ function pem(label, encoded) {
339
330
  return `-----BEGIN ${label}-----\n${lines.join("\n")}\n-----END ${label}-----\n`;
340
331
  }
341
332
  async function connectArtifact(artifactJSON, relay, rpcHandlers) {
342
- return await connect(createArtifactLease(parseArtifact(artifactJSON), async () => undefined), {
343
- origin: relay.origin,
344
- tls: { ca: relay.trust_pem },
345
- rpcHandlers,
346
- });
347
- }
348
- async function connectArtifactV3(artifactJSON, relay, rpcHandlers) {
349
333
  return await connectV3(createArtifactLeaseV3(parseArtifactV3(artifactJSON), async () => undefined), { origin: relay.origin, roots: relay.trust_pem, rpcHandlers });
350
334
  }
351
- async function issueV3(input) {
335
+ async function issue(input) {
352
336
  const goRoot = fileURLToPath(new URL("../../../flowersec-go", import.meta.url));
353
337
  const child = spawn("go", ["run", "./internal/cmd/parity-artifact-issuer"], {
354
338
  cwd: goRoot,
@@ -366,69 +350,10 @@ async function issueV3(input) {
366
350
  return JSON.parse(Buffer.concat(stdout).toString("utf8"));
367
351
  }
368
352
  async function runServer(tls, carrier) {
369
- if (PROTOCOL === "v3")
370
- return await runServerV3(tls, carrier);
371
- const issuedByLookup = new Map();
372
- const state = createHandlers("direct");
373
- const acceptor = await createAcceptor({
374
- listeners: [directListenerOptions(carrier, tls)],
375
- maxInboundStreams: 16,
376
- authorize: async (request) => {
377
- const artifact = issuedByLookup.get(request.lookupKey());
378
- return artifact === undefined
379
- ? { decision: "reject", reason: "invalid_credential" }
380
- : { decision: "allow", artifact };
381
- },
382
- resolveHandlers: () => state.sessionHandlers,
383
- });
384
- try {
385
- const address = acceptor.addresses()[0];
386
- if (address === undefined)
387
- throw new Error(`direct ${carrier} listener did not bind`);
388
- const issued = new Issuer().issueDirect({
389
- session: { channelId: "node-direct-parity", maxInboundStreams: 16 },
390
- endpoints: createEndpointSet(endpointURL(carrier, "direct", address.port)),
391
- rendezvousGroupId: "node-direct-parity",
392
- listenerAudience: "server-parity",
393
- upstreamAddress: "127.0.0.1:1",
394
- });
395
- const artifactJSON = decoder.decode(issued.artifactJSON());
396
- issuedByLookup.set(issued.lookupKey(), parseArtifact(artifactJSON));
397
- const accepting = acceptor.accept();
398
- writeJSON({
399
- type: "ready",
400
- runtime: RUNTIME,
401
- carrier,
402
- path: "direct",
403
- artifact_json: artifactJSON,
404
- trust_pem: tls.tls.root_certificate_pem,
405
- origin: ORIGIN,
406
- });
407
- const accepted = await accepting;
408
- state.executed.record("admission");
409
- const serving = accepted.serve().catch((error) => error);
410
- if (process.env.FLOWERSEC_PARITY_CLIENT_PROFILE !== undefined) {
411
- await externalServer(accepted.session, state);
412
- }
413
- else {
414
- await exerciseServer(accepted.session, state, "direct", true, carrier);
415
- }
416
- await serving;
417
- await accepted.close().catch(() => undefined);
418
- if (state.activeStreams.value !== 0)
419
- throw new Error(`direct server cleanup left ${state.activeStreams.value} streams`);
420
- state.executed.record("cleanup");
421
- writeJSON(result("server-result", "direct", state.executed.snapshot(), carrier));
422
- }
423
- finally {
424
- await acceptor.close();
425
- }
426
- }
427
- async function runServerV3(tls, carrier) {
428
353
  const state = createHandlers("direct");
429
354
  let trustedArtifact;
430
355
  const acceptor = await createAcceptorV3({
431
- listeners: [directListenerOptionsV3(carrier, tls)],
356
+ listeners: [directListenerOptions(carrier, tls)],
432
357
  maxInboundStreams: 16,
433
358
  authorize: async () => trustedArtifact === undefined
434
359
  ? { accepted: false, retryable: false, reason: "invalid_credential" }
@@ -439,7 +364,7 @@ async function runServerV3(tls, carrier) {
439
364
  const address = acceptor.addresses()[0];
440
365
  if (address === undefined)
441
366
  throw new Error(`direct ${carrier} listener did not bind`);
442
- const issued = await issueV3({ mode: "direct", endpoint: endpointURLV3(carrier, "direct", address.port) });
367
+ const issued = await issue({ mode: "direct", endpoint: endpointURL(carrier, "direct", address.port) });
443
368
  if (issued.artifact_json === undefined)
444
369
  throw new Error("v3 parity issuer omitted direct artifact");
445
370
  trustedArtifact = parseArtifactV3(issued.artifact_json);
@@ -476,9 +401,7 @@ async function runClient(input, carrier) {
476
401
  ready.artifact_json === "")
477
402
  throw new Error("invalid direct ready message");
478
403
  const state = createHandlers("direct");
479
- const session = PROTOCOL === "v3"
480
- ? await connectArtifactV3(ready.artifact_json, ready, state.rpcHandlers)
481
- : await connectArtifact(ready.artifact_json, ready, state.rpcHandlers);
404
+ const session = await connectArtifact(ready.artifact_json, ready, state.rpcHandlers);
482
405
  state.executed.record("admission");
483
406
  await exerciseClient(session, state, "direct", carrier);
484
407
  await session.close().catch((error) => {
@@ -492,94 +415,12 @@ async function runClient(input, carrier) {
492
415
  writeJSON(result("client-result", "direct", state.executed.snapshot(), carrier));
493
416
  }
494
417
  async function runRelay(tls, input, carrier) {
495
- if (PROTOCOL === "v3")
496
- return await runRelayV3(tls, input, carrier);
497
- const decisions = new Map();
498
- const released = new Set();
499
- const executed = new ExecutedCases();
500
- const runtime = createTunnelRuntime({
501
- listeners: [tunnelListenerOptions(carrier, tls)],
502
- maxInboundStreams: 16,
503
- maxPendingLegs: 16,
504
- maxActivePairs: 8,
505
- authorize: async (request) => decisions.get(request.lookupKey()) ?? {
506
- decision: "reject",
507
- reason: "invalid_credential",
508
- },
509
- release: (leaseId) => {
510
- released.add(leaseId);
511
- },
512
- });
513
- try {
514
- await runtime.start();
515
- const address = runtime.addresses()[0];
516
- if (address === undefined)
517
- throw new Error(`tunnel ${carrier} listener did not bind`);
518
- writeJSON({
519
- type: "relay-ready",
520
- runtime: RUNTIME,
521
- carrier,
522
- path: "tunnel",
523
- endpoint_url: endpointURL(carrier, "tunnel", address.port),
524
- trust_pem: tls.tls.root_certificate_pem,
525
- trust_roots_der: [tls.tls.root_certificate_der_base64],
526
- server_certificate_der: tls.tls.leaf_certificate_der_base64,
527
- origin: ORIGIN,
528
- });
529
- const configure = await input.next();
530
- if (configure.type !== "configure" ||
531
- !Array.isArray(configure.authorizations) ||
532
- configure.authorizations.length === 0)
533
- throw new Error("invalid tunnel relay configuration");
534
- for (const item of configure.authorizations) {
535
- if (item.decision !== "allow" ||
536
- item.credentialId === "" ||
537
- item.leaseId === "" ||
538
- item.expectedPeerEndpointInstanceId === "" ||
539
- item.expiresAtUnixSeconds <= Math.floor(Date.now() / 1000)) {
540
- throw new Error("invalid secret-free tunnel authorization");
541
- }
542
- decisions.set(item.credentialId, {
543
- decision: "allow",
544
- credentialId: item.credentialId,
545
- leaseId: item.leaseId,
546
- expiresAtUnixSeconds: item.expiresAtUnixSeconds,
547
- expectedPeerEndpointInstanceId: item.expectedPeerEndpointInstanceId,
548
- allowReplacement: item.allowReplacement,
549
- });
550
- }
551
- const close = await input.next();
552
- if (close.type !== "close")
553
- throw new Error("invalid tunnel relay close command");
554
- executed.record("close");
555
- }
556
- finally {
557
- await runtime.close();
558
- executed.record("cancel");
559
- }
560
- if (released.size !== decisions.size)
561
- throw new Error(`relay cleanup released ${released.size} of ${decisions.size} leases`);
562
- executed.record("admission", "pairing", "opaque-forwarding");
563
- if (carrier === "raw-quic")
564
- executed.record("datagram-forwarding");
565
- executed.record("cleanup");
566
- writeJSON({
567
- type: "relay-result",
568
- runtime: RUNTIME,
569
- carrier,
570
- path: "tunnel",
571
- cases: executed.snapshot(),
572
- observed_plaintext: false,
573
- released_leases: released.size,
574
- });
575
- }
576
- async function runRelayV3(tls, input, carrier) {
577
418
  const authorizations = new Map();
578
419
  const verificationRecords = new Map();
579
420
  const released = new Set();
580
421
  const executed = new ExecutedCases();
581
422
  const runtime = createTunnelRuntimeV3({
582
- listeners: [tunnelListenerOptionsV3(carrier, tls)],
423
+ listeners: [tunnelListenerOptions(carrier, tls)],
583
424
  maxInboundStreams: 16,
584
425
  maxPendingLegs: 16,
585
426
  maxActivePairs: 8,
@@ -605,7 +446,7 @@ async function runRelayV3(tls, input, carrier) {
605
446
  throw new Error(`tunnel ${carrier} listener did not bind`);
606
447
  writeJSON({
607
448
  type: "relay-ready", runtime: RUNTIME, carrier, path: "tunnel",
608
- endpoint_url: endpointURLV3(carrier, "tunnel", address.port),
449
+ endpoint_url: endpointURL(carrier, "tunnel", address.port),
609
450
  trust_pem: tls.tls.root_certificate_pem,
610
451
  trust_roots_der: [tls.tls.root_certificate_der_base64],
611
452
  server_certificate_der: tls.tls.leaf_certificate_der_base64,
@@ -642,59 +483,10 @@ async function runRelayV3(tls, input, carrier) {
642
483
  });
643
484
  }
644
485
  async function runTunnelEndpointB(input, carrier) {
645
- if (PROTOCOL === "v3")
646
- return await runTunnelEndpointBV3(input, carrier);
647
486
  const envelope = await input.next();
648
487
  const { topology, relay } = envelope;
649
488
  validateTunnelDimensions(topology, relay, "endpoint_b", carrier);
650
- const pair = new Issuer().issueTunnelPair({
651
- session: { channelId: `parity-${topology.id}`, maxInboundStreams: 16 },
652
- endpoints: createEndpointSet(relay.endpoint_url),
653
- rendezvousGroupId: topology.id,
654
- listenerAudience: "server-parity",
655
- firstEndpointId: `${topology.id}-a`,
656
- secondEndpointId: `${topology.id}-b`,
657
- });
658
- const firstJSON = decoder.decode(pair.first.artifactJSON());
659
- const secondJSON = decoder.decode(pair.second.artifactJSON());
660
- const ready = {
661
- type: "endpoint-b-ready",
662
- runtime: RUNTIME,
663
- carrier,
664
- path: "tunnel",
665
- endpoint_a_artifact_json: firstJSON,
666
- endpoint_b_artifact_json: secondJSON,
667
- relay,
668
- authorizations: [
669
- authorizationWire(pair.first, firstJSON, "lease-endpoint-a"),
670
- authorizationWire(pair.second, secondJSON, "lease-endpoint-b"),
671
- ],
672
- };
673
- writeJSON(ready);
674
- const command = await input.next();
675
- if (command.type !== "connect")
676
- throw new Error("endpoint B did not receive connect command");
677
- const state = createHandlers("tunnel");
678
- const session = await connectArtifact(secondJSON, relay, state.rpcHandlers);
679
- state.executed.record("admission");
680
- if (process.env.FLOWERSEC_PARITY_CLIENT_PROFILE !== undefined) {
681
- await externalServer(session, state);
682
- }
683
- else {
684
- await exerciseServer(session, state, "tunnel", false, carrier);
685
- }
686
- await session.close().catch(() => undefined);
687
- state.executed.record("close");
688
- if (state.activeStreams.value !== 0)
689
- throw new Error(`endpoint B cleanup left ${state.activeStreams.value} streams`);
690
- state.executed.record("cleanup");
691
- writeJSON(result("endpoint-b-result", "tunnel", state.executed.snapshot(), carrier));
692
- }
693
- async function runTunnelEndpointBV3(input, carrier) {
694
- const envelope = await input.next();
695
- const { topology, relay } = envelope;
696
- validateTunnelDimensions(topology, relay, "endpoint_b", carrier);
697
- const issued = await issueV3({ mode: "tunnel", endpoint: relay.endpoint_url, topology_id: topology.id });
489
+ const issued = await issue({ mode: "tunnel", endpoint: relay.endpoint_url, topology_id: topology.id });
698
490
  if (issued.endpoint_a_artifact_json === undefined || issued.endpoint_b_artifact_json === undefined ||
699
491
  issued.authorizations === undefined || issued.verification_records === undefined) {
700
492
  throw new Error("v3 parity issuer omitted tunnel material");
@@ -710,7 +502,7 @@ async function runTunnelEndpointBV3(input, carrier) {
710
502
  if (command.type !== "connect")
711
503
  throw new Error("endpoint B did not receive connect command");
712
504
  const state = createHandlers("tunnel");
713
- const session = await connectArtifactV3(ready.endpoint_b_artifact_json, relay, state.rpcHandlers);
505
+ const session = await connectArtifact(ready.endpoint_b_artifact_json, relay, state.rpcHandlers);
714
506
  state.executed.record("admission");
715
507
  if (process.env.FLOWERSEC_PARITY_CLIENT_PROFILE !== undefined) {
716
508
  await externalServer(session, state);
@@ -750,9 +542,7 @@ async function runTunnelEndpointA(input, carrier) {
750
542
  ready.endpoint_a_artifact_json === "")
751
543
  throw new Error("invalid endpoint B ready message");
752
544
  const state = createHandlers("tunnel");
753
- const session = PROTOCOL === "v3"
754
- ? await connectArtifactV3(ready.endpoint_a_artifact_json, ready.relay, state.rpcHandlers)
755
- : await connectArtifact(ready.endpoint_a_artifact_json, ready.relay, state.rpcHandlers);
545
+ const session = await connectArtifact(ready.endpoint_a_artifact_json, ready.relay, state.rpcHandlers);
756
546
  state.executed.record("admission");
757
547
  await exerciseClient(session, state, "tunnel", carrier);
758
548
  await session.close().catch(() => undefined);
@@ -773,20 +563,6 @@ function validateTunnelDimensions(topology, relay, endpoint, carrier) {
773
563
  throw new Error("invalid tunnel topology dimensions");
774
564
  }
775
565
  }
776
- function authorizationWire(issued, artifactJSON, leaseId) {
777
- const artifact = JSON.parse(artifactJSON);
778
- if (!Number.isSafeInteger(artifact.session.init_expire_at_unix_s) ||
779
- artifact.path.expected_peer_endpoint_instance_id === "")
780
- throw new Error("issued tunnel artifact omitted relay claims");
781
- return {
782
- decision: "allow",
783
- credentialId: issued.lookupKey(),
784
- leaseId,
785
- expiresAtUnixSeconds: artifact.session.init_expire_at_unix_s,
786
- expectedPeerEndpointInstanceId: artifact.path.expected_peer_endpoint_instance_id,
787
- allowReplacement: false,
788
- };
789
- }
790
566
  function result(type, path, cases, carrier) {
791
567
  return {
792
568
  type,
@@ -819,11 +595,6 @@ function parseArguments(arguments_) {
819
595
  return { role, carrier: arguments_[2] };
820
596
  }
821
597
  function endpointURL(carrier, path, port) {
822
- return carrier === "websocket"
823
- ? `wss://localhost:${port}/flowersec/v2/${path}`
824
- : `quic://127.0.0.1:${port}`;
825
- }
826
- function endpointURLV3(carrier, path, port) {
827
598
  return carrier === "websocket"
828
599
  ? `wss://localhost:${port}/flowersec/v3/${path}`
829
600
  : `quic://127.0.0.1:${port}`;
@@ -840,18 +611,6 @@ function tunnelListenerOptions(carrier, tls) {
840
611
  ? { carrier, host: "127.0.0.1", port: 0, tls: material, allowedOrigins: [ORIGIN] }
841
612
  : { carrier: "raw_quic", host: "127.0.0.1", port: 0, tls: material };
842
613
  }
843
- function directListenerOptionsV3(carrier, tls) {
844
- const material = { certificate: tls.tls.certificate_chain_pem, privateKey: tls.tls.private_key_pem };
845
- return carrier === "websocket"
846
- ? { carrier, path: "direct", host: "127.0.0.1", port: 0, tls: material, allowedOrigins: [ORIGIN] }
847
- : { carrier: "raw_quic", path: "direct", host: "127.0.0.1", port: 0, tls: material };
848
- }
849
- function tunnelListenerOptionsV3(carrier, tls) {
850
- const material = { certificate: tls.tls.certificate_chain_pem, privateKey: tls.tls.private_key_pem };
851
- return carrier === "websocket"
852
- ? { carrier, host: "127.0.0.1", port: 0, tls: material, allowedOrigins: [ORIGIN] }
853
- : { carrier: "raw_quic", host: "127.0.0.1", port: 0, tls: material };
854
- }
855
614
  async function main() {
856
615
  const { role, carrier } = parseArguments(process.argv.slice(2));
857
616
  switch (role) {
@@ -1,10 +1,7 @@
1
- import { type JsonValue, type OperationOptions, type Session } from "../public/contract.js";
2
- import { type DirectAuthorizationDecision, type RuntimeAuthorizationRequest } from "./controlplane.js";
1
+ import type { JsonValue } from "../public/contract.js";
3
2
  import { type StreamHandler, type StreamHandlerOptions } from "../public/streamHandlers.js";
4
- export type { RuntimeAuthorizationRequest } from "./controlplane.js";
5
3
  export { HandlerRegistrationError } from "../public/streamHandlers.js";
6
4
  export type { StreamHandler } from "../public/streamHandlers.js";
7
- export type AuthorizationDecision = DirectAuthorizationDecision;
8
5
  export type RPCHandlerResult = Readonly<{
9
6
  payload: JsonValue;
10
7
  }> | Readonly<{
@@ -25,15 +22,6 @@ export declare class RPCHandlers {
25
22
  handleRPC(typeId: number, handler: RPCHandler): void;
26
23
  handleNotification(typeId: number, handler: NotificationHandler): void;
27
24
  }
28
- export declare class SessionHandlers {
29
- private readonly streamHandlerRegistrarBrand;
30
- private readonly sessionHandlersV2Brand;
31
- constructor(options?: SessionHandlerOptions);
32
- handleRPC(typeId: number, handler: RPCHandler): void;
33
- handleNotification(typeId: number, handler: NotificationHandler): void;
34
- handleStream(kind: string, handler: StreamHandler): void;
35
- }
36
- /** Strict-v3 accepted-session handlers. */
37
25
  export declare class SessionHandlersV3 {
38
26
  private readonly streamHandlerRegistrarBrand;
39
27
  private readonly sessionHandlersV3Brand;
@@ -46,47 +34,3 @@ export type FrozenRPCHandlers = Readonly<{
46
34
  requests: ReadonlyMap<number, RPCHandler>;
47
35
  notifications: ReadonlyMap<number, NotificationHandler>;
48
36
  }>;
49
- export type AcceptorListener = Readonly<{
50
- carrier: "websocket";
51
- path: "direct";
52
- host: string;
53
- port: number;
54
- tls?: Readonly<{
55
- certificate: string;
56
- privateKey: string;
57
- }>;
58
- allowedOrigins: readonly string[];
59
- }> | Readonly<{
60
- carrier: "raw_quic";
61
- path: "direct";
62
- host: string;
63
- port: number;
64
- tls: Readonly<{
65
- certificate: string;
66
- privateKey: string;
67
- }>;
68
- }>;
69
- export type AcceptorOptions = Readonly<{
70
- listeners: readonly AcceptorListener[];
71
- maxInboundStreams: number;
72
- cleanupTimeoutMs?: number;
73
- authorize(request: RuntimeAuthorizationRequest, options: OperationOptions): Promise<AuthorizationDecision>;
74
- release?(leaseId: string): Promise<void> | void;
75
- resolveHandlers?(request: RuntimeAuthorizationRequest, options: OperationOptions): Promise<SessionHandlers> | SessionHandlers;
76
- }>;
77
- export declare class AcceptedSession {
78
- private constructor();
79
- get session(): Session;
80
- serve(options?: OperationOptions): Promise<void>;
81
- close(): Promise<void>;
82
- }
83
- export declare class Acceptor {
84
- private constructor();
85
- addresses(): readonly Readonly<{
86
- host: string;
87
- port: number;
88
- }>[];
89
- accept(operation?: OperationOptions): Promise<AcceptedSession>;
90
- close(): Promise<void>;
91
- }
92
- export declare function createAcceptor(options: AcceptorOptions): Promise<Acceptor>;