@floegence/flowersec-core 0.26.0 → 2.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 (270) hide show
  1. package/README.md +91 -22
  2. package/THIRD_PARTY_NOTICES.md +141 -0
  3. package/dist/browser/connectSession.d.ts +13 -0
  4. package/dist/browser/connectSession.js +40 -0
  5. package/dist/browser/index.d.ts +3 -10
  6. package/dist/browser/index.js +2 -5
  7. package/dist/browser/runtimeCapability.d.ts +13 -0
  8. package/dist/browser/runtimeCapability.js +27 -0
  9. package/dist/browser/sessionRuntime.d.ts +2 -0
  10. package/dist/browser/sessionRuntime.js +21 -0
  11. package/dist/browser/webTransportClient.d.ts +8 -0
  12. package/dist/browser/webTransportClient.js +55 -0
  13. package/dist/cli.d.ts +2 -0
  14. package/dist/cli.js +126 -0
  15. package/dist/cliSpendMarker.d.ts +1 -0
  16. package/dist/cliSpendMarker.js +22 -0
  17. package/dist/connectionController.d.ts +54 -0
  18. package/dist/connectionController.js +438 -0
  19. package/dist/connector/adapters/webSocketCandidate.d.ts +7 -0
  20. package/dist/connector/adapters/webSocketCandidate.js +116 -0
  21. package/dist/connector/adapters/webTransportCandidate.d.ts +5 -0
  22. package/dist/connector/adapters/webTransportCandidate.js +73 -0
  23. package/dist/connector/admissionCommit.d.ts +31 -0
  24. package/dist/connector/admissionCommit.js +239 -0
  25. package/dist/connector/sessionAcceptor.d.ts +16 -0
  26. package/dist/connector/sessionAcceptor.js +114 -0
  27. package/dist/connector/sessionConfig.d.ts +3 -0
  28. package/dist/connector/sessionConfig.js +30 -0
  29. package/dist/connector/sessionConnector.d.ts +45 -0
  30. package/dist/connector/sessionConnector.js +603 -0
  31. package/dist/defaults.d.ts +7 -7
  32. package/dist/defaults.js +7 -7
  33. package/dist/facade.d.ts +12 -30
  34. package/dist/facade.js +6 -30
  35. package/dist/node/connectSession.d.ts +21 -0
  36. package/dist/node/connectSession.js +62 -0
  37. package/dist/node/index.d.ts +3 -11
  38. package/dist/node/index.js +2 -8
  39. package/dist/node/runtimeCapability.d.ts +7 -0
  40. package/dist/node/runtimeCapability.js +10 -0
  41. package/dist/node/sessionRuntime.d.ts +2 -0
  42. package/dist/node/sessionRuntime.js +13 -0
  43. package/dist/node/webTransportClient.d.ts +9 -0
  44. package/dist/node/webTransportClient.js +56 -0
  45. package/dist/node/webTransportServer.d.ts +22 -0
  46. package/dist/node/webTransportServer.js +100 -0
  47. package/dist/node/wsFactory.d.ts +3 -1
  48. package/dist/node/wsFactory.js +4 -3
  49. package/dist/proxy/controllerGuard.d.ts +4 -4
  50. package/dist/proxy/controllerGuard.js +83 -177
  51. package/dist/proxy/disableUpstreamServiceWorkerRegister.d.ts +3 -1
  52. package/dist/proxy/disableUpstreamServiceWorkerRegister.js +19 -17
  53. package/dist/proxy/index.d.ts +16 -15
  54. package/dist/proxy/index.js +8 -14
  55. package/dist/proxy/integration.d.ts +23 -71
  56. package/dist/proxy/integration.js +37 -340
  57. package/dist/proxy/registerServiceWorker.d.ts +1 -10
  58. package/dist/proxy/registerServiceWorker.js +43 -105
  59. package/dist/proxy/runtime.d.ts +3 -63
  60. package/dist/proxy/runtime.js +349 -462
  61. package/dist/proxy/scope.d.ts +6 -0
  62. package/dist/proxy/scope.js +131 -0
  63. package/dist/proxy/serviceWorker.d.ts +5 -16
  64. package/dist/proxy/serviceWorker.js +230 -617
  65. package/dist/proxy/stream.d.ts +9 -0
  66. package/dist/proxy/stream.js +40 -0
  67. package/dist/proxy/types.d.ts +78 -30
  68. package/dist/proxy/windowBridge.d.ts +61 -0
  69. package/dist/proxy/windowBridge.js +344 -0
  70. package/dist/proxy/wsPatch.d.ts +4 -14
  71. package/dist/proxy/wsPatch.js +173 -268
  72. package/dist/public/artifact.d.ts +11 -0
  73. package/dist/public/artifact.js +44 -0
  74. package/dist/public/artifactLease.d.ts +10 -0
  75. package/dist/public/artifactLease.js +48 -0
  76. package/dist/public/connectError.d.ts +6 -0
  77. package/dist/public/connectError.js +9 -0
  78. package/dist/public/contract.d.ts +83 -0
  79. package/dist/public/contract.js +17 -0
  80. package/dist/public/streamMetadata.d.ts +10 -0
  81. package/dist/public/streamMetadata.js +40 -0
  82. package/dist/rpc/caller.d.ts +1 -1
  83. package/dist/rpc/client.d.ts +1 -4
  84. package/dist/rpc/client.js +0 -21
  85. package/dist/rpc/rpcProxy.d.ts +1 -1
  86. package/dist/rpc/server.d.ts +1 -1
  87. package/dist/rpc/validate.d.ts +1 -1
  88. package/dist/rpc/wire.d.ts +15 -0
  89. package/dist/runtime/errors.d.ts +6 -0
  90. package/dist/runtime/errors.js +10 -0
  91. package/dist/transport/webSocketAdapter.d.ts +24 -0
  92. package/dist/transport/webSocketAdapter.js +234 -0
  93. package/dist/transport/webTransportAdapter.d.ts +27 -0
  94. package/dist/transport/webTransportAdapter.js +519 -0
  95. package/dist/utils/errors.d.ts +2 -20
  96. package/dist/utils/errors.js +73 -20
  97. package/dist/v2/admissionError.d.ts +4 -0
  98. package/dist/v2/admissionError.js +8 -0
  99. package/dist/v2/artifact.d.ts +128 -0
  100. package/dist/v2/artifact.js +1126 -0
  101. package/dist/v2/artifactLease.d.ts +1 -0
  102. package/dist/v2/artifactLease.js +7 -0
  103. package/dist/v2/capability.d.ts +29 -0
  104. package/dist/v2/capability.js +190 -0
  105. package/dist/v2/carrier.d.ts +79 -0
  106. package/dist/v2/carrier.js +405 -0
  107. package/dist/v2/contract.d.ts +37 -0
  108. package/dist/v2/contract.js +1 -0
  109. package/dist/v2/handshake.d.ts +80 -0
  110. package/dist/v2/handshake.js +470 -0
  111. package/dist/v2/opaqueArtifact.d.ts +1 -0
  112. package/dist/v2/opaqueArtifact.js +2 -0
  113. package/dist/v2/protocol.d.ts +99 -0
  114. package/dist/v2/protocol.js +739 -0
  115. package/dist/v2/publicSession.d.ts +1 -0
  116. package/dist/v2/publicSession.js +179 -0
  117. package/dist/v2/retryDisposition.d.ts +16 -0
  118. package/dist/v2/retryDisposition.js +30 -0
  119. package/dist/v2/session.d.ts +277 -0
  120. package/dist/v2/session.js +1879 -0
  121. package/dist/v2/streamLifetimeLedger.d.ts +31 -0
  122. package/dist/v2/streamLifetimeLedger.js +131 -0
  123. package/dist/v2/streamMetadata.d.ts +1 -0
  124. package/dist/v2/streamMetadata.js +7 -0
  125. package/dist/v2/unreliableMessage.d.ts +43 -0
  126. package/dist/v2/unreliableMessage.js +252 -0
  127. package/dist/vendor/tr46.d.ts +10 -0
  128. package/dist/vendor/tr46.js +501 -0
  129. package/dist/ws-client/binaryTransport.d.ts +0 -3
  130. package/dist/ws-client/binaryTransport.js +15 -39
  131. package/dist/yamux/errors.d.ts +0 -4
  132. package/dist/yamux/errors.js +0 -9
  133. package/dist/yamux/session.d.ts +0 -5
  134. package/dist/yamux/session.js +4 -70
  135. package/dist/yamux/stream.d.ts +1 -0
  136. package/dist/yamux/stream.js +4 -0
  137. package/package.json +29 -83
  138. package/sbom/cyclonedx.json +2764 -0
  139. package/sbom/spdx.json +1947 -0
  140. package/YAMUX_ALIGNMENT.md +0 -127
  141. package/dist/_examples/flowersec/demo/v1.facade.gen.d.ts +0 -12
  142. package/dist/_examples/flowersec/demo/v1.facade.gen.js +0 -15
  143. package/dist/_examples/flowersec/demo/v1.gen.d.ts +0 -16
  144. package/dist/_examples/flowersec/demo/v1.gen.js +0 -86
  145. package/dist/_examples/flowersec/demo/v1.rpc.gen.d.ts +0 -11
  146. package/dist/_examples/flowersec/demo/v1.rpc.gen.js +0 -22
  147. package/dist/browser/connect.d.ts +0 -12
  148. package/dist/browser/connect.js +0 -31
  149. package/dist/browser/controlplane.d.ts +0 -15
  150. package/dist/browser/controlplane.js +0 -64
  151. package/dist/browser/reconnectConfig.d.ts +0 -15
  152. package/dist/browser/reconnectConfig.js +0 -20
  153. package/dist/client-connect/common.d.ts +0 -26
  154. package/dist/client-connect/common.js +0 -167
  155. package/dist/client-connect/connectCore.d.ts +0 -61
  156. package/dist/client-connect/connectCore.js +0 -572
  157. package/dist/client-connect/contract.d.ts +0 -8
  158. package/dist/client-connect/contract.js +0 -51
  159. package/dist/client-connect/termination.d.ts +0 -6
  160. package/dist/client-connect/termination.js +0 -7
  161. package/dist/client-connect/transportSecurity.d.ts +0 -27
  162. package/dist/client-connect/transportSecurity.js +0 -199
  163. package/dist/client-connect/tunnelAttachCloseReason.d.ts +0 -3
  164. package/dist/client-connect/tunnelAttachCloseReason.js +0 -23
  165. package/dist/client.d.ts +0 -23
  166. package/dist/connect/artifact.d.ts +0 -37
  167. package/dist/connect/artifact.js +0 -217
  168. package/dist/connect/internalNormalize.d.ts +0 -22
  169. package/dist/connect/internalNormalize.js +0 -173
  170. package/dist/controlplane/channelInit.d.ts +0 -27
  171. package/dist/controlplane/channelInit.js +0 -116
  172. package/dist/controlplane/http.d.ts +0 -16
  173. package/dist/controlplane/http.js +0 -59
  174. package/dist/controlplane/index.d.ts +0 -6
  175. package/dist/controlplane/index.js +0 -5
  176. package/dist/controlplane/issuer.d.ts +0 -18
  177. package/dist/controlplane/issuer.js +0 -113
  178. package/dist/controlplane/request.d.ts +0 -51
  179. package/dist/controlplane/request.js +0 -273
  180. package/dist/controlplane/token.d.ts +0 -33
  181. package/dist/controlplane/token.js +0 -119
  182. package/dist/direct-client/connect.d.ts +0 -9
  183. package/dist/direct-client/connect.js +0 -90
  184. package/dist/direct-client/index.d.ts +0 -1
  185. package/dist/direct-client/index.js +0 -1
  186. package/dist/e2ee/constants.d.ts +0 -9
  187. package/dist/e2ee/constants.js +0 -18
  188. package/dist/e2ee/errors.d.ts +0 -5
  189. package/dist/e2ee/errors.js +0 -8
  190. package/dist/e2ee/framing.d.ts +0 -12
  191. package/dist/e2ee/framing.js +0 -57
  192. package/dist/e2ee/handshake.d.ts +0 -88
  193. package/dist/e2ee/handshake.js +0 -353
  194. package/dist/e2ee/index.d.ts +0 -7
  195. package/dist/e2ee/index.js +0 -7
  196. package/dist/e2ee/kdf.d.ts +0 -15
  197. package/dist/e2ee/kdf.js +0 -39
  198. package/dist/e2ee/record.d.ts +0 -11
  199. package/dist/e2ee/record.js +0 -76
  200. package/dist/e2ee/secureChannel.d.ts +0 -92
  201. package/dist/e2ee/secureChannel.js +0 -328
  202. package/dist/e2ee/transcript.d.ts +0 -23
  203. package/dist/e2ee/transcript.js +0 -31
  204. package/dist/endpoint/index.d.ts +0 -84
  205. package/dist/endpoint/index.js +0 -557
  206. package/dist/endpoint/node.d.ts +0 -9
  207. package/dist/endpoint/node.js +0 -51
  208. package/dist/gen/flowersec/controlplane/v1.gen.d.ts +0 -36
  209. package/dist/gen/flowersec/controlplane/v1.gen.js +0 -135
  210. package/dist/gen/flowersec/direct/v1.gen.d.ts +0 -21
  211. package/dist/gen/flowersec/direct/v1.gen.js +0 -101
  212. package/dist/gen/flowersec/e2ee/v1.gen.d.ts +0 -68
  213. package/dist/gen/flowersec/e2ee/v1.gen.js +0 -194
  214. package/dist/gen/flowersec/rpc/v1.gen.d.ts +0 -30
  215. package/dist/gen/flowersec/rpc/v1.gen.js +0 -107
  216. package/dist/gen/flowersec/tunnel/v1.gen.d.ts +0 -23
  217. package/dist/gen/flowersec/tunnel/v1.gen.js +0 -104
  218. package/dist/index.d.ts +0 -22
  219. package/dist/index.js +0 -22
  220. package/dist/node/connect.d.ts +0 -12
  221. package/dist/node/connect.js +0 -29
  222. package/dist/node/reconnectConfig.d.ts +0 -16
  223. package/dist/node/reconnectConfig.js +0 -20
  224. package/dist/observability/index.d.ts +0 -1
  225. package/dist/observability/index.js +0 -1
  226. package/dist/observability/observer.d.ts +0 -52
  227. package/dist/observability/observer.js +0 -314
  228. package/dist/proxy/appWindow.d.ts +0 -37
  229. package/dist/proxy/appWindow.js +0 -273
  230. package/dist/proxy/bootstrap.d.ts +0 -35
  231. package/dist/proxy/bootstrap.js +0 -119
  232. package/dist/proxy/constants.d.ts +0 -7
  233. package/dist/proxy/constants.js +0 -8
  234. package/dist/proxy/controllerWindow.d.ts +0 -12
  235. package/dist/proxy/controllerWindow.js +0 -384
  236. package/dist/proxy/cookieJar.d.ts +0 -7
  237. package/dist/proxy/cookieJar.js +0 -136
  238. package/dist/proxy/headerPolicy.d.ts +0 -14
  239. package/dist/proxy/headerPolicy.js +0 -134
  240. package/dist/proxy/portStream.d.ts +0 -5
  241. package/dist/proxy/portStream.js +0 -256
  242. package/dist/proxy/preset.d.ts +0 -29
  243. package/dist/proxy/preset.js +0 -111
  244. package/dist/proxy/runtimeScope.d.ts +0 -57
  245. package/dist/proxy/runtimeScope.js +0 -218
  246. package/dist/proxy/server.d.ts +0 -28
  247. package/dist/proxy/server.js +0 -833
  248. package/dist/proxy/windowBridgeProtocol.d.ts +0 -65
  249. package/dist/proxy/windowBridgeProtocol.js +0 -11
  250. package/dist/reconnect/artifactControlplane.d.ts +0 -16
  251. package/dist/reconnect/artifactControlplane.js +0 -35
  252. package/dist/reconnect/index.d.ts +0 -36
  253. package/dist/reconnect/index.js +0 -388
  254. package/dist/rpc-proxy/index.d.ts +0 -1
  255. package/dist/rpc-proxy/index.js +0 -1
  256. package/dist/rpc-proxy/rpcProxy.d.ts +0 -1
  257. package/dist/rpc-proxy/rpcProxy.js +0 -1
  258. package/dist/streamhello/index.d.ts +0 -1
  259. package/dist/streamhello/index.js +0 -1
  260. package/dist/streamhello/streamHello.d.ts +0 -3
  261. package/dist/streamhello/streamHello.js +0 -13
  262. package/dist/streamio/index.d.ts +0 -32
  263. package/dist/streamio/index.js +0 -87
  264. package/dist/tunnel-client/connect.d.ts +0 -9
  265. package/dist/tunnel-client/connect.js +0 -157
  266. package/dist/tunnel-client/index.d.ts +0 -1
  267. package/dist/tunnel-client/index.js +0 -1
  268. package/dist/ws/index.d.ts +0 -1
  269. package/dist/ws/index.js +0 -1
  270. /package/dist/{client.js → rpc/wire.js} +0 -0
