@braidlabs/gateway 0.1.1
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 +464 -0
- package/package.json +44 -0
- package/src/appd.d.ts +130 -0
- package/src/appd.js +93 -0
- package/src/appd.js.map +1 -0
- package/src/breaker.d.ts +51 -0
- package/src/breaker.js +96 -0
- package/src/breaker.js.map +1 -0
- package/src/discovery.d.ts +91 -0
- package/src/discovery.js +127 -0
- package/src/discovery.js.map +1 -0
- package/src/gateway.d.ts +241 -0
- package/src/gateway.js +735 -0
- package/src/gateway.js.map +1 -0
- package/src/index.d.ts +36 -0
- package/src/index.js +27 -0
- package/src/index.js.map +1 -0
- package/src/node.d.ts +35 -0
- package/src/node.js +252 -0
- package/src/node.js.map +1 -0
- package/src/protocol.d.ts +79 -0
- package/src/protocol.js +89 -0
- package/src/protocol.js.map +1 -0
- package/src/registry.d.ts +184 -0
- package/src/registry.js +187 -0
- package/src/registry.js.map +1 -0
- package/src/rewriter/html-rewrite-stream.d.ts +70 -0
- package/src/rewriter/html-rewrite-stream.js +483 -0
- package/src/rewriter/html-rewrite-stream.js.map +1 -0
- package/src/rewriter/transforms.d.ts +107 -0
- package/src/rewriter/transforms.js +312 -0
- package/src/rewriter/transforms.js.map +1 -0
- package/src/single-flight.d.ts +53 -0
- package/src/single-flight.js +97 -0
- package/src/single-flight.js.map +1 -0
- package/src/telemetry.d.ts +115 -0
- package/src/telemetry.js +177 -0
- package/src/telemetry.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../../libs/braid-gateway/src/gateway.ts"],"names":[],"mappings":"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"}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @braidlabs/gateway — the Braid gateway: fetch-native origin-front middleware.
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { createGateway, toWebMiddleware } from '@braidlabs/gateway';
|
|
6
|
+
*
|
|
7
|
+
* const gateway = createGateway({
|
|
8
|
+
* registry: [{ id: 'legacy-billing', endpoint: 'https://billing.internal' }],
|
|
9
|
+
* // adapter defaults to 'compat' — zero fragment code required
|
|
10
|
+
* });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Node/Connect binding: `import { toNodeMiddleware } from '@braidlabs/gateway/node'`.
|
|
14
|
+
*/
|
|
15
|
+
export { createGateway, toWebMiddleware, toFetchHandler } from './gateway.js';
|
|
16
|
+
export type { BraidGateway, GatewayOptions, RoutingEvent, ServiceWorkerOptions } from './gateway.js';
|
|
17
|
+
export { rateVital, parseVitalsBeacon, vitalsCollectorScript } from './telemetry.js';
|
|
18
|
+
export { createBreaker, DEFAULT_BREAKER } from './breaker.js';
|
|
19
|
+
export { createSingleFlight, singleFlightKey } from './single-flight.js';
|
|
20
|
+
export type { SingleFlight } from './single-flight.js';
|
|
21
|
+
export type { Breaker, BreakerOptions, BreakerState, BreakerTransition } from './breaker.js';
|
|
22
|
+
export type { TelemetryOptions, TelemetryEvent, FragmentFetchEvent, WebVitalEvent, WebVitalName, BreakerEvent, } from './telemetry.js';
|
|
23
|
+
export { DEFAULT_ADAPTER, DEFAULT_TIMEOUT_MS, normalizeManifest, Registry, } from './registry.js';
|
|
24
|
+
export type { FragmentManifest, ResolvedFragmentManifest, FragmentFallback, FragmentAccess, AccessRule, Principal, RegistrySource, } from './registry.js';
|
|
25
|
+
export { satisfies, canList, canFetch } from './registry.js';
|
|
26
|
+
export { DEFAULT_DISCOVERY_PATH, DEFAULT_DISCOVERY_PAGE_SIZE } from './discovery.js';
|
|
27
|
+
export type { DiscoveryOptions, DiscoveryEntry, DiscoveryPage } from './discovery.js';
|
|
28
|
+
export { toAppdApplication } from './appd.js';
|
|
29
|
+
export type { AppdApplication, AppdListResponse, AppdAppResponse, FragmentFdc3Metadata, FragmentAppdMetadata, } from './appd.js';
|
|
30
|
+
export { BRAID_FRAGMENT_PREFIX, BRAID_REALM_PREFIX, BRAID_DOCUMENT_PREFIX, BRAID_PROTOCOL_VERSION, BRAID_SERVICE_WORKER_PATH, parseBraidPathname, } from './protocol.js';
|
|
31
|
+
export type { BraidRoute, BraidRouteKind } from './protocol.js';
|
|
32
|
+
export { rewriteHtmlStream, concatStreams } from './rewriter/html-rewrite-stream.js';
|
|
33
|
+
export type { RewriteOptions, ElementHandler, StartTag, EndTag, Injection } from './rewriter/html-rewrite-stream.js';
|
|
34
|
+
export { prepareFragmentHtml, pierceShellHtml, BRAID_FRAGMENT_STYLES, BRAID_SHELL_STYLES, } from './rewriter/transforms.js';
|
|
35
|
+
export { cspNonceOf, withNonce } from './rewriter/transforms.js';
|
|
36
|
+
export type { PierceOptions, PierceTarget } from './rewriter/transforms.js';
|
package/src/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @braidlabs/gateway — the Braid gateway: fetch-native origin-front middleware.
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { createGateway, toWebMiddleware } from '@braidlabs/gateway';
|
|
6
|
+
*
|
|
7
|
+
* const gateway = createGateway({
|
|
8
|
+
* registry: [{ id: 'legacy-billing', endpoint: 'https://billing.internal' }],
|
|
9
|
+
* // adapter defaults to 'compat' — zero fragment code required
|
|
10
|
+
* });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Node/Connect binding: `import { toNodeMiddleware } from '@braidlabs/gateway/node'`.
|
|
14
|
+
*/
|
|
15
|
+
export { createGateway, toWebMiddleware, toFetchHandler } from './gateway.js';
|
|
16
|
+
export { rateVital, parseVitalsBeacon, vitalsCollectorScript } from './telemetry.js';
|
|
17
|
+
export { createBreaker, DEFAULT_BREAKER } from './breaker.js';
|
|
18
|
+
export { createSingleFlight, singleFlightKey } from './single-flight.js';
|
|
19
|
+
export { DEFAULT_ADAPTER, DEFAULT_TIMEOUT_MS, normalizeManifest, Registry, } from './registry.js';
|
|
20
|
+
export { satisfies, canList, canFetch } from './registry.js';
|
|
21
|
+
export { DEFAULT_DISCOVERY_PATH, DEFAULT_DISCOVERY_PAGE_SIZE } from './discovery.js';
|
|
22
|
+
export { toAppdApplication } from './appd.js';
|
|
23
|
+
export { BRAID_FRAGMENT_PREFIX, BRAID_REALM_PREFIX, BRAID_DOCUMENT_PREFIX, BRAID_PROTOCOL_VERSION, BRAID_SERVICE_WORKER_PATH, parseBraidPathname, } from './protocol.js';
|
|
24
|
+
export { rewriteHtmlStream, concatStreams } from './rewriter/html-rewrite-stream.js';
|
|
25
|
+
export { prepareFragmentHtml, pierceShellHtml, BRAID_FRAGMENT_STYLES, BRAID_SHELL_STYLES, } from './rewriter/transforms.js';
|
|
26
|
+
export { cspNonceOf, withNonce } from './rewriter/transforms.js';
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/braid-gateway/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAWzE,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,GACT,MAAM,eAAe,CAAC;AAUvB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAQ9C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAErF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC"}
|
package/src/node.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type IncomingMessage, type ServerResponse } from 'node:http';
|
|
2
|
+
import type { Duplex } from 'node:stream';
|
|
3
|
+
import { BraidGateway } from './gateway.js';
|
|
4
|
+
/**
|
|
5
|
+
* Node/Connect binding for the gateway.
|
|
6
|
+
*
|
|
7
|
+
* Requests Braid doesn't own call the downstream `next()` untouched, so the binding composes
|
|
8
|
+
* with any Connect-compatible server (Express, the Vite and Angular dev servers, plain http).
|
|
9
|
+
*
|
|
10
|
+
* Piercing needs more than pass-through: the gateway must *read* the shell application's
|
|
11
|
+
* response in order to interleave fragments into it. Connect middleware has no return value to
|
|
12
|
+
* read, so the shell response is captured by temporarily intercepting the response object's
|
|
13
|
+
* write methods (see {@link captureDownstreamResponse}) while the downstream handler runs. The
|
|
14
|
+
* capture streams — it does not buffer the shell — so the shell's own streaming is preserved.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toNodeMiddleware(gateway: BraidGateway): (req: IncomingMessage, res: ServerResponse, next: (error?: unknown) => void) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Proxies websocket upgrades addressed to a fragment through to its endpoint.
|
|
19
|
+
*
|
|
20
|
+
* Mount it on the server's `upgrade` event, alongside {@link toNodeMiddleware}:
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* const server = createServer(app);
|
|
24
|
+
* server.on('upgrade', toNodeUpgradeHandler(gateway));
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* This is what keeps a fragment's dev-server live reload working when the fragment is reached
|
|
28
|
+
* through the gateway rather than directly — and what lets a fragment use websockets in
|
|
29
|
+
* production. Upgrades Braid does not own are left alone, so the shell's own dev socket still
|
|
30
|
+
* reaches whatever else is listening.
|
|
31
|
+
*
|
|
32
|
+
* @param next handles upgrades that are not fragment upgrades. Defaults to destroying the
|
|
33
|
+
* socket; pass your dev server's own upgrade handler to chain them.
|
|
34
|
+
*/
|
|
35
|
+
export declare function toNodeUpgradeHandler(gateway: BraidGateway, next?: (req: IncomingMessage, socket: Duplex, head: Buffer) => void): (req: IncomingMessage, socket: Duplex, head: Buffer) => void;
|
package/src/node.js
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import https from 'node:https';
|
|
3
|
+
import { Readable } from 'node:stream';
|
|
4
|
+
/**
|
|
5
|
+
* Node/Connect binding for the gateway.
|
|
6
|
+
*
|
|
7
|
+
* Requests Braid doesn't own call the downstream `next()` untouched, so the binding composes
|
|
8
|
+
* with any Connect-compatible server (Express, the Vite and Angular dev servers, plain http).
|
|
9
|
+
*
|
|
10
|
+
* Piercing needs more than pass-through: the gateway must *read* the shell application's
|
|
11
|
+
* response in order to interleave fragments into it. Connect middleware has no return value to
|
|
12
|
+
* read, so the shell response is captured by temporarily intercepting the response object's
|
|
13
|
+
* write methods (see {@link captureDownstreamResponse}) while the downstream handler runs. The
|
|
14
|
+
* capture streams — it does not buffer the shell — so the shell's own streaming is preserved.
|
|
15
|
+
*/
|
|
16
|
+
export function toNodeMiddleware(gateway) {
|
|
17
|
+
return (req, res, next) => {
|
|
18
|
+
// Captured before any interception, so the final response is always written with the real
|
|
19
|
+
// methods — even while the downstream shell is still streaming through the interceptors,
|
|
20
|
+
// which is exactly what happens during a pierce.
|
|
21
|
+
//
|
|
22
|
+
// `writeHead` matters as much as `write`: Node's own `write()` calls it internally to flush
|
|
23
|
+
// headers, so writing through an intercepted `writeHead` would commit a response with no
|
|
24
|
+
// headers and drop the body on the floor.
|
|
25
|
+
const native = {
|
|
26
|
+
write: res.write.bind(res),
|
|
27
|
+
end: res.end.bind(res),
|
|
28
|
+
writeHead: res.writeHead.bind(res),
|
|
29
|
+
};
|
|
30
|
+
void (async () => {
|
|
31
|
+
const request = nodeRequestToWebRequest(req);
|
|
32
|
+
// the downstream handler must run at most once: if the gateway captured it and then
|
|
33
|
+
// declined to produce a response, falling through to next() would run it a second time
|
|
34
|
+
let captured;
|
|
35
|
+
const response = await gateway.handle(request, () => (captured ??= captureDownstreamResponse(res, next)));
|
|
36
|
+
if (!response) {
|
|
37
|
+
if (!captured)
|
|
38
|
+
next();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// the downstream handler may have staged headers on `res` before we captured it; the
|
|
42
|
+
// response we're about to write already carries everything it should
|
|
43
|
+
for (const name of res.getHeaderNames()) {
|
|
44
|
+
res.removeHeader(name);
|
|
45
|
+
}
|
|
46
|
+
const headers = {};
|
|
47
|
+
response.headers.forEach((value, name) => {
|
|
48
|
+
headers[name] = value;
|
|
49
|
+
});
|
|
50
|
+
const setCookie = response.headers.getSetCookie?.();
|
|
51
|
+
if (setCookie?.length) {
|
|
52
|
+
headers['set-cookie'] = setCookie;
|
|
53
|
+
}
|
|
54
|
+
native.writeHead(response.status, headers);
|
|
55
|
+
if (!response.body) {
|
|
56
|
+
native.end();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const reader = response.body.getReader();
|
|
60
|
+
try {
|
|
61
|
+
for (;;) {
|
|
62
|
+
const { done, value } = await reader.read();
|
|
63
|
+
if (done)
|
|
64
|
+
break;
|
|
65
|
+
native.write(value);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
reader.releaseLock();
|
|
70
|
+
}
|
|
71
|
+
native.end();
|
|
72
|
+
})().catch(next);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Runs the downstream handler and captures what it writes as a `Response`.
|
|
77
|
+
*
|
|
78
|
+
* The returned promise resolves as soon as the downstream handler commits its status and
|
|
79
|
+
* headers — its body is exposed as a stream that fills as the handler writes, so a streaming
|
|
80
|
+
* shell stays streaming through the gateway.
|
|
81
|
+
*/
|
|
82
|
+
function captureDownstreamResponse(res, next) {
|
|
83
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
84
|
+
let controller;
|
|
85
|
+
const body = new ReadableStream({
|
|
86
|
+
start(streamController) {
|
|
87
|
+
controller = streamController;
|
|
88
|
+
},
|
|
89
|
+
cancel() {
|
|
90
|
+
controller = undefined;
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
let committed = false;
|
|
94
|
+
const isNullBodyStatus = (status) => status === 204 || status === 205 || status === 304 || (status >= 100 && status < 200);
|
|
95
|
+
const commit = () => {
|
|
96
|
+
if (committed)
|
|
97
|
+
return;
|
|
98
|
+
committed = true;
|
|
99
|
+
const headers = new Headers();
|
|
100
|
+
for (const [name, value] of Object.entries(res.getHeaders())) {
|
|
101
|
+
if (value === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
for (const entry of Array.isArray(value) ? value : [value]) {
|
|
104
|
+
headers.append(name, String(entry));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const responseBody = isNullBodyStatus(res.statusCode) ? null : body;
|
|
108
|
+
resolve(new Response(responseBody, { status: res.statusCode, headers }));
|
|
109
|
+
};
|
|
110
|
+
const enqueue = (chunk, encoding) => {
|
|
111
|
+
if (chunk === undefined || chunk === null || !controller)
|
|
112
|
+
return;
|
|
113
|
+
const bytes = typeof chunk === 'string'
|
|
114
|
+
? Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8')
|
|
115
|
+
: chunk;
|
|
116
|
+
controller.enqueue(new Uint8Array(bytes));
|
|
117
|
+
};
|
|
118
|
+
res.writeHead = function patchedWriteHead(statusCode, ...rest) {
|
|
119
|
+
res.statusCode = statusCode;
|
|
120
|
+
// headers may arrive as the 2nd or 3rd argument, as an object or a flat array
|
|
121
|
+
const headerArgument = rest.find((argument) => typeof argument === 'object' && argument !== null);
|
|
122
|
+
if (Array.isArray(headerArgument)) {
|
|
123
|
+
for (let index = 0; index + 1 < headerArgument.length; index += 2) {
|
|
124
|
+
res.setHeader(String(headerArgument[index]), headerArgument[index + 1]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else if (headerArgument) {
|
|
128
|
+
for (const [name, value] of Object.entries(headerArgument)) {
|
|
129
|
+
if (value !== undefined)
|
|
130
|
+
res.setHeader(name, value);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return res;
|
|
134
|
+
};
|
|
135
|
+
res.write = function patchedWrite(chunk, encoding, callback) {
|
|
136
|
+
commit();
|
|
137
|
+
enqueue(chunk, encoding);
|
|
138
|
+
if (typeof encoding === 'function')
|
|
139
|
+
encoding();
|
|
140
|
+
else if (typeof callback === 'function')
|
|
141
|
+
callback();
|
|
142
|
+
return true;
|
|
143
|
+
};
|
|
144
|
+
res.end = function patchedEnd(chunk, encoding, callback) {
|
|
145
|
+
if (typeof chunk !== 'function') {
|
|
146
|
+
enqueue(chunk, encoding);
|
|
147
|
+
}
|
|
148
|
+
commit();
|
|
149
|
+
controller?.close();
|
|
150
|
+
controller = undefined;
|
|
151
|
+
for (const argument of [chunk, encoding, callback]) {
|
|
152
|
+
if (typeof argument === 'function')
|
|
153
|
+
argument();
|
|
154
|
+
}
|
|
155
|
+
return res;
|
|
156
|
+
};
|
|
157
|
+
try {
|
|
158
|
+
next();
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
reject(error);
|
|
162
|
+
}
|
|
163
|
+
return promise;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Proxies websocket upgrades addressed to a fragment through to its endpoint.
|
|
167
|
+
*
|
|
168
|
+
* Mount it on the server's `upgrade` event, alongside {@link toNodeMiddleware}:
|
|
169
|
+
*
|
|
170
|
+
* ```ts
|
|
171
|
+
* const server = createServer(app);
|
|
172
|
+
* server.on('upgrade', toNodeUpgradeHandler(gateway));
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* This is what keeps a fragment's dev-server live reload working when the fragment is reached
|
|
176
|
+
* through the gateway rather than directly — and what lets a fragment use websockets in
|
|
177
|
+
* production. Upgrades Braid does not own are left alone, so the shell's own dev socket still
|
|
178
|
+
* reaches whatever else is listening.
|
|
179
|
+
*
|
|
180
|
+
* @param next handles upgrades that are not fragment upgrades. Defaults to destroying the
|
|
181
|
+
* socket; pass your dev server's own upgrade handler to chain them.
|
|
182
|
+
*/
|
|
183
|
+
export function toNodeUpgradeHandler(gateway, next) {
|
|
184
|
+
return (req, socket, head) => {
|
|
185
|
+
void (async () => {
|
|
186
|
+
const target = await gateway.resolveUpgrade(nodeRequestToWebRequest(req, { bodyless: true }));
|
|
187
|
+
if (!target) {
|
|
188
|
+
if (next)
|
|
189
|
+
next(req, socket, head);
|
|
190
|
+
else
|
|
191
|
+
socket.destroy();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const isSecure = target.target.protocol === 'https:';
|
|
195
|
+
const transport = isSecure ? https : http;
|
|
196
|
+
const upstream = transport.request({
|
|
197
|
+
host: target.target.hostname,
|
|
198
|
+
port: target.target.port || (isSecure ? 443 : 80),
|
|
199
|
+
path: `${target.target.pathname}${target.target.search}`,
|
|
200
|
+
method: req.method,
|
|
201
|
+
headers: { ...req.headers, host: target.target.host },
|
|
202
|
+
});
|
|
203
|
+
upstream.on('upgrade', (upstreamRes, upstreamSocket, upstreamHead) => {
|
|
204
|
+
const statusLine = `HTTP/1.1 ${upstreamRes.statusCode} ${upstreamRes.statusMessage}\r\n` +
|
|
205
|
+
Object.entries(upstreamRes.headers)
|
|
206
|
+
.flatMap(([name, value]) => (Array.isArray(value) ? value.map((v) => `${name}: ${v}`) : [`${name}: ${value}`]))
|
|
207
|
+
.join('\r\n') +
|
|
208
|
+
'\r\n\r\n';
|
|
209
|
+
socket.write(statusLine);
|
|
210
|
+
if (upstreamHead?.length)
|
|
211
|
+
socket.write(upstreamHead);
|
|
212
|
+
upstreamSocket.on('error', () => socket.destroy());
|
|
213
|
+
socket.on('error', () => upstreamSocket.destroy());
|
|
214
|
+
upstreamSocket.pipe(socket).pipe(upstreamSocket);
|
|
215
|
+
});
|
|
216
|
+
upstream.on('response', () => {
|
|
217
|
+
// the endpoint declined the upgrade
|
|
218
|
+
socket.destroy();
|
|
219
|
+
});
|
|
220
|
+
upstream.on('error', () => socket.destroy());
|
|
221
|
+
if (head?.length)
|
|
222
|
+
upstream.write(head);
|
|
223
|
+
upstream.end();
|
|
224
|
+
})().catch(() => socket.destroy());
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function nodeRequestToWebRequest(req, options = {}) {
|
|
228
|
+
const host = req.headers.host ?? 'localhost';
|
|
229
|
+
const protocol = req.socket.encrypted ? 'https' : 'http';
|
|
230
|
+
const url = new URL(req.url ?? '/', `${protocol}://${host}`);
|
|
231
|
+
const headers = new Headers();
|
|
232
|
+
for (const [name, value] of Object.entries(req.headers)) {
|
|
233
|
+
if (value === undefined)
|
|
234
|
+
continue;
|
|
235
|
+
if (Array.isArray(value)) {
|
|
236
|
+
value.forEach((entry) => headers.append(name, entry));
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
headers.set(name, value);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const method = req.method ?? 'GET';
|
|
243
|
+
const hasBody = !options.bodyless && method !== 'GET' && method !== 'HEAD';
|
|
244
|
+
return new Request(url, {
|
|
245
|
+
method,
|
|
246
|
+
headers,
|
|
247
|
+
body: hasBody ? Readable.toWeb(req) : undefined,
|
|
248
|
+
// required by undici when a body stream is attached
|
|
249
|
+
...(hasBody ? { duplex: 'half' } : {}),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=node.js.map
|
package/src/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../libs/braid-gateway/src/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway side of the Braid composition protocol.
|
|
3
|
+
*
|
|
4
|
+
* These constants are deliberately duplicated in `@braidlabs/core/src/protocol.ts`: the client
|
|
5
|
+
* and gateway bundles do not share modules, but always ship in the same package version, and
|
|
6
|
+
* the protocol version below is how a mismatch is detected and reported as a named error
|
|
7
|
+
* instead of a silent misbehavior.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The three reserved namespaces, one per kind of thing the gateway serves.
|
|
11
|
+
*
|
|
12
|
+
* They are separate paths rather than one path distinguished by request headers, and that is a
|
|
13
|
+
* deliberate caching decision: a URL whose response depends on a header needs that header in
|
|
14
|
+
* every cache key between here and the browser, and most CDNs ignore `Vary` on anything but
|
|
15
|
+
* `Accept-Encoding`. Splitting them means **`/__braid/frag/*` — the fragment's own assets, which
|
|
16
|
+
* is nearly all the traffic — has no request-header variance at all** and caches on URL alone.
|
|
17
|
+
*/
|
|
18
|
+
export declare const BRAID_FRAGMENT_PREFIX = "/__braid/frag/";
|
|
19
|
+
export declare const BRAID_REALM_PREFIX = "/__braid/realm/";
|
|
20
|
+
export declare const BRAID_DOCUMENT_PREFIX = "/__braid/doc/";
|
|
21
|
+
/** @deprecated use {@link BRAID_FRAGMENT_PREFIX}; kept as the documented namespace root. */
|
|
22
|
+
export declare const BRAID_NAMESPACE_PREFIX = "/__braid/frag/";
|
|
23
|
+
/**
|
|
24
|
+
* Version of the client ↔ gateway composition protocol. The gateway stamps its version onto the
|
|
25
|
+
* realm stub document; the client verifies it at realm boot and fails with a named
|
|
26
|
+
* `BraidError { stage: 'realm-boot' }` on mismatch.
|
|
27
|
+
*
|
|
28
|
+
* v2 split the single fragment namespace into frag/realm/doc.
|
|
29
|
+
*/
|
|
30
|
+
/** Where the gateway serves its generated service worker, when asked to. */
|
|
31
|
+
export declare const BRAID_SERVICE_WORKER_PATH = "/__braid/sw.js";
|
|
32
|
+
/** The web-vitals collector, served only when telemetry's `webVitals` is on. */
|
|
33
|
+
export declare const BRAID_VITALS_SCRIPT_PATH = "/__braid/vitals.js";
|
|
34
|
+
/** Where that collector beacons its report. */
|
|
35
|
+
export declare const BRAID_VITALS_BEACON_PATH = "/__braid/vitals";
|
|
36
|
+
export declare const BRAID_PROTOCOL_VERSION = "2";
|
|
37
|
+
/** Name of the `<meta>` element carrying the protocol version in the realm stub document. */
|
|
38
|
+
export declare const BRAID_PROTOCOL_META = "braid-protocol";
|
|
39
|
+
/** Name of the `<meta>` element carrying the fragment's manifest-declared adapter in the realm stub. */
|
|
40
|
+
export declare const BRAID_ADAPTER_META = "braid-adapter";
|
|
41
|
+
/**
|
|
42
|
+
* Name of the `<meta>` carrying adapter-specific options as JSON — the manifest fields an
|
|
43
|
+
* adapter needs that mean nothing to the runtime, such as which custom element to mount.
|
|
44
|
+
*
|
|
45
|
+
* It rides on the realm stub for the same reason the adapter name does: the client learns
|
|
46
|
+
* everything it needs about a fragment from the fragment's own registration, with no
|
|
47
|
+
* client-side registry to keep in sync.
|
|
48
|
+
*/
|
|
49
|
+
export declare const BRAID_ADAPTER_OPTIONS_META = "braid-adapter-options";
|
|
50
|
+
/** Response/request header carrying a fragment id for diagnostics. */
|
|
51
|
+
export declare const BRAID_FRAGMENT_ID_HEADER = "x-braid-fragment-id";
|
|
52
|
+
/** What a braid-namespaced URL addresses. */
|
|
53
|
+
export type BraidRouteKind =
|
|
54
|
+
/** The fragment's own endpoint: assets, data, anything it serves. Forwarded verbatim. */
|
|
55
|
+
'fragment'
|
|
56
|
+
/** The realm stub document the fragment's hidden iframe boots from. */
|
|
57
|
+
| 'realm'
|
|
58
|
+
/** The fragment's document, prepared for life inside the host page's DOM. */
|
|
59
|
+
| 'document';
|
|
60
|
+
export interface BraidRoute {
|
|
61
|
+
kind: BraidRouteKind;
|
|
62
|
+
fragmentId: string;
|
|
63
|
+
/** The remaining pathname, always starting with `/`. */
|
|
64
|
+
pathname: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parses a braid-namespaced pathname such as `/__braid/frag/:fragmentId/rest/of/path`.
|
|
68
|
+
*
|
|
69
|
+
* @returns the addressed kind, decoded fragment id, and remaining pathname, or null when the
|
|
70
|
+
* path is not in any braid namespace.
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseBraidPathname(pathname: string): BraidRoute | null;
|
|
73
|
+
/** @deprecated use {@link parseBraidPathname}. */
|
|
74
|
+
export declare function parseNamespacePathname(pathname: string): {
|
|
75
|
+
fragmentId: string;
|
|
76
|
+
pathname: string;
|
|
77
|
+
} | null;
|
|
78
|
+
/** Builds a URL in the fragment's asset namespace. */
|
|
79
|
+
export declare function braidFragmentUrl(fragmentId: string, pathname: string, search?: string): string;
|
package/src/protocol.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway side of the Braid composition protocol.
|
|
3
|
+
*
|
|
4
|
+
* These constants are deliberately duplicated in `@braidlabs/core/src/protocol.ts`: the client
|
|
5
|
+
* and gateway bundles do not share modules, but always ship in the same package version, and
|
|
6
|
+
* the protocol version below is how a mismatch is detected and reported as a named error
|
|
7
|
+
* instead of a silent misbehavior.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The three reserved namespaces, one per kind of thing the gateway serves.
|
|
11
|
+
*
|
|
12
|
+
* They are separate paths rather than one path distinguished by request headers, and that is a
|
|
13
|
+
* deliberate caching decision: a URL whose response depends on a header needs that header in
|
|
14
|
+
* every cache key between here and the browser, and most CDNs ignore `Vary` on anything but
|
|
15
|
+
* `Accept-Encoding`. Splitting them means **`/__braid/frag/*` — the fragment's own assets, which
|
|
16
|
+
* is nearly all the traffic — has no request-header variance at all** and caches on URL alone.
|
|
17
|
+
*/
|
|
18
|
+
export const BRAID_FRAGMENT_PREFIX = '/__braid/frag/';
|
|
19
|
+
export const BRAID_REALM_PREFIX = '/__braid/realm/';
|
|
20
|
+
export const BRAID_DOCUMENT_PREFIX = '/__braid/doc/';
|
|
21
|
+
/** @deprecated use {@link BRAID_FRAGMENT_PREFIX}; kept as the documented namespace root. */
|
|
22
|
+
export const BRAID_NAMESPACE_PREFIX = BRAID_FRAGMENT_PREFIX;
|
|
23
|
+
/**
|
|
24
|
+
* Version of the client ↔ gateway composition protocol. The gateway stamps its version onto the
|
|
25
|
+
* realm stub document; the client verifies it at realm boot and fails with a named
|
|
26
|
+
* `BraidError { stage: 'realm-boot' }` on mismatch.
|
|
27
|
+
*
|
|
28
|
+
* v2 split the single fragment namespace into frag/realm/doc.
|
|
29
|
+
*/
|
|
30
|
+
/** Where the gateway serves its generated service worker, when asked to. */
|
|
31
|
+
export const BRAID_SERVICE_WORKER_PATH = '/__braid/sw.js';
|
|
32
|
+
/** The web-vitals collector, served only when telemetry's `webVitals` is on. */
|
|
33
|
+
export const BRAID_VITALS_SCRIPT_PATH = '/__braid/vitals.js';
|
|
34
|
+
/** Where that collector beacons its report. */
|
|
35
|
+
export const BRAID_VITALS_BEACON_PATH = '/__braid/vitals';
|
|
36
|
+
export const BRAID_PROTOCOL_VERSION = '2';
|
|
37
|
+
/** Name of the `<meta>` element carrying the protocol version in the realm stub document. */
|
|
38
|
+
export const BRAID_PROTOCOL_META = 'braid-protocol';
|
|
39
|
+
/** Name of the `<meta>` element carrying the fragment's manifest-declared adapter in the realm stub. */
|
|
40
|
+
export const BRAID_ADAPTER_META = 'braid-adapter';
|
|
41
|
+
/**
|
|
42
|
+
* Name of the `<meta>` carrying adapter-specific options as JSON — the manifest fields an
|
|
43
|
+
* adapter needs that mean nothing to the runtime, such as which custom element to mount.
|
|
44
|
+
*
|
|
45
|
+
* It rides on the realm stub for the same reason the adapter name does: the client learns
|
|
46
|
+
* everything it needs about a fragment from the fragment's own registration, with no
|
|
47
|
+
* client-side registry to keep in sync.
|
|
48
|
+
*/
|
|
49
|
+
export const BRAID_ADAPTER_OPTIONS_META = 'braid-adapter-options';
|
|
50
|
+
/** Response/request header carrying a fragment id for diagnostics. */
|
|
51
|
+
export const BRAID_FRAGMENT_ID_HEADER = 'x-braid-fragment-id';
|
|
52
|
+
const PREFIXES = [
|
|
53
|
+
[BRAID_FRAGMENT_PREFIX, 'fragment'],
|
|
54
|
+
[BRAID_REALM_PREFIX, 'realm'],
|
|
55
|
+
[BRAID_DOCUMENT_PREFIX, 'document'],
|
|
56
|
+
];
|
|
57
|
+
/**
|
|
58
|
+
* Parses a braid-namespaced pathname such as `/__braid/frag/:fragmentId/rest/of/path`.
|
|
59
|
+
*
|
|
60
|
+
* @returns the addressed kind, decoded fragment id, and remaining pathname, or null when the
|
|
61
|
+
* path is not in any braid namespace.
|
|
62
|
+
*/
|
|
63
|
+
export function parseBraidPathname(pathname) {
|
|
64
|
+
for (const [prefix, kind] of PREFIXES) {
|
|
65
|
+
if (!pathname.startsWith(prefix))
|
|
66
|
+
continue;
|
|
67
|
+
const rest = pathname.slice(prefix.length);
|
|
68
|
+
const slashIndex = rest.indexOf('/');
|
|
69
|
+
const encodedFragmentId = slashIndex === -1 ? rest : rest.slice(0, slashIndex);
|
|
70
|
+
if (!encodedFragmentId)
|
|
71
|
+
return null;
|
|
72
|
+
return {
|
|
73
|
+
kind,
|
|
74
|
+
fragmentId: decodeURIComponent(encodedFragmentId),
|
|
75
|
+
pathname: slashIndex === -1 ? '/' : rest.slice(slashIndex),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/** @deprecated use {@link parseBraidPathname}. */
|
|
81
|
+
export function parseNamespacePathname(pathname) {
|
|
82
|
+
const route = parseBraidPathname(pathname);
|
|
83
|
+
return route && route.kind === 'fragment' ? { fragmentId: route.fragmentId, pathname: route.pathname } : null;
|
|
84
|
+
}
|
|
85
|
+
/** Builds a URL in the fragment's asset namespace. */
|
|
86
|
+
export function braidFragmentUrl(fragmentId, pathname, search = '') {
|
|
87
|
+
return `${BRAID_FRAGMENT_PREFIX}${encodeURIComponent(fragmentId)}${pathname}${search}`;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../libs/braid-gateway/src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAErD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE5D;;;;;;GAMG;AACH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAE1D,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAC7D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,6FAA6F;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,wGAAwG;AACxG,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AAElE,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAkB9D,MAAM,QAAQ,GAAqD;IACjE,CAAC,qBAAqB,EAAE,UAAU,CAAC;IACnC,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,qBAAqB,EAAE,UAAU,CAAC;CACpC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAE3C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,iBAAiB,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAE/E,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAEpC,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,kBAAkB,CAAC,iBAAiB,CAAC;YACjD,QAAQ,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;SAC3D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChH,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAM,GAAG,EAAE;IAChF,OAAO,GAAG,qBAAqB,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;AACzF,CAAC"}
|