@floegence/flowersec-core 0.27.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.
- package/README.md +91 -22
- package/THIRD_PARTY_NOTICES.md +141 -0
- package/dist/browser/connectSession.d.ts +13 -0
- package/dist/browser/connectSession.js +40 -0
- package/dist/browser/index.d.ts +3 -10
- package/dist/browser/index.js +2 -5
- package/dist/browser/runtimeCapability.d.ts +13 -0
- package/dist/browser/runtimeCapability.js +27 -0
- package/dist/browser/sessionRuntime.d.ts +2 -0
- package/dist/browser/sessionRuntime.js +21 -0
- package/dist/browser/webTransportClient.d.ts +8 -0
- package/dist/browser/webTransportClient.js +55 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +126 -0
- package/dist/cliSpendMarker.d.ts +1 -0
- package/dist/cliSpendMarker.js +22 -0
- package/dist/connectionController.d.ts +54 -0
- package/dist/connectionController.js +438 -0
- package/dist/connector/adapters/webSocketCandidate.d.ts +7 -0
- package/dist/connector/adapters/webSocketCandidate.js +116 -0
- package/dist/connector/adapters/webTransportCandidate.d.ts +5 -0
- package/dist/connector/adapters/webTransportCandidate.js +73 -0
- package/dist/connector/admissionCommit.d.ts +31 -0
- package/dist/connector/admissionCommit.js +239 -0
- package/dist/connector/sessionAcceptor.d.ts +16 -0
- package/dist/connector/sessionAcceptor.js +114 -0
- package/dist/connector/sessionConfig.d.ts +3 -0
- package/dist/connector/sessionConfig.js +30 -0
- package/dist/connector/sessionConnector.d.ts +45 -0
- package/dist/connector/sessionConnector.js +603 -0
- package/dist/defaults.d.ts +7 -7
- package/dist/defaults.js +7 -7
- package/dist/facade.d.ts +12 -27
- package/dist/facade.js +6 -24
- package/dist/node/connectSession.d.ts +21 -0
- package/dist/node/connectSession.js +62 -0
- package/dist/node/index.d.ts +3 -11
- package/dist/node/index.js +2 -8
- package/dist/node/runtimeCapability.d.ts +7 -0
- package/dist/node/runtimeCapability.js +10 -0
- package/dist/node/sessionRuntime.d.ts +2 -0
- package/dist/node/sessionRuntime.js +13 -0
- package/dist/node/webTransportClient.d.ts +9 -0
- package/dist/node/webTransportClient.js +56 -0
- package/dist/node/webTransportServer.d.ts +22 -0
- package/dist/node/webTransportServer.js +100 -0
- package/dist/node/wsFactory.d.ts +3 -1
- package/dist/node/wsFactory.js +4 -3
- package/dist/proxy/controllerGuard.d.ts +4 -4
- package/dist/proxy/controllerGuard.js +83 -177
- package/dist/proxy/disableUpstreamServiceWorkerRegister.d.ts +3 -1
- package/dist/proxy/disableUpstreamServiceWorkerRegister.js +19 -17
- package/dist/proxy/index.d.ts +16 -15
- package/dist/proxy/index.js +8 -14
- package/dist/proxy/integration.d.ts +23 -71
- package/dist/proxy/integration.js +37 -340
- package/dist/proxy/registerServiceWorker.d.ts +1 -10
- package/dist/proxy/registerServiceWorker.js +43 -105
- package/dist/proxy/runtime.d.ts +3 -63
- package/dist/proxy/runtime.js +349 -462
- package/dist/proxy/scope.d.ts +6 -0
- package/dist/proxy/scope.js +131 -0
- package/dist/proxy/serviceWorker.d.ts +5 -16
- package/dist/proxy/serviceWorker.js +230 -617
- package/dist/proxy/stream.d.ts +9 -0
- package/dist/proxy/stream.js +40 -0
- package/dist/proxy/types.d.ts +78 -30
- package/dist/proxy/windowBridge.d.ts +61 -0
- package/dist/proxy/windowBridge.js +344 -0
- package/dist/proxy/wsPatch.d.ts +4 -14
- package/dist/proxy/wsPatch.js +173 -268
- package/dist/public/artifact.d.ts +11 -0
- package/dist/public/artifact.js +44 -0
- package/dist/public/artifactLease.d.ts +10 -0
- package/dist/public/artifactLease.js +48 -0
- package/dist/public/connectError.d.ts +6 -0
- package/dist/public/connectError.js +9 -0
- package/dist/public/contract.d.ts +83 -0
- package/dist/public/contract.js +17 -0
- package/dist/public/streamMetadata.d.ts +10 -0
- package/dist/public/streamMetadata.js +40 -0
- package/dist/rpc/caller.d.ts +1 -1
- package/dist/rpc/client.d.ts +1 -4
- package/dist/rpc/client.js +0 -21
- package/dist/rpc/rpcProxy.d.ts +1 -1
- package/dist/rpc/server.d.ts +1 -1
- package/dist/rpc/validate.d.ts +1 -1
- package/dist/rpc/wire.d.ts +15 -0
- package/dist/runtime/errors.d.ts +6 -0
- package/dist/runtime/errors.js +10 -0
- package/dist/transport/webSocketAdapter.d.ts +24 -0
- package/dist/transport/webSocketAdapter.js +234 -0
- package/dist/transport/webTransportAdapter.d.ts +27 -0
- package/dist/transport/webTransportAdapter.js +519 -0
- package/dist/utils/errors.d.ts +2 -20
- package/dist/utils/errors.js +73 -20
- package/dist/v2/admissionError.d.ts +4 -0
- package/dist/v2/admissionError.js +8 -0
- package/dist/v2/artifact.d.ts +128 -0
- package/dist/v2/artifact.js +1126 -0
- package/dist/v2/artifactLease.d.ts +1 -0
- package/dist/v2/artifactLease.js +7 -0
- package/dist/v2/capability.d.ts +29 -0
- package/dist/v2/capability.js +190 -0
- package/dist/v2/carrier.d.ts +79 -0
- package/dist/v2/carrier.js +405 -0
- package/dist/v2/contract.d.ts +37 -0
- package/dist/v2/contract.js +1 -0
- package/dist/v2/handshake.d.ts +80 -0
- package/dist/v2/handshake.js +470 -0
- package/dist/v2/opaqueArtifact.d.ts +1 -0
- package/dist/v2/opaqueArtifact.js +2 -0
- package/dist/v2/protocol.d.ts +99 -0
- package/dist/v2/protocol.js +739 -0
- package/dist/v2/publicSession.d.ts +1 -0
- package/dist/v2/publicSession.js +179 -0
- package/dist/v2/retryDisposition.d.ts +16 -0
- package/dist/v2/retryDisposition.js +30 -0
- package/dist/v2/session.d.ts +277 -0
- package/dist/v2/session.js +1879 -0
- package/dist/v2/streamLifetimeLedger.d.ts +31 -0
- package/dist/v2/streamLifetimeLedger.js +131 -0
- package/dist/v2/streamMetadata.d.ts +1 -0
- package/dist/v2/streamMetadata.js +7 -0
- package/dist/v2/unreliableMessage.d.ts +43 -0
- package/dist/v2/unreliableMessage.js +252 -0
- package/dist/vendor/tr46.d.ts +10 -0
- package/dist/vendor/tr46.js +501 -0
- package/dist/ws-client/binaryTransport.d.ts +0 -3
- package/dist/ws-client/binaryTransport.js +15 -39
- package/dist/yamux/errors.d.ts +0 -4
- package/dist/yamux/errors.js +0 -9
- package/dist/yamux/session.d.ts +0 -5
- package/dist/yamux/session.js +4 -70
- package/dist/yamux/stream.d.ts +1 -0
- package/dist/yamux/stream.js +4 -0
- package/package.json +29 -81
- package/sbom/cyclonedx.json +2764 -0
- package/sbom/spdx.json +1947 -0
- package/YAMUX_ALIGNMENT.md +0 -127
- package/dist/_examples/flowersec/demo/v1.facade.gen.d.ts +0 -12
- package/dist/_examples/flowersec/demo/v1.facade.gen.js +0 -15
- package/dist/_examples/flowersec/demo/v1.gen.d.ts +0 -16
- package/dist/_examples/flowersec/demo/v1.gen.js +0 -86
- package/dist/_examples/flowersec/demo/v1.rpc.gen.d.ts +0 -11
- package/dist/_examples/flowersec/demo/v1.rpc.gen.js +0 -22
- package/dist/browser/connect.d.ts +0 -13
- package/dist/browser/connect.js +0 -31
- package/dist/browser/reconnectConfig.d.ts +0 -15
- package/dist/browser/reconnectConfig.js +0 -20
- package/dist/client-connect/common.d.ts +0 -26
- package/dist/client-connect/common.js +0 -167
- package/dist/client-connect/connectCore.d.ts +0 -61
- package/dist/client-connect/connectCore.js +0 -572
- package/dist/client-connect/contract.d.ts +0 -8
- package/dist/client-connect/contract.js +0 -51
- package/dist/client-connect/termination.d.ts +0 -6
- package/dist/client-connect/termination.js +0 -7
- package/dist/client-connect/transportSecurity.d.ts +0 -27
- package/dist/client-connect/transportSecurity.js +0 -199
- package/dist/client-connect/tunnelAttachCloseReason.d.ts +0 -3
- package/dist/client-connect/tunnelAttachCloseReason.js +0 -23
- package/dist/client.d.ts +0 -23
- package/dist/connect/artifact.d.ts +0 -36
- package/dist/connect/artifact.js +0 -213
- package/dist/connect/resolveArtifact.d.ts +0 -22
- package/dist/connect/resolveArtifact.js +0 -87
- package/dist/controlplane/channelInit.d.ts +0 -27
- package/dist/controlplane/channelInit.js +0 -116
- package/dist/controlplane/http.d.ts +0 -16
- package/dist/controlplane/http.js +0 -59
- package/dist/controlplane/index.d.ts +0 -6
- package/dist/controlplane/index.js +0 -5
- package/dist/controlplane/issuer.d.ts +0 -18
- package/dist/controlplane/issuer.js +0 -113
- package/dist/controlplane/request.d.ts +0 -51
- package/dist/controlplane/request.js +0 -273
- package/dist/controlplane/token.d.ts +0 -33
- package/dist/controlplane/token.js +0 -119
- package/dist/direct-client/connect.d.ts +0 -9
- package/dist/direct-client/connect.js +0 -90
- package/dist/direct-client/index.d.ts +0 -1
- package/dist/direct-client/index.js +0 -1
- package/dist/e2ee/constants.d.ts +0 -9
- package/dist/e2ee/constants.js +0 -18
- package/dist/e2ee/errors.d.ts +0 -5
- package/dist/e2ee/errors.js +0 -8
- package/dist/e2ee/framing.d.ts +0 -12
- package/dist/e2ee/framing.js +0 -57
- package/dist/e2ee/handshake.d.ts +0 -88
- package/dist/e2ee/handshake.js +0 -353
- package/dist/e2ee/index.d.ts +0 -7
- package/dist/e2ee/index.js +0 -7
- package/dist/e2ee/kdf.d.ts +0 -15
- package/dist/e2ee/kdf.js +0 -39
- package/dist/e2ee/record.d.ts +0 -11
- package/dist/e2ee/record.js +0 -80
- package/dist/e2ee/secureChannel.d.ts +0 -93
- package/dist/e2ee/secureChannel.js +0 -342
- package/dist/e2ee/transcript.d.ts +0 -23
- package/dist/e2ee/transcript.js +0 -31
- package/dist/endpoint/index.d.ts +0 -84
- package/dist/endpoint/index.js +0 -557
- package/dist/endpoint/node.d.ts +0 -9
- package/dist/endpoint/node.js +0 -51
- package/dist/gen/flowersec/controlplane/v1.gen.d.ts +0 -36
- package/dist/gen/flowersec/controlplane/v1.gen.js +0 -135
- package/dist/gen/flowersec/direct/v1.gen.d.ts +0 -21
- package/dist/gen/flowersec/direct/v1.gen.js +0 -101
- package/dist/gen/flowersec/e2ee/v1.gen.d.ts +0 -68
- package/dist/gen/flowersec/e2ee/v1.gen.js +0 -194
- package/dist/gen/flowersec/rpc/v1.gen.d.ts +0 -30
- package/dist/gen/flowersec/rpc/v1.gen.js +0 -107
- package/dist/gen/flowersec/tunnel/v1.gen.d.ts +0 -23
- package/dist/gen/flowersec/tunnel/v1.gen.js +0 -104
- package/dist/index.d.ts +0 -22
- package/dist/index.js +0 -22
- package/dist/node/connect.d.ts +0 -10
- package/dist/node/connect.js +0 -29
- package/dist/node/reconnectConfig.d.ts +0 -16
- package/dist/node/reconnectConfig.js +0 -20
- package/dist/observability/index.d.ts +0 -1
- package/dist/observability/index.js +0 -1
- package/dist/observability/observer.d.ts +0 -52
- package/dist/observability/observer.js +0 -314
- package/dist/proxy/appWindow.d.ts +0 -37
- package/dist/proxy/appWindow.js +0 -273
- package/dist/proxy/bootstrap.d.ts +0 -35
- package/dist/proxy/bootstrap.js +0 -119
- package/dist/proxy/constants.d.ts +0 -7
- package/dist/proxy/constants.js +0 -8
- package/dist/proxy/controllerWindow.d.ts +0 -12
- package/dist/proxy/controllerWindow.js +0 -384
- package/dist/proxy/cookieJar.d.ts +0 -7
- package/dist/proxy/cookieJar.js +0 -136
- package/dist/proxy/headerPolicy.d.ts +0 -14
- package/dist/proxy/headerPolicy.js +0 -134
- package/dist/proxy/portStream.d.ts +0 -5
- package/dist/proxy/portStream.js +0 -256
- package/dist/proxy/preset.d.ts +0 -29
- package/dist/proxy/preset.js +0 -111
- package/dist/proxy/runtimeScope.d.ts +0 -57
- package/dist/proxy/runtimeScope.js +0 -218
- package/dist/proxy/server.d.ts +0 -28
- package/dist/proxy/server.js +0 -833
- package/dist/proxy/windowBridgeProtocol.d.ts +0 -65
- package/dist/proxy/windowBridgeProtocol.js +0 -11
- package/dist/reconnect/artifactControlplane.d.ts +0 -16
- package/dist/reconnect/artifactControlplane.js +0 -35
- package/dist/reconnect/index.d.ts +0 -36
- package/dist/reconnect/index.js +0 -388
- package/dist/rpc-proxy/index.d.ts +0 -1
- package/dist/rpc-proxy/index.js +0 -1
- package/dist/rpc-proxy/rpcProxy.d.ts +0 -1
- package/dist/rpc-proxy/rpcProxy.js +0 -1
- package/dist/streamhello/index.d.ts +0 -1
- package/dist/streamhello/index.js +0 -1
- package/dist/streamhello/streamHello.d.ts +0 -3
- package/dist/streamhello/streamHello.js +0 -13
- package/dist/streamio/index.d.ts +0 -32
- package/dist/streamio/index.js +0 -87
- package/dist/tunnel-client/connect.d.ts +0 -9
- package/dist/tunnel-client/connect.js +0 -147
- package/dist/tunnel-client/index.d.ts +0 -1
- package/dist/tunnel-client/index.js +0 -1
- package/dist/ws/index.d.ts +0 -1
- package/dist/ws/index.js +0 -1
- /package/dist/{client.js → rpc/wire.js} +0 -0
package/dist/proxy/appWindow.js
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { createServiceWorkerControllerGuard, } from "./controllerGuard.js";
|
|
2
|
-
import { createMessagePortBackedStream } from "./portStream.js";
|
|
3
|
-
import { PROXY_WINDOW_FETCH_FORWARD_MSG_TYPE, PROXY_WINDOW_FETCH_MSG_TYPE, PROXY_WINDOW_STREAM_RESET_MSG_TYPE, PROXY_WINDOW_WS_ERROR_MSG_TYPE, PROXY_WINDOW_WS_BIDIRECTIONAL_ACK_CAPABILITY, PROXY_WINDOW_WS_OPEN_ACK_MSG_TYPE, PROXY_WINDOW_WS_OPEN_MSG_TYPE, } from "./windowBridgeProtocol.js";
|
|
4
|
-
function resolveTargetWindow(raw) {
|
|
5
|
-
const target = raw ?? globalThis.window;
|
|
6
|
-
if (target == null)
|
|
7
|
-
throw new Error("targetWindow is not available");
|
|
8
|
-
return target;
|
|
9
|
-
}
|
|
10
|
-
function resolveControllerWindow(targetWindow, raw) {
|
|
11
|
-
if (raw != null)
|
|
12
|
-
return raw;
|
|
13
|
-
try {
|
|
14
|
-
if (targetWindow.top && targetWindow.top !== targetWindow)
|
|
15
|
-
return targetWindow.top;
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
// ignore
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
if (targetWindow.parent && targetWindow.parent !== targetWindow)
|
|
22
|
-
return targetWindow.parent;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
// ignore
|
|
26
|
-
}
|
|
27
|
-
throw new Error("controllerWindow is not available");
|
|
28
|
-
}
|
|
29
|
-
function postFetchError(port, message) {
|
|
30
|
-
try {
|
|
31
|
-
port.postMessage({ type: "flowersec-proxy:response_error", status: 502, message });
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
// Best-effort.
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
port.close();
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
// Best-effort.
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function normalizeCapabilityNonce(value) {
|
|
44
|
-
if (value == null)
|
|
45
|
-
return "";
|
|
46
|
-
const s = String(value);
|
|
47
|
-
if (s === "")
|
|
48
|
-
return "";
|
|
49
|
-
if (s.trim() !== s || /[\s\u0000-\u001f\u007f]/.test(s)) {
|
|
50
|
-
throw new Error("capabilityNonce must not contain whitespace or control characters");
|
|
51
|
-
}
|
|
52
|
-
return s;
|
|
53
|
-
}
|
|
54
|
-
export function registerProxyAppWindow(opts) {
|
|
55
|
-
const controllerOrigin = String(opts.controllerOrigin ?? "").trim();
|
|
56
|
-
if (controllerOrigin === "") {
|
|
57
|
-
throw new Error("controllerOrigin is required");
|
|
58
|
-
}
|
|
59
|
-
const targetWindow = resolveTargetWindow(opts.targetWindow);
|
|
60
|
-
const controllerWindow = resolveControllerWindow(targetWindow, opts.controllerWindow);
|
|
61
|
-
const capabilityNonce = normalizeCapabilityNonce(opts.capabilityNonce);
|
|
62
|
-
const activeWebSocketBridges = new Set();
|
|
63
|
-
let disposed = false;
|
|
64
|
-
const sw = targetWindow.navigator?.serviceWorker;
|
|
65
|
-
const onServiceWorkerMessage = (ev) => {
|
|
66
|
-
const data = ev.data;
|
|
67
|
-
if (data == null || typeof data !== "object")
|
|
68
|
-
return;
|
|
69
|
-
if (data.type !== PROXY_WINDOW_FETCH_FORWARD_MSG_TYPE)
|
|
70
|
-
return;
|
|
71
|
-
const port = ev.ports?.[0];
|
|
72
|
-
if (!port)
|
|
73
|
-
return;
|
|
74
|
-
try {
|
|
75
|
-
controllerWindow.postMessage({
|
|
76
|
-
type: PROXY_WINDOW_FETCH_MSG_TYPE,
|
|
77
|
-
req: data.req,
|
|
78
|
-
...(capabilityNonce === "" ? {} : { capabilityNonce }),
|
|
79
|
-
}, controllerOrigin, [port]);
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
83
|
-
postFetchError(port, message);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
sw?.addEventListener("message", onServiceWorkerMessage);
|
|
87
|
-
const runtime = {
|
|
88
|
-
limits: {
|
|
89
|
-
...(opts.maxWsFrameBytes === undefined ? {} : { maxWsFrameBytes: opts.maxWsFrameBytes }),
|
|
90
|
-
...(opts.maxWsBufferedAmountBytes === undefined
|
|
91
|
-
? {}
|
|
92
|
-
: { maxWsBufferedAmountBytes: opts.maxWsBufferedAmountBytes }),
|
|
93
|
-
},
|
|
94
|
-
openWebSocketStream: async (path, wsOpts = {}) => {
|
|
95
|
-
if (disposed)
|
|
96
|
-
throw new Error("proxy app Window bridge is disposed");
|
|
97
|
-
const channel = new MessageChannel();
|
|
98
|
-
const port = channel.port1;
|
|
99
|
-
port.start?.();
|
|
100
|
-
return await new Promise((resolve, reject) => {
|
|
101
|
-
let settled = false;
|
|
102
|
-
let terminal = false;
|
|
103
|
-
let stream = null;
|
|
104
|
-
const cleanup = () => {
|
|
105
|
-
activeWebSocketBridges.delete(bridge);
|
|
106
|
-
if (wsOpts.signal != null)
|
|
107
|
-
wsOpts.signal.removeEventListener("abort", onAbort);
|
|
108
|
-
};
|
|
109
|
-
const finishTerminal = () => {
|
|
110
|
-
if (terminal)
|
|
111
|
-
return false;
|
|
112
|
-
terminal = true;
|
|
113
|
-
cleanup();
|
|
114
|
-
return true;
|
|
115
|
-
};
|
|
116
|
-
const finishReject = (error) => {
|
|
117
|
-
if (settled)
|
|
118
|
-
return;
|
|
119
|
-
settled = true;
|
|
120
|
-
finishTerminal();
|
|
121
|
-
try {
|
|
122
|
-
port.close();
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
// Best-effort.
|
|
126
|
-
}
|
|
127
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
128
|
-
};
|
|
129
|
-
const disposeBridge = (error) => {
|
|
130
|
-
if (!finishTerminal())
|
|
131
|
-
return;
|
|
132
|
-
if (stream != null) {
|
|
133
|
-
try {
|
|
134
|
-
void Promise.resolve(stream.reset(error)).catch(() => {
|
|
135
|
-
// The bridge is already terminal.
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
// The bridge is already terminal.
|
|
140
|
-
}
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
try {
|
|
144
|
-
port.postMessage({
|
|
145
|
-
type: PROXY_WINDOW_STREAM_RESET_MSG_TYPE,
|
|
146
|
-
message: error.message,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// Best-effort.
|
|
151
|
-
}
|
|
152
|
-
if (!settled) {
|
|
153
|
-
settled = true;
|
|
154
|
-
reject(error);
|
|
155
|
-
}
|
|
156
|
-
try {
|
|
157
|
-
port.close();
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// Best-effort.
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
const bridge = { dispose: disposeBridge };
|
|
164
|
-
const onAbort = () => {
|
|
165
|
-
const reason = wsOpts.signal?.reason;
|
|
166
|
-
disposeBridge(reason instanceof Error ? reason : new Error(String(reason ?? "aborted")));
|
|
167
|
-
};
|
|
168
|
-
activeWebSocketBridges.add(bridge);
|
|
169
|
-
const finishResolve = (ack) => {
|
|
170
|
-
if (settled || terminal)
|
|
171
|
-
return;
|
|
172
|
-
const capabilities = Array.isArray(ack.capabilities)
|
|
173
|
-
? ack.capabilities.filter((value) => typeof value === "string")
|
|
174
|
-
: [];
|
|
175
|
-
if (!capabilities.includes(PROXY_WINDOW_WS_BIDIRECTIONAL_ACK_CAPABILITY)) {
|
|
176
|
-
try {
|
|
177
|
-
port.postMessage({
|
|
178
|
-
type: PROXY_WINDOW_STREAM_RESET_MSG_TYPE,
|
|
179
|
-
message: "proxy Window bridge capability mismatch",
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
// The capability error remains authoritative.
|
|
184
|
-
}
|
|
185
|
-
finishReject(new Error("proxy Window bridge does not support bidirectional stream acknowledgements"));
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
if (disposed) {
|
|
189
|
-
disposeBridge(new Error("proxy app Window bridge is disposed"));
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
settled = true;
|
|
193
|
-
stream = createMessagePortBackedStream(port, {
|
|
194
|
-
maxBufferedBytes: opts.maxWsBufferedAmountBytes ?? 4 * (1 << 20),
|
|
195
|
-
onTerminal: finishTerminal,
|
|
196
|
-
});
|
|
197
|
-
resolve({
|
|
198
|
-
stream,
|
|
199
|
-
protocol: String(ack.protocol ?? ""),
|
|
200
|
-
});
|
|
201
|
-
};
|
|
202
|
-
port.onmessage = (ev) => {
|
|
203
|
-
const data = ev.data;
|
|
204
|
-
if (data == null || typeof data !== "object")
|
|
205
|
-
return;
|
|
206
|
-
const type = typeof data.type === "string" ? data.type : "";
|
|
207
|
-
if (type === PROXY_WINDOW_WS_OPEN_ACK_MSG_TYPE) {
|
|
208
|
-
finishResolve(data);
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
if (type === PROXY_WINDOW_WS_ERROR_MSG_TYPE) {
|
|
212
|
-
finishReject(new Error(String(data.message ?? "upstream ws open failed")));
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
if (wsOpts.signal != null) {
|
|
216
|
-
if (wsOpts.signal.aborted) {
|
|
217
|
-
onAbort();
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
wsOpts.signal.addEventListener("abort", onAbort, { once: true });
|
|
221
|
-
}
|
|
222
|
-
try {
|
|
223
|
-
controllerWindow.postMessage({
|
|
224
|
-
type: PROXY_WINDOW_WS_OPEN_MSG_TYPE,
|
|
225
|
-
path,
|
|
226
|
-
capabilities: [PROXY_WINDOW_WS_BIDIRECTIONAL_ACK_CAPABILITY],
|
|
227
|
-
...(wsOpts.protocols === undefined ? {} : { protocols: wsOpts.protocols }),
|
|
228
|
-
...(capabilityNonce === "" ? {} : { capabilityNonce }),
|
|
229
|
-
}, controllerOrigin, [channel.port2]);
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
finishReject(error);
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
},
|
|
236
|
-
};
|
|
237
|
-
return {
|
|
238
|
-
runtime,
|
|
239
|
-
dispose: () => {
|
|
240
|
-
if (disposed)
|
|
241
|
-
return;
|
|
242
|
-
disposed = true;
|
|
243
|
-
sw?.removeEventListener("message", onServiceWorkerMessage);
|
|
244
|
-
const error = new Error("proxy app Window bridge is disposed");
|
|
245
|
-
for (const bridge of [...activeWebSocketBridges])
|
|
246
|
-
bridge.dispose(error);
|
|
247
|
-
},
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
export async function registerProxyAppWindowWithServiceWorkerControl(opts) {
|
|
251
|
-
const targetWindow = resolveTargetWindow(opts.targetWindow);
|
|
252
|
-
const sw = targetWindow.navigator?.serviceWorker;
|
|
253
|
-
if (sw == null || typeof sw.register !== "function") {
|
|
254
|
-
throw new Error("serviceWorker is not available");
|
|
255
|
-
}
|
|
256
|
-
await sw.register(opts.serviceWorker.scriptUrl, {
|
|
257
|
-
...(opts.serviceWorker.scope === undefined ? {} : { scope: opts.serviceWorker.scope }),
|
|
258
|
-
});
|
|
259
|
-
const guard = createServiceWorkerControllerGuard({
|
|
260
|
-
targetWindow,
|
|
261
|
-
expectedScriptPathSuffix: opts.serviceWorker.expectedScriptPathSuffix,
|
|
262
|
-
...(opts.serviceWorker.repair === undefined ? {} : { repair: opts.serviceWorker.repair }),
|
|
263
|
-
...(opts.serviceWorker.monitor === undefined ? {} : { monitor: opts.serviceWorker.monitor }),
|
|
264
|
-
...(opts.serviceWorker.conflicts === undefined ? {} : { conflicts: opts.serviceWorker.conflicts }),
|
|
265
|
-
});
|
|
266
|
-
try {
|
|
267
|
-
await guard.ensure();
|
|
268
|
-
}
|
|
269
|
-
finally {
|
|
270
|
-
guard.dispose();
|
|
271
|
-
}
|
|
272
|
-
return registerProxyAppWindow(opts);
|
|
273
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { Client } from "../client.js";
|
|
2
|
-
import type { ConnectArtifact } from "../connect/artifact.js";
|
|
3
|
-
import type { ConnectBrowserOptions } from "../browser/connect.js";
|
|
4
|
-
import { type ProxyIntegrationPlugin, type RegisterProxyIntegrationOptions, type ProxyIntegrationServiceWorkerOptions } from "./integration.js";
|
|
5
|
-
import { type RegisterProxyControllerWindowOptions } from "./controllerWindow.js";
|
|
6
|
-
import type { ProxyPresetInput } from "./preset.js";
|
|
7
|
-
import { type ProxyRuntime } from "./runtime.js";
|
|
8
|
-
export type ConnectArtifactProxyBrowserHandle = Readonly<{
|
|
9
|
-
client: Client;
|
|
10
|
-
runtime: ProxyRuntime;
|
|
11
|
-
dispose: () => Promise<void>;
|
|
12
|
-
}>;
|
|
13
|
-
export type ConnectArtifactProxyBrowserOptions = Readonly<{
|
|
14
|
-
connect?: ConnectBrowserOptions;
|
|
15
|
-
preset?: ProxyPresetInput;
|
|
16
|
-
runtimeGlobalKey?: string;
|
|
17
|
-
runtime?: RegisterProxyIntegrationOptions["runtime"];
|
|
18
|
-
serviceWorker?: ProxyIntegrationServiceWorkerOptions;
|
|
19
|
-
plugins?: readonly ProxyIntegrationPlugin[];
|
|
20
|
-
}>;
|
|
21
|
-
export type ConnectArtifactProxyControllerBrowserHandle = Readonly<{
|
|
22
|
-
client: Client;
|
|
23
|
-
runtime: ProxyRuntime;
|
|
24
|
-
dispose: () => void;
|
|
25
|
-
}>;
|
|
26
|
-
export type ConnectArtifactProxyControllerBrowserOptions = Readonly<{
|
|
27
|
-
connect?: ConnectBrowserOptions;
|
|
28
|
-
runtime?: RegisterProxyIntegrationOptions["runtime"];
|
|
29
|
-
allowedOrigins?: RegisterProxyControllerWindowOptions["allowedOrigins"];
|
|
30
|
-
targetWindow?: RegisterProxyControllerWindowOptions["targetWindow"];
|
|
31
|
-
expectedSource?: RegisterProxyControllerWindowOptions["expectedSource"];
|
|
32
|
-
capabilityNonce?: RegisterProxyControllerWindowOptions["capabilityNonce"];
|
|
33
|
-
}>;
|
|
34
|
-
export declare function connectArtifactProxyBrowser(artifact: ConnectArtifact, opts?: ConnectArtifactProxyBrowserOptions): Promise<ConnectArtifactProxyBrowserHandle>;
|
|
35
|
-
export declare function connectArtifactProxyControllerBrowser(artifact: ConnectArtifact, opts?: ConnectArtifactProxyControllerBrowserOptions): Promise<ConnectArtifactProxyControllerBrowserHandle>;
|
package/dist/proxy/bootstrap.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { connectBrowser } from "../browser/connect.js";
|
|
2
|
-
import { registerProxyIntegration, } from "./integration.js";
|
|
3
|
-
import { registerProxyControllerWindow } from "./controllerWindow.js";
|
|
4
|
-
import { extractProxyRuntimeScopeV1, resolvePresetInputFromScope, resolveRuntimeLimitsFromScope, resolveRuntimePresetLimits, } from "./runtimeScope.js";
|
|
5
|
-
import { createProxyRuntime } from "./runtime.js";
|
|
6
|
-
function scopeRuntimeToIntegrationOptions(scope, opts) {
|
|
7
|
-
const runtimeLimits = resolveRuntimeLimitsFromScope(scope, opts.runtime);
|
|
8
|
-
const presetFromScope = resolvePresetInputFromScope(scope, opts.preset);
|
|
9
|
-
const presetFromLimits = presetFromScope ?? resolveRuntimePresetLimits(scope);
|
|
10
|
-
const serviceWorker = opts.serviceWorker ?? (scope.mode === "service_worker" ? {
|
|
11
|
-
scriptUrl: scope.serviceWorker.scriptUrl,
|
|
12
|
-
scope: scope.serviceWorker.scope,
|
|
13
|
-
} : undefined);
|
|
14
|
-
if (!serviceWorker) {
|
|
15
|
-
throw new Error("service worker config is required for proxy runtime mode");
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
...(presetFromLimits === undefined ? {} : { preset: presetFromLimits }),
|
|
19
|
-
...(opts.runtimeGlobalKey === undefined ? {} : { runtimeGlobalKey: opts.runtimeGlobalKey }),
|
|
20
|
-
...(runtimeLimits === undefined ? {} : { runtime: runtimeLimits }),
|
|
21
|
-
serviceWorker,
|
|
22
|
-
...(opts.plugins === undefined ? {} : { plugins: opts.plugins }),
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
async function connectProxyBrowserClient(client, opts) {
|
|
26
|
-
const integrationInput = {
|
|
27
|
-
client,
|
|
28
|
-
serviceWorker: opts.serviceWorker,
|
|
29
|
-
...(opts.preset === undefined ? {} : { preset: opts.preset }),
|
|
30
|
-
...(opts.runtimeGlobalKey === undefined ? {} : { runtimeGlobalKey: opts.runtimeGlobalKey }),
|
|
31
|
-
...(opts.runtime === undefined ? {} : { runtime: opts.runtime }),
|
|
32
|
-
...(opts.plugins === undefined ? {} : { plugins: opts.plugins }),
|
|
33
|
-
};
|
|
34
|
-
let registered = false;
|
|
35
|
-
let integration = null;
|
|
36
|
-
try {
|
|
37
|
-
integration = await registerProxyIntegration(integrationInput);
|
|
38
|
-
registered = true;
|
|
39
|
-
}
|
|
40
|
-
finally {
|
|
41
|
-
if (!registered) {
|
|
42
|
-
client.close();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
client,
|
|
47
|
-
runtime: integration.runtime,
|
|
48
|
-
dispose: async () => {
|
|
49
|
-
let firstError = null;
|
|
50
|
-
try {
|
|
51
|
-
await integration.dispose();
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
firstError = error;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
client.close();
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
if (firstError == null)
|
|
61
|
-
firstError = error;
|
|
62
|
-
}
|
|
63
|
-
if (firstError != null)
|
|
64
|
-
throw firstError;
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function connectProxyControllerClient(client, opts) {
|
|
69
|
-
let runtime = null;
|
|
70
|
-
let controller = null;
|
|
71
|
-
try {
|
|
72
|
-
runtime = createProxyRuntime({
|
|
73
|
-
client,
|
|
74
|
-
...(opts.runtime ?? {}),
|
|
75
|
-
});
|
|
76
|
-
controller = registerProxyControllerWindow({
|
|
77
|
-
runtime,
|
|
78
|
-
allowedOrigins: opts.allowedOrigins,
|
|
79
|
-
...(opts.targetWindow === undefined ? {} : { targetWindow: opts.targetWindow }),
|
|
80
|
-
...(opts.expectedSource === undefined ? {} : { expectedSource: opts.expectedSource }),
|
|
81
|
-
...(opts.capabilityNonce === undefined ? {} : { capabilityNonce: opts.capabilityNonce }),
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
try {
|
|
86
|
-
client.close();
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
// Best effort cleanup.
|
|
90
|
-
}
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
client,
|
|
95
|
-
runtime,
|
|
96
|
-
dispose: () => {
|
|
97
|
-
controller?.dispose();
|
|
98
|
-
client.close();
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
export async function connectArtifactProxyBrowser(artifact, opts = {}) {
|
|
103
|
-
const scope = extractProxyRuntimeScopeV1(artifact, "service_worker");
|
|
104
|
-
const client = await connectBrowser(artifact, opts.connect ?? {});
|
|
105
|
-
const nextOpts = scopeRuntimeToIntegrationOptions(scope, opts);
|
|
106
|
-
return await connectProxyBrowserClient(client, nextOpts);
|
|
107
|
-
}
|
|
108
|
-
export async function connectArtifactProxyControllerBrowser(artifact, opts = {}) {
|
|
109
|
-
const scope = extractProxyRuntimeScopeV1(artifact, "controller_bridge");
|
|
110
|
-
const client = await connectBrowser(artifact, opts.connect ?? {});
|
|
111
|
-
const runtime = resolveRuntimeLimitsFromScope(scope, opts.runtime);
|
|
112
|
-
return connectProxyControllerClient(client, {
|
|
113
|
-
...(runtime === undefined ? {} : { runtime }),
|
|
114
|
-
allowedOrigins: opts.allowedOrigins ?? scope.controllerBridge.allowedOrigins,
|
|
115
|
-
...(opts.targetWindow === undefined ? {} : { targetWindow: opts.targetWindow }),
|
|
116
|
-
...(opts.expectedSource === undefined ? {} : { expectedSource: opts.expectedSource }),
|
|
117
|
-
...(opts.capabilityNonce === undefined ? {} : { capabilityNonce: opts.capabilityNonce }),
|
|
118
|
-
});
|
|
119
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const PROXY_PROTOCOL_VERSION: 1;
|
|
2
|
-
export declare const PROXY_KIND_HTTP1: "flowersec-proxy/http1";
|
|
3
|
-
export declare const PROXY_KIND_WS: "flowersec-proxy/ws";
|
|
4
|
-
export declare const DEFAULT_MAX_CHUNK_BYTES: number;
|
|
5
|
-
export declare const DEFAULT_MAX_BODY_BYTES: number;
|
|
6
|
-
export declare const DEFAULT_MAX_WS_FRAME_BYTES: number;
|
|
7
|
-
export declare const DEFAULT_MAX_CONCURRENT_STREAMS: 64;
|
package/dist/proxy/constants.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { SDK_DEFAULTS } from "../defaults.js";
|
|
2
|
-
export const PROXY_PROTOCOL_VERSION = 1;
|
|
3
|
-
export const PROXY_KIND_HTTP1 = "flowersec-proxy/http1";
|
|
4
|
-
export const PROXY_KIND_WS = "flowersec-proxy/ws";
|
|
5
|
-
export const DEFAULT_MAX_CHUNK_BYTES = SDK_DEFAULTS.proxy.maxChunkBytes;
|
|
6
|
-
export const DEFAULT_MAX_BODY_BYTES = SDK_DEFAULTS.proxy.maxBodyBytes;
|
|
7
|
-
export const DEFAULT_MAX_WS_FRAME_BYTES = SDK_DEFAULTS.proxy.maxWsFrameBytes;
|
|
8
|
-
export const DEFAULT_MAX_CONCURRENT_STREAMS = SDK_DEFAULTS.proxy.maxConcurrentStreams;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ProxyRuntime } from "./runtime.js";
|
|
2
|
-
export type RegisterProxyControllerWindowOptions = Readonly<{
|
|
3
|
-
runtime: ProxyRuntime;
|
|
4
|
-
allowedOrigins: readonly string[];
|
|
5
|
-
targetWindow?: Window;
|
|
6
|
-
expectedSource?: Window | null;
|
|
7
|
-
capabilityNonce?: string;
|
|
8
|
-
}>;
|
|
9
|
-
export type ProxyControllerWindowHandle = Readonly<{
|
|
10
|
-
dispose: () => void;
|
|
11
|
-
}>;
|
|
12
|
-
export declare function registerProxyControllerWindow(opts: RegisterProxyControllerWindowOptions): ProxyControllerWindowHandle;
|