@@ -1,104 +0,0 @@
1
- // Code generated by idlgen. DO NOT EDIT.
2
- /** Endpoint role for tunnel attach. */
3
- export var Role;
4
- (function (Role) {
5
- /** Client endpoint. */
6
- Role[Role["Role_client"] = 1] = "Role_client";
7
- /** Server endpoint. */
8
- Role[Role["Role_server"] = 2] = "Role_server";
9
- })(Role || (Role = {}));
10
- function isRecord(v) {
11
- return typeof v === "object" && v != null && !Array.isArray(v);
12
- }
13
- function assertString(name, v) {
14
- if (typeof v !== "string")
15
- throw new Error(`bad ${name}`);
16
- return v;
17
- }
18
- function assertBoolean(name, v) {
19
- if (typeof v !== "boolean")
20
- throw new Error(`bad ${name}`);
21
- return v;
22
- }
23
- function assertSafeInt(name, v) {
24
- if (typeof v !== "number" || !Number.isSafeInteger(v))
25
- throw new Error(`bad ${name}`);
26
- return v;
27
- }
28
- function assertU32(name, v) {
29
- const n = assertSafeInt(name, v);
30
- if (n < 0 || n > 0xffffffff)
31
- throw new Error(`bad ${name}`);
32
- return n;
33
- }
34
- function assertU16(name, v) {
35
- const n = assertU32(name, v);
36
- if (n > 0xffff)
37
- throw new Error(`bad ${name}`);
38
- return n;
39
- }
40
- function assertU8(name, v) {
41
- const n = assertU32(name, v);
42
- if (n > 0xff)
43
- throw new Error(`bad ${name}`);
44
- return n;
45
- }
46
- function assertU64(name, v) {
47
- const n = assertSafeInt(name, v);
48
- if (n < 0)
49
- throw new Error(`bad ${name}`);
50
- return n;
51
- }
52
- function assertI32(name, v) {
53
- const n = assertSafeInt(name, v);
54
- if (n < -2147483648 || n > 2147483647)
55
- throw new Error(`bad ${name}`);
56
- return n;
57
- }
58
- function assertI64(name, v) {
59
- return assertSafeInt(name, v);
60
- }
61
- function assertStringMap(name, v) {
62
- if (!isRecord(v))
63
- throw new Error(`bad ${name}`);
64
- for (const [k, vv] of Object.entries(v)) {
65
- void k;
66
- if (typeof vv !== "string")
67
- throw new Error(`bad ${name}`);
68
- }
69
- return v;
70
- }
71
- const _RoleValues = new Set([
72
- 1,
73
- 2,
74
- ]);
75
- function assertRole(name, v) {
76
- const n = assertSafeInt(name, v);
77
- if (!_RoleValues.has(n))
78
- throw new Error(`bad ${name}`);
79
- return n;
80
- }
81
- export function assertAttach(v) {
82
- if (!isRecord(v))
83
- throw new Error("bad Attach");
84
- const o = v;
85
- if (o["v"] === undefined)
86
- throw new Error("bad Attach.v");
87
- assertU32("Attach.v", o["v"]);
88
- if (o["channel_id"] === undefined)
89
- throw new Error("bad Attach.channel_id");
90
- assertString("Attach.channel_id", o["channel_id"]);
91
- if (o["role"] === undefined)
92
- throw new Error("bad Attach.role");
93
- assertRole("Attach.role", o["role"]);
94
- if (o["token"] === undefined)
95
- throw new Error("bad Attach.token");
96
- assertString("Attach.token", o["token"]);
97
- if (o["endpoint_instance_id"] === undefined)
98
- throw new Error("bad Attach.endpoint_instance_id");
99
- assertString("Attach.endpoint_instance_id", o["endpoint_instance_id"]);
100
- if (o["caps"] !== undefined) {
101
- assertStringMap("Attach.caps", o["caps"]);
102
- }
103
- return o;
104
- }
package/dist/index.d.ts DELETED
@@ -1,22 +0,0 @@
1
- export * from "./utils/base64url.js";
2
- export * from "./utils/bin.js";
3
- export * from "./utils/errors.js";
4
- export * from "./framing/index.js";
5
- export * from "./streamio/index.js";
6
- export * from "./e2ee/constants.js";
7
- export * from "./e2ee/framing.js";
8
- export * from "./e2ee/transcript.js";
9
- export * from "./e2ee/kdf.js";
10
- export * from "./e2ee/record.js";
11
- export * from "./e2ee/secureChannel.js";
12
- export * from "./e2ee/handshake.js";
13
- export * from "./e2ee/errors.js";
14
- export * from "./client.js";
15
- export * from "./client-connect/transportSecurity.js";
16
- export * from "./observability/index.js";
17
- export * from "./ws-client/binaryTransport.js";
18
- export * from "./yamux/index.js";
19
- export * from "./rpc/index.js";
20
- export * from "./streamhello/index.js";
21
- export * from "./tunnel-client/index.js";
22
- export * from "./direct-client/index.js";
package/dist/index.js DELETED
@@ -1,22 +0,0 @@
1
- export * from "./utils/base64url.js";
2
- export * from "./utils/bin.js";
3
- export * from "./utils/errors.js";
4
- export * from "./framing/index.js";
5
- export * from "./streamio/index.js";
6
- export * from "./e2ee/constants.js";
7
- export * from "./e2ee/framing.js";
8
- export * from "./e2ee/transcript.js";
9
- export * from "./e2ee/kdf.js";
10
- export * from "./e2ee/record.js";
11
- export * from "./e2ee/secureChannel.js";
12
- export * from "./e2ee/handshake.js";
13
- export * from "./e2ee/errors.js";
14
- export * from "./client.js";
15
- export * from "./client-connect/transportSecurity.js";
16
- export * from "./observability/index.js";
17
- export * from "./ws-client/binaryTransport.js";
18
- export * from "./yamux/index.js";
19
- export * from "./rpc/index.js";
20
- export * from "./streamhello/index.js";
21
- export * from "./tunnel-client/index.js";
22
- export * from "./direct-client/index.js";
@@ -1,12 +0,0 @@
1
- import type { Client } from "../client.js";
2
- import type { DirectConnectOptions } from "../direct-client/connect.js";
3
- import type { TunnelConnectOptions } from "../tunnel-client/connect.js";
4
- import { type ConnectOptions } from "../facade.js";
5
- import type { ConnectArtifact } from "../connect/artifact.js";
6
- import type { ChannelInitGrant } from "../gen/flowersec/controlplane/v1.gen.js";
7
- import type { DirectConnectInfo } from "../gen/flowersec/direct/v1.gen.js";
8
- export declare function connectNode(input: DirectConnectInfo, opts: DirectConnectOptions): Promise<Client>;
9
- export declare function connectNode(input: ChannelInitGrant, opts: TunnelConnectOptions): Promise<Client>;
10
- export declare function connectNode(input: ConnectArtifact, opts: ConnectOptions): Promise<Client>;
11
- export declare function connectTunnelNode(grant: ChannelInitGrant, opts: TunnelConnectOptions): Promise<Client>;
12
- export declare function connectDirectNode(info: DirectConnectInfo, opts: DirectConnectOptions): Promise<Client>;
@@ -1,29 +0,0 @@
1
- import { connectDirect } from "../direct-client/connect.js";
2
- import { connectTunnel } from "../tunnel-client/connect.js";
3
- import { connect } from "../facade.js";
4
- import { createNodeWsFactory } from "./wsFactory.js";
5
- import { defaultWsMaxPayload } from "./wsDefaults.js";
6
- export async function connectNode(input, opts) {
7
- const wsFactory = opts.wsFactory ??
8
- createNodeWsFactory({
9
- maxPayload: defaultWsMaxPayload(opts),
10
- perMessageDeflate: false,
11
- });
12
- return await connect(input, { ...opts, wsFactory });
13
- }
14
- export async function connectTunnelNode(grant, opts) {
15
- const wsFactory = opts.wsFactory ??
16
- createNodeWsFactory({
17
- maxPayload: defaultWsMaxPayload(opts),
18
- perMessageDeflate: false,
19
- });
20
- return await connectTunnel(grant, { ...opts, wsFactory });
21
- }
22
- export async function connectDirectNode(info, opts) {
23
- const wsFactory = opts.wsFactory ??
24
- createNodeWsFactory({
25
- maxPayload: defaultWsMaxPayload(opts),
26
- perMessageDeflate: false,
27
- });
28
- return await connectDirect(info, { ...opts, wsFactory });
29
- }
@@ -1,16 +0,0 @@
1
- import type { ClientObserverLike } from "../observability/observer.js";
2
- import type { DirectConnectOptions } from "../direct-client/connect.js";
3
- import type { TunnelConnectOptions } from "../tunnel-client/connect.js";
4
- import type { AutoReconnectConfig, ConnectConfig as ReconnectConnectConfig } from "../reconnect/index.js";
5
- import { type ArtifactSource } from "../reconnect/artifactControlplane.js";
6
- export type NodeReconnectConfig = Readonly<{
7
- source: ArtifactSource;
8
- connect?: Omit<TunnelConnectOptions, "observer" | "signal"> | Omit<DirectConnectOptions, "observer" | "signal">;
9
- observer?: ClientObserverLike;
10
- autoReconnect?: AutoReconnectConfig;
11
- }>;
12
- export type TunnelNodeReconnectConfig = NodeReconnectConfig;
13
- export type DirectNodeReconnectConfig = NodeReconnectConfig;
14
- export declare function createNodeReconnectConfig(config: NodeReconnectConfig): ReconnectConnectConfig;
15
- export declare const createTunnelNodeReconnectConfig: typeof createNodeReconnectConfig;
16
- export declare const createDirectNodeReconnectConfig: typeof createNodeReconnectConfig;
@@ -1,20 +0,0 @@
1
- import { createArtifactResolver, updateTraceId } from "../reconnect/artifactControlplane.js";
2
- import { connectNode } from "./connect.js";
3
- export function createNodeReconnectConfig(config) {
4
- if (config.source.kind === "once" && config.autoReconnect?.enabled) {
5
- throw new Error("automatic reconnect requires a refreshable artifact source");
6
- }
7
- let traceId = config.source.kind === "once" ? config.source.artifact.correlation?.trace_id : undefined;
8
- const acquire = createArtifactResolver(config.source);
9
- return {
10
- ...(config.observer === undefined ? {} : { observer: config.observer }),
11
- ...(config.autoReconnect === undefined ? {} : { autoReconnect: config.autoReconnect }),
12
- connectOnce: async ({ signal, observer }) => {
13
- const artifact = await acquire({ ...(traceId === undefined ? {} : { traceId }), signal });
14
- traceId = updateTraceId(traceId, artifact);
15
- return await connectNode(artifact, { ...(config.connect ?? {}), signal, observer });
16
- },
17
- };
18
- }
19
- export const createTunnelNodeReconnectConfig = createNodeReconnectConfig;
20
- export const createDirectNodeReconnectConfig = createNodeReconnectConfig;
@@ -1 +0,0 @@
1
- export * from "./observer.js";
@@ -1 +0,0 @@
1
- export * from "./observer.js";
@@ -1,52 +0,0 @@
1
- import type { ClientPath } from "../client.js";
2
- export type ConnectResult = "ok" | "fail";
3
- export type ConnectReason = "websocket_error" | "websocket_closed" | "timeout" | "canceled";
4
- export type AttachResult = "ok" | "fail";
5
- export type AttachReason = "send_failed" | "too_many_connections" | "expected_attach" | "invalid_attach" | "invalid_token" | "channel_mismatch" | "role_mismatch" | "init_exp_mismatch" | "idle_timeout_mismatch" | "token_replay" | "tenant_mismatch" | "policy_denied" | "policy_error" | "replace_rate_limited" | "attach_failed" | "timeout" | "canceled";
6
- export type HandshakeResult = "ok" | "fail";
7
- export type HandshakeReason = "auth_tag_mismatch" | "handshake_failed" | "invalid_suite" | "invalid_version" | "timestamp_after_init_exp" | "timestamp_out_of_skew" | "timeout" | "canceled";
8
- export type WsCloseKind = "local" | "peer_or_error";
9
- export type WsErrorReason = "error" | "recv_buffer_exceeded" | "send_buffer_exceeded" | "send_buffer_timeout" | "unexpected_text_frame" | "unexpected_message_type";
10
- export type RpcCallResult = "ok" | "rpc_error" | "handler_not_found" | "transport_error" | "canceled";
11
- export type DiagnosticEvent = Readonly<{
12
- v: 1;
13
- namespace: "connect";
14
- path: ClientPath | "auto";
15
- stage: "validate" | "normalize" | "scope" | "connect" | "attach" | "handshake" | "transport" | "yamux" | "rpc" | "close" | "reconnect";
16
- code_domain: "error" | "event";
17
- code: string;
18
- result: "ok" | "fail" | "retry" | "skip";
19
- elapsed_ms: number;
20
- attempt_seq: number;
21
- trace_id?: string;
22
- session_id?: string;
23
- resource?: string;
24
- current?: number;
25
- limit?: number;
26
- }>;
27
- type ObserverContext = Readonly<{
28
- path?: ClientPath | "auto";
29
- traceId?: string;
30
- sessionId?: string;
31
- attemptSeq?: number;
32
- attemptStartMs?: number;
33
- maxQueuedItems?: number;
34
- }>;
35
- export type ClientObserver = {
36
- onConnect(path: ClientPath, result: ConnectResult, reason: ConnectReason | undefined, elapsedSeconds: number): void;
37
- onAttach(result: AttachResult, reason: AttachReason | undefined): void;
38
- onHandshake(path: ClientPath, result: HandshakeResult, reason: HandshakeReason | undefined, elapsedSeconds: number): void;
39
- onWsClose(kind: WsCloseKind, code?: number): void;
40
- onWsError(reason: WsErrorReason): void;
41
- onRpcCall(result: RpcCallResult, elapsedSeconds: number): void;
42
- onRpcNotify(): void;
43
- onDiagnosticEvent(event: DiagnosticEvent): void;
44
- };
45
- export type ClientObserverLike = Partial<ClientObserver>;
46
- type DiagnosticEventInput = Omit<DiagnosticEvent, "v" | "namespace" | "elapsed_ms" | "attempt_seq" | "trace_id" | "session_id" | "path"> & Partial<Pick<DiagnosticEvent, "path">>;
47
- export declare const NoopObserver: ClientObserver;
48
- export declare function withObserverContext(observer: ClientObserverLike | undefined, context: ObserverContext): ClientObserverLike | undefined;
49
- export declare function emitObserverDiagnostic(observer: ClientObserverLike | undefined, event: DiagnosticEventInput): void;
50
- export declare function normalizeObserver(observer?: ClientObserverLike, context?: ObserverContext): ClientObserver;
51
- export declare function nowSeconds(): number;
52
- export {};
@@ -1,314 +0,0 @@
1
- const OBSERVER_CONTEXT = Symbol.for("floegence.flowersec.observer_context");
2
- const NORMALIZED_OBSERVER = Symbol.for("floegence.flowersec.normalized_observer");
3
- const DEFAULT_MAX_QUEUED_ITEMS = 64;
4
- export const NoopObserver = {
5
- onConnect: () => { },
6
- onAttach: () => { },
7
- onHandshake: () => { },
8
- onWsClose: () => { },
9
- onWsError: () => { },
10
- onRpcCall: () => { },
11
- onRpcNotify: () => { },
12
- onDiagnosticEvent: () => { },
13
- };
14
- function getObserverContext(observer) {
15
- const context = observer?.[OBSERVER_CONTEXT];
16
- if (context == null || typeof context !== "object")
17
- return {};
18
- return context;
19
- }
20
- function safeInvoke(fn) {
21
- if (fn == null)
22
- return;
23
- try {
24
- fn();
25
- }
26
- catch {
27
- // Best effort only; observability must not affect connect semantics.
28
- }
29
- }
30
- function hasAnyHandlers(observer) {
31
- if (observer == null)
32
- return false;
33
- return (observer.onConnect != null ||
34
- observer.onAttach != null ||
35
- observer.onHandshake != null ||
36
- observer.onWsClose != null ||
37
- observer.onWsError != null ||
38
- observer.onRpcCall != null ||
39
- observer.onRpcNotify != null ||
40
- observer.onDiagnosticEvent != null);
41
- }
42
- function buildDiagnosticEvent(context, event) {
43
- return Object.freeze({
44
- v: 1,
45
- namespace: "connect",
46
- path: event.path ?? context.path ?? "auto",
47
- stage: event.stage,
48
- code_domain: event.code_domain,
49
- code: event.code,
50
- result: event.result,
51
- elapsed_ms: Math.max(0, Math.floor(nowMilliseconds() - (context.attemptStartMs ?? nowMilliseconds()))),
52
- attempt_seq: Math.max(1, Math.floor(context.attemptSeq ?? 1)),
53
- ...(context.traceId === undefined ? {} : { trace_id: context.traceId }),
54
- ...(context.sessionId === undefined
55
- ? {}
56
- : { session_id: context.sessionId }),
57
- ...(event.resource === undefined ? {} : { resource: event.resource }),
58
- ...(event.current === undefined ? {} : { current: event.current }),
59
- ...(event.limit === undefined ? {} : { limit: event.limit }),
60
- });
61
- }
62
- function mapConnectDiagnostic(path, result, reason) {
63
- if (result === "ok") {
64
- return {
65
- path,
66
- stage: "connect",
67
- code_domain: "event",
68
- code: "connect_ok",
69
- result: "ok",
70
- };
71
- }
72
- return {
73
- path,
74
- stage: "connect",
75
- code_domain: "error",
76
- code: reason === "timeout" || reason === "canceled" ? reason : "dial_failed",
77
- result: "fail",
78
- };
79
- }
80
- function mapAttachDiagnostic(result, reason, path) {
81
- if (result === "ok") {
82
- return {
83
- path,
84
- stage: "attach",
85
- code_domain: "event",
86
- code: "attach_ok",
87
- result: "ok",
88
- };
89
- }
90
- return {
91
- path,
92
- stage: "attach",
93
- code_domain: "error",
94
- code: reason === "send_failed" ? "attach_failed" : (reason ?? "attach_failed"),
95
- result: "fail",
96
- };
97
- }
98
- function mapHandshakeDiagnostic(path, result, reason) {
99
- if (result === "ok") {
100
- return {
101
- path,
102
- stage: "handshake",
103
- code_domain: "event",
104
- code: "handshake_ok",
105
- result: "ok",
106
- };
107
- }
108
- return {
109
- path,
110
- stage: "handshake",
111
- code_domain: "error",
112
- code: reason ?? "handshake_failed",
113
- result: "fail",
114
- };
115
- }
116
- function mapWsCloseDiagnostic(kind, path) {
117
- return {
118
- path,
119
- stage: "close",
120
- code_domain: "event",
121
- code: kind === "local" ? "ws_close_local" : "ws_close_peer_or_error",
122
- result: "skip",
123
- };
124
- }
125
- function mapWsErrorDiagnostic(path) {
126
- return {
127
- path,
128
- stage: "close",
129
- code_domain: "event",
130
- code: "ws_error",
131
- result: "skip",
132
- };
133
- }
134
- class ObserverDispatcher {
135
- [NORMALIZED_OBSERVER] = true;
136
- [OBSERVER_CONTEXT];
137
- queue = [];
138
- observer;
139
- maxQueuedItems;
140
- draining = false;
141
- overflowQueued = false;
142
- constructor(observer, context) {
143
- this.observer = observer;
144
- this[OBSERVER_CONTEXT] = context;
145
- this.maxQueuedItems = Math.max(4, Math.floor(context.maxQueuedItems ?? DEFAULT_MAX_QUEUED_ITEMS));
146
- }
147
- onConnect(path, result, reason, elapsedSeconds) {
148
- const diagnostic = mapConnectDiagnostic(path, result, reason);
149
- this.enqueueCombined(() => this.observer.onConnect?.(path, result, reason, elapsedSeconds), diagnostic, result === "fail");
150
- }
151
- onAttach(result, reason) {
152
- const diagnostic = mapAttachDiagnostic(result, reason, this[OBSERVER_CONTEXT].path ?? "auto");
153
- this.enqueueCombined(() => this.observer.onAttach?.(result, reason), diagnostic, result === "fail");
154
- }
155
- onHandshake(path, result, reason, elapsedSeconds) {
156
- const diagnostic = mapHandshakeDiagnostic(path, result, reason);
157
- this.enqueueCombined(() => this.observer.onHandshake?.(path, result, reason, elapsedSeconds), diagnostic, result === "fail");
158
- }
159
- onWsClose(kind, code) {
160
- const diagnostic = mapWsCloseDiagnostic(kind, this[OBSERVER_CONTEXT].path ?? "auto");
161
- this.enqueueCombined(() => this.observer.onWsClose?.(kind, code), diagnostic, false);
162
- }
163
- onWsError(reason) {
164
- const diagnostic = mapWsErrorDiagnostic(this[OBSERVER_CONTEXT].path ?? "auto");
165
- this.enqueueCombined(() => this.observer.onWsError?.(reason), diagnostic, false);
166
- }
167
- onRpcCall(result, elapsedSeconds) {
168
- this.enqueueCombined(() => this.observer.onRpcCall?.(result, elapsedSeconds), undefined, false);
169
- }
170
- onRpcNotify() {
171
- this.enqueueCombined(() => this.observer.onRpcNotify?.(), undefined, false);
172
- }
173
- onDiagnosticEvent(event) {
174
- this.enqueueCombined(() => this.observer.onDiagnosticEvent?.(event), undefined, event.result === "fail");
175
- }
176
- emitDiagnosticEvent(event) {
177
- const diagnostic = buildDiagnosticEvent(this[OBSERVER_CONTEXT], event);
178
- this.enqueue({
179
- kind: event.code === "diagnostics_overflow"
180
- ? "overflow"
181
- : event.result === "fail"
182
- ? "terminal"
183
- : "normal",
184
- deliver: () => this.observer.onDiagnosticEvent?.(diagnostic),
185
- });
186
- }
187
- enqueueCombined(callback, diagnostic, terminal) {
188
- if (callback == null && diagnostic == null)
189
- return;
190
- const event = diagnostic == null
191
- ? undefined
192
- : buildDiagnosticEvent(this[OBSERVER_CONTEXT], diagnostic);
193
- this.enqueue({
194
- kind: terminal ? "terminal" : "normal",
195
- deliver: () => {
196
- safeInvoke(callback);
197
- if (event != null) {
198
- safeInvoke(() => this.observer.onDiagnosticEvent?.(event));
199
- }
200
- },
201
- });
202
- }
203
- enqueue(item) {
204
- if (this.queue.length >= this.maxQueuedItems) {
205
- if (!this.makeRoom(item.kind)) {
206
- return;
207
- }
208
- }
209
- if (item.kind === "overflow") {
210
- if (this.overflowQueued)
211
- return;
212
- this.overflowQueued = true;
213
- }
214
- this.queue.push(item);
215
- this.scheduleDrain();
216
- }
217
- makeRoom(kind) {
218
- const removableIndex = this.queue.findIndex((entry) => entry.kind === "normal");
219
- if (removableIndex >= 0) {
220
- this.queue.splice(removableIndex, 1);
221
- if (kind === "normal") {
222
- this.queueOverflowEvent();
223
- }
224
- return true;
225
- }
226
- if (kind === "normal") {
227
- return false;
228
- }
229
- if (this.queue.length > 0) {
230
- const shifted = this.queue.shift();
231
- if (shifted?.kind === "overflow")
232
- this.overflowQueued = false;
233
- return true;
234
- }
235
- return true;
236
- }
237
- queueOverflowEvent() {
238
- if (this.overflowQueued || this.observer.onDiagnosticEvent == null)
239
- return;
240
- this.enqueue({
241
- kind: "overflow",
242
- deliver: () => {
243
- this.overflowQueued = false;
244
- safeInvoke(() => this.observer.onDiagnosticEvent?.(buildDiagnosticEvent(this[OBSERVER_CONTEXT], {
245
- stage: "reconnect",
246
- code_domain: "event",
247
- code: "diagnostics_overflow",
248
- result: "skip",
249
- })));
250
- },
251
- });
252
- }
253
- scheduleDrain() {
254
- if (this.draining)
255
- return;
256
- this.draining = true;
257
- queueMicrotask(() => this.drainOne());
258
- }
259
- drainOne() {
260
- this.draining = false;
261
- const item = this.queue.shift();
262
- if (item == null)
263
- return;
264
- if (item.kind === "overflow") {
265
- this.overflowQueued = false;
266
- }
267
- safeInvoke(item.deliver);
268
- if (this.queue.length > 0) {
269
- this.scheduleDrain();
270
- }
271
- }
272
- }
273
- export function withObserverContext(observer, context) {
274
- if (observer == null && Object.keys(context).length === 0)
275
- return observer;
276
- const previous = getObserverContext(observer);
277
- return Object.assign({}, observer ?? {}, {
278
- [OBSERVER_CONTEXT]: {
279
- ...previous,
280
- ...context,
281
- },
282
- });
283
- }
284
- export function emitObserverDiagnostic(observer, event) {
285
- const normalized = normalizeObserver(observer);
286
- if (normalized.emitDiagnosticEvent) {
287
- normalized.emitDiagnosticEvent(event);
288
- return;
289
- }
290
- safeInvoke(() => normalized.onDiagnosticEvent(buildDiagnosticEvent(getObserverContext(observer), event)));
291
- }
292
- export function normalizeObserver(observer, context = {}) {
293
- if (observer?.[NORMALIZED_OBSERVER] === true) {
294
- return observer;
295
- }
296
- if (!hasAnyHandlers(observer))
297
- return NoopObserver;
298
- return new ObserverDispatcher(observer ?? {}, {
299
- attemptSeq: 1,
300
- attemptStartMs: nowMilliseconds(),
301
- ...getObserverContext(observer),
302
- ...context,
303
- });
304
- }
305
- export function nowSeconds() {
306
- return nowMilliseconds() / 1000;
307
- }
308
- function nowMilliseconds() {
309
- if (typeof performance !== "undefined" &&
310
- typeof performance.now === "function") {
311
- return performance.now();
312
- }
313
- return Date.now();
314
- }
@@ -1,37 +0,0 @@
1
- import type { YamuxStream } from "../yamux/stream.js";
2
- import type { ProxyRuntimeLimits } from "./runtime.js";
3
- import { type ServiceWorkerControllerGuardConflictPolicy, type ServiceWorkerControllerGuardMonitorOptions, type ServiceWorkerControllerGuardRepairOptions } from "./controllerGuard.js";
4
- export type RegisterProxyAppWindowOptions = Readonly<{
5
- controllerOrigin: string;
6
- controllerWindow?: Window | null;
7
- targetWindow?: Window;
8
- maxWsFrameBytes?: number;
9
- maxWsBufferedAmountBytes?: number;
10
- capabilityNonce?: string;
11
- }>;
12
- export type ProxyAppWindowHandle = Readonly<{
13
- runtime: Readonly<{
14
- limits: Partial<ProxyRuntimeLimits>;
15
- openWebSocketStream: (path: string, opts?: Readonly<{
16
- protocols?: readonly string[];
17
- signal?: AbortSignal;
18
- }>) => Promise<Readonly<{
19
- stream: YamuxStream;
20
- protocol: string;
21
- }>>;
22
- }>;
23
- dispose: () => void;
24
- }>;
25
- export type ProxyAppServiceWorkerControlOptions = Readonly<{
26
- scriptUrl: string;
27
- scope?: string;
28
- expectedScriptPathSuffix: string;
29
- repair?: ServiceWorkerControllerGuardRepairOptions;
30
- monitor?: ServiceWorkerControllerGuardMonitorOptions;
31
- conflicts?: ServiceWorkerControllerGuardConflictPolicy;
32
- }>;
33
- export type RegisterProxyAppWindowWithServiceWorkerControlOptions = RegisterProxyAppWindowOptions & Readonly<{
34
- serviceWorker: ProxyAppServiceWorkerControlOptions;
35
- }>;
36
- export declare function registerProxyAppWindow(opts: RegisterProxyAppWindowOptions): ProxyAppWindowHandle;
37
- export declare function registerProxyAppWindowWithServiceWorkerControl(opts: RegisterProxyAppWindowWithServiceWorkerControlOptions): Promise<ProxyAppWindowHandle>;