@introspection-sdk/introspection-proxy 0.9.2 → 0.9.3
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/.turbo/turbo-build.log +1 -1
- package/README.md +19 -0
- package/dist/lazy.d.ts +17 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +30 -0
- package/dist/lazy.js.map +1 -0
- package/dist/proxy.d.ts +2 -0
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +6 -2
- package/dist/proxy.js.map +1 -1
- package/package.json +5 -1
- package/src/lazy.ts +46 -0
- package/src/proxy.ts +10 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @introspection-sdk/introspection-proxy@0.9.
|
|
2
|
+
> @introspection-sdk/introspection-proxy@0.9.3 build /home/runner/work/introspection-js-sdk/introspection-js-sdk/packages/introspection-proxy
|
|
3
3
|
> tsc
|
|
4
4
|
|
package/README.md
CHANGED
|
@@ -45,6 +45,25 @@ same distributed trace:
|
|
|
45
45
|
const mcpFetch = createProxyFetch({ propagateBaggage: true });
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
+
## Lazy process bootstrap
|
|
49
|
+
|
|
50
|
+
Processes that must install proxy enforcement before serving traffic can defer
|
|
51
|
+
loading Undici until after their listener binds:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import { installLazyProxyFetch } from "@introspection-sdk/introspection-proxy/lazy";
|
|
55
|
+
|
|
56
|
+
const proxyFetch = installLazyProxyFetch();
|
|
57
|
+
|
|
58
|
+
server.listen(port, () => {
|
|
59
|
+
void proxyFetch.ready();
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The guard replaces `globalThis.fetch` synchronously. Requests made before
|
|
64
|
+
`ready()` completes wait for the same promise, so initialization cannot be
|
|
65
|
+
bypassed or duplicated.
|
|
66
|
+
|
|
48
67
|
## How it works
|
|
49
68
|
|
|
50
69
|
Two proxy modes, selected per-request:
|
package/dist/lazy.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ProxyFetchOptions } from "./proxy.js";
|
|
2
|
+
export interface LazyProxyFetchInstallation {
|
|
3
|
+
/** Load and initialize the proxy engine. Concurrent calls share one promise. */
|
|
4
|
+
ready(): Promise<typeof fetch>;
|
|
5
|
+
/** Restore the fetch implementation that was active before installation. */
|
|
6
|
+
restore(): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Install a proxy-enforcing fetch guard without loading Undici eagerly.
|
|
10
|
+
*
|
|
11
|
+
* The guard is installed synchronously, so outbound requests cannot race proxy
|
|
12
|
+
* initialization. The first request waits for the real proxy implementation;
|
|
13
|
+
* callers that own process startup can invoke `ready()` after their listener is
|
|
14
|
+
* bound to overlap initialization with the rest of application bootstrap.
|
|
15
|
+
*/
|
|
16
|
+
export declare function installLazyProxyFetch(options?: ProxyFetchOptions): LazyProxyFetchInstallation;
|
|
17
|
+
//# sourceMappingURL=lazy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../src/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,0BAA0B;IACzC,gFAAgF;IAChF,KAAK,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,iBAAsB,GAC9B,0BAA0B,CA0B5B"}
|
package/dist/lazy.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install a proxy-enforcing fetch guard without loading Undici eagerly.
|
|
3
|
+
*
|
|
4
|
+
* The guard is installed synchronously, so outbound requests cannot race proxy
|
|
5
|
+
* initialization. The first request waits for the real proxy implementation;
|
|
6
|
+
* callers that own process startup can invoke `ready()` after their listener is
|
|
7
|
+
* bound to overlap initialization with the rest of application bootstrap.
|
|
8
|
+
*/
|
|
9
|
+
export function installLazyProxyFetch(options = {}) {
|
|
10
|
+
const original = globalThis.fetch;
|
|
11
|
+
let proxyPromise;
|
|
12
|
+
const ready = () => {
|
|
13
|
+
proxyPromise ??= import("./proxy.js").then(({ createProxyFetchWithBase }) => createProxyFetchWithBase(options, original));
|
|
14
|
+
return proxyPromise;
|
|
15
|
+
};
|
|
16
|
+
const guardedFetch = async (input, init) => {
|
|
17
|
+
const proxiedFetch = await ready();
|
|
18
|
+
return proxiedFetch(input, init);
|
|
19
|
+
};
|
|
20
|
+
globalThis.fetch = guardedFetch;
|
|
21
|
+
return {
|
|
22
|
+
ready,
|
|
23
|
+
restore() {
|
|
24
|
+
if (globalThis.fetch === guardedFetch) {
|
|
25
|
+
globalThis.fetch = original;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=lazy.js.map
|
package/dist/lazy.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../src/lazy.ts"],"names":[],"mappings":"AASA;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAA6B,EAAE;IAE/B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;IAClC,IAAI,YAA+C,CAAC;IAEpD,MAAM,KAAK,GAAG,GAA0B,EAAE;QACxC,YAAY,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,wBAAwB,EAAE,EAAE,EAAE,CAC1E,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAC5C,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAiB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvD,MAAM,YAAY,GAAG,MAAM,KAAK,EAAE,CAAC;QACnC,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,UAAU,CAAC,KAAK,GAAG,YAAY,CAAC;IAEhC,OAAO;QACL,KAAK;QACL,OAAO;YACL,IAAI,UAAU,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBACtC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC9B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export declare function resolveForwardProxyUrl(): string | undefined;
|
|
|
25
25
|
* {@link createProxyFetch}).
|
|
26
26
|
*/
|
|
27
27
|
export declare function getProxyDispatcher(options?: ProxyFetchOptions): Dispatcher | undefined;
|
|
28
|
+
/** @internal Used by the lazy installer to preserve the pre-install fetch. */
|
|
29
|
+
export declare function createProxyFetchWithBase(options: ProxyFetchOptions | undefined, baseFetch: typeof fetch): typeof fetch;
|
|
28
30
|
export declare function createProxyFetch(options?: ProxyFetchOptions): typeof fetch;
|
|
29
31
|
export declare function installProxyFetch(options?: ProxyFetchOptions): () => void;
|
|
30
32
|
//# sourceMappingURL=proxy.d.ts.map
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAkBA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,QAAQ,CAAC;AAYhB,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAiBD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAQ3D;AA4BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,iBAAsB,GAC9B,UAAU,GAAG,SAAS,CAUxB;AA2BD,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAkBA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,QAAQ,CAAC;AAYhB,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAiBD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAQ3D;AA4BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,iBAAsB,GAC9B,UAAU,GAAG,SAAS,CAUxB;AA2BD,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,YAAK,EAC/B,SAAS,EAAE,OAAO,KAAK,GACtB,OAAO,KAAK,CAsFd;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,KAAK,CAEd;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,IAAI,CAU7E"}
|
package/dist/proxy.js
CHANGED
|
@@ -99,11 +99,12 @@ function withInjectedTraceContext(opts, propagateBaggage) {
|
|
|
99
99
|
});
|
|
100
100
|
return { ...opts, headers };
|
|
101
101
|
}
|
|
102
|
-
|
|
102
|
+
/** @internal Used by the lazy installer to preserve the pre-install fetch. */
|
|
103
|
+
export function createProxyFetchWithBase(options = {}, baseFetch) {
|
|
103
104
|
// Capture the real fetch now, before installProxyFetch swaps
|
|
104
105
|
// globalThis.fetch to this wrapper. The per-request fallback below must not
|
|
105
106
|
// re-read the global, or it would recurse into the installed proxy.
|
|
106
|
-
const base =
|
|
107
|
+
const base = baseFetch;
|
|
107
108
|
const egressUrl = resolveEgressUrl(options);
|
|
108
109
|
const egressHosts = resolveEgressHosts(options);
|
|
109
110
|
const egressIsPlainHttp = !!egressUrl && new URL(egressUrl).protocol === "http:";
|
|
@@ -162,6 +163,9 @@ export function createProxyFetch(options = {}) {
|
|
|
162
163
|
return tracedProxyCall(useEgress ? "egress" : "forward", method, url, execute);
|
|
163
164
|
};
|
|
164
165
|
}
|
|
166
|
+
export function createProxyFetch(options = {}) {
|
|
167
|
+
return createProxyFetchWithBase(options, globalThis.fetch);
|
|
168
|
+
}
|
|
165
169
|
export function installProxyFetch(options = {}) {
|
|
166
170
|
const original = globalThis.fetch;
|
|
167
171
|
const proxied = createProxyFetch(options);
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,KAAK,EACL,iBAAiB,EAEjB,KAAK,IAAI,WAAW,GAErB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,6EAA6E;AAC7E,4EAA4E;AAC5E,gEAAgE;AAChE,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAsBpD,SAAS,gBAAgB,CAAC,OAA0B;IAClD,OAAO,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACxE,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B;IACpD,MAAM,GAAG,GACP,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC;IAC7E,OAAO,IAAI,GAAG,CACZ,GAAG;SACA,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE1B,OAAO,IAAI,KAAK,CAAC;QACf,gBAAgB,EAAE,4BAA4B;QAC9C,mBAAmB,EAAE,4BAA4B;QACjD,OAAO,CACL,QAAgC,EAChC,QAAiC;YAEjC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,SAAS,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,sBAAsB,EAAE,EAAE,CAAC;QAC7B,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,KAAwB;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAClD,OAAQ,KAAiB,CAAC,GAAG,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,GAAiB;IACxC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACzD,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAA6B,EAC7B,gBAAyB;IAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAkC,CAAC,CAAC;IACrE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;QAC5C,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK;YACrB,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS;gBAAE,OAAO;YACjE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@introspection-sdk/introspection-proxy",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Outbound HTTP proxy helpers for routing fetch-based clients through the Introspection egress proxy or a standard forward proxy",
|
|
6
6
|
"engines": {
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
".": {
|
|
14
14
|
"types": "./dist/index.d.ts",
|
|
15
15
|
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./lazy": {
|
|
18
|
+
"types": "./dist/lazy.d.ts",
|
|
19
|
+
"default": "./dist/lazy.js"
|
|
16
20
|
}
|
|
17
21
|
},
|
|
18
22
|
"dependencies": {
|
package/src/lazy.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ProxyFetchOptions } from "./proxy.js";
|
|
2
|
+
|
|
3
|
+
export interface LazyProxyFetchInstallation {
|
|
4
|
+
/** Load and initialize the proxy engine. Concurrent calls share one promise. */
|
|
5
|
+
ready(): Promise<typeof fetch>;
|
|
6
|
+
/** Restore the fetch implementation that was active before installation. */
|
|
7
|
+
restore(): void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Install a proxy-enforcing fetch guard without loading Undici eagerly.
|
|
12
|
+
*
|
|
13
|
+
* The guard is installed synchronously, so outbound requests cannot race proxy
|
|
14
|
+
* initialization. The first request waits for the real proxy implementation;
|
|
15
|
+
* callers that own process startup can invoke `ready()` after their listener is
|
|
16
|
+
* bound to overlap initialization with the rest of application bootstrap.
|
|
17
|
+
*/
|
|
18
|
+
export function installLazyProxyFetch(
|
|
19
|
+
options: ProxyFetchOptions = {},
|
|
20
|
+
): LazyProxyFetchInstallation {
|
|
21
|
+
const original = globalThis.fetch;
|
|
22
|
+
let proxyPromise: Promise<typeof fetch> | undefined;
|
|
23
|
+
|
|
24
|
+
const ready = (): Promise<typeof fetch> => {
|
|
25
|
+
proxyPromise ??= import("./proxy.js").then(({ createProxyFetchWithBase }) =>
|
|
26
|
+
createProxyFetchWithBase(options, original),
|
|
27
|
+
);
|
|
28
|
+
return proxyPromise;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const guardedFetch: typeof fetch = async (input, init) => {
|
|
32
|
+
const proxiedFetch = await ready();
|
|
33
|
+
return proxiedFetch(input, init);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
globalThis.fetch = guardedFetch;
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
ready,
|
|
40
|
+
restore() {
|
|
41
|
+
if (globalThis.fetch === guardedFetch) {
|
|
42
|
+
globalThis.fetch = original;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
package/src/proxy.ts
CHANGED
|
@@ -149,13 +149,15 @@ function withInjectedTraceContext(
|
|
|
149
149
|
return { ...opts, headers };
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
/** @internal Used by the lazy installer to preserve the pre-install fetch. */
|
|
153
|
+
export function createProxyFetchWithBase(
|
|
153
154
|
options: ProxyFetchOptions = {},
|
|
155
|
+
baseFetch: typeof fetch,
|
|
154
156
|
): typeof fetch {
|
|
155
157
|
// Capture the real fetch now, before installProxyFetch swaps
|
|
156
158
|
// globalThis.fetch to this wrapper. The per-request fallback below must not
|
|
157
159
|
// re-read the global, or it would recurse into the installed proxy.
|
|
158
|
-
const base =
|
|
160
|
+
const base = baseFetch;
|
|
159
161
|
const egressUrl = resolveEgressUrl(options);
|
|
160
162
|
const egressHosts = resolveEgressHosts(options);
|
|
161
163
|
const egressIsPlainHttp =
|
|
@@ -239,6 +241,12 @@ export function createProxyFetch(
|
|
|
239
241
|
};
|
|
240
242
|
}
|
|
241
243
|
|
|
244
|
+
export function createProxyFetch(
|
|
245
|
+
options: ProxyFetchOptions = {},
|
|
246
|
+
): typeof fetch {
|
|
247
|
+
return createProxyFetchWithBase(options, globalThis.fetch);
|
|
248
|
+
}
|
|
249
|
+
|
|
242
250
|
export function installProxyFetch(options: ProxyFetchOptions = {}): () => void {
|
|
243
251
|
const original = globalThis.fetch;
|
|
244
252
|
const proxied = createProxyFetch(options);
|