veryfront 0.1.746 → 0.1.749
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/esm/cli/templates/manifest.js +2 -2
- package/esm/deno.js +1 -1
- package/esm/src/build/production-build/static-generation.d.ts.map +1 -1
- package/esm/src/build/production-build/static-generation.js +2 -0
- package/esm/src/cache/backends/api.d.ts.map +1 -1
- package/esm/src/cache/backends/api.js +9 -5
- package/esm/src/cache/backends/disk.d.ts +1 -1
- package/esm/src/cache/backends/disk.d.ts.map +1 -1
- package/esm/src/cache/backends/disk.js +41 -13
- package/esm/src/cache/backends/glob.d.ts +6 -0
- package/esm/src/cache/backends/glob.d.ts.map +1 -0
- package/esm/src/cache/backends/glob.js +41 -0
- package/esm/src/cache/backends/memory.d.ts +1 -1
- package/esm/src/cache/backends/memory.d.ts.map +1 -1
- package/esm/src/cache/backends/memory.js +14 -12
- package/esm/src/cache/backends/redis.d.ts.map +1 -1
- package/esm/src/cache/backends/redis.js +33 -7
- package/esm/src/cache/dependency-graph.d.ts +1 -0
- package/esm/src/cache/dependency-graph.d.ts.map +1 -1
- package/esm/src/cache/dependency-graph.js +15 -1
- package/esm/src/cache/paths.d.ts.map +1 -1
- package/esm/src/cache/paths.js +5 -0
- package/esm/src/embedding/index.d.ts +4 -1
- package/esm/src/embedding/index.d.ts.map +1 -1
- package/esm/src/embedding/index.js +3 -1
- package/esm/src/embedding/rag-store.d.ts.map +1 -1
- package/esm/src/embedding/rag-store.js +157 -8
- package/esm/src/embedding/react/use-uploads.d.ts +1 -0
- package/esm/src/embedding/react/use-uploads.d.ts.map +1 -1
- package/esm/src/embedding/react/use-uploads.js +4 -1
- package/esm/src/embedding/upload-handler.d.ts +29 -8
- package/esm/src/embedding/upload-handler.d.ts.map +1 -1
- package/esm/src/embedding/upload-handler.js +66 -6
- package/esm/src/html/html-shell-generator.js +5 -5
- package/esm/src/html/nonce-injection.d.ts.map +1 -1
- package/esm/src/html/nonce-injection.js +11 -4
- package/esm/src/html/utils.d.ts +5 -0
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +19 -9
- package/esm/src/middleware/builtin/security/redis-rate-limit.d.ts +2 -0
- package/esm/src/middleware/builtin/security/redis-rate-limit.d.ts.map +1 -1
- package/esm/src/middleware/builtin/security/redis-rate-limit.js +46 -13
- package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.js +12 -5
- package/esm/src/modules/server/module-batch-handler.d.ts +1 -0
- package/esm/src/modules/server/module-batch-handler.d.ts.map +1 -1
- package/esm/src/modules/server/module-batch-handler.js +52 -26
- package/esm/src/modules/server/module-server.d.ts.map +1 -1
- package/esm/src/modules/server/module-server.js +87 -69
- package/esm/src/modules/server/module-source-resolution-cache.d.ts +16 -0
- package/esm/src/modules/server/module-source-resolution-cache.d.ts.map +1 -0
- package/esm/src/modules/server/module-source-resolution-cache.js +43 -0
- package/esm/src/oauth/providers/base.d.ts +0 -2
- package/esm/src/oauth/providers/base.d.ts.map +1 -1
- package/esm/src/oauth/providers/base.js +35 -10
- package/esm/src/oauth/token-store/memory.d.ts +7 -0
- package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
- package/esm/src/oauth/token-store/memory.js +14 -1
- package/esm/src/observability/auto-instrument/http-instrumentation.d.ts.map +1 -1
- package/esm/src/observability/auto-instrument/http-instrumentation.js +10 -6
- package/esm/src/observability/file-log-subscriber.d.ts +1 -0
- package/esm/src/observability/file-log-subscriber.d.ts.map +1 -1
- package/esm/src/observability/file-log-subscriber.js +2 -1
- package/esm/src/observability/tracing/api-shim.d.ts +1 -0
- package/esm/src/observability/tracing/api-shim.d.ts.map +1 -1
- package/esm/src/observability/tracing/api-shim.js +7 -0
- package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
- package/esm/src/observability/tracing/otlp-setup.js +17 -7
- package/esm/src/proxy/handler.d.ts +5 -2
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +26 -25
- package/esm/src/proxy/main.js +8 -11
- package/esm/src/rendering/renderer.d.ts.map +1 -1
- package/esm/src/rendering/renderer.js +32 -12
- package/esm/src/server/context/cache-invalidation.d.ts.map +1 -1
- package/esm/src/server/context/cache-invalidation.js +2 -0
- package/esm/src/server/handlers/dev/scripts/error-overlay.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/scripts/error-overlay.js +32 -18
- package/esm/src/server/handlers/monitoring/client-log.handler.d.ts +1 -0
- package/esm/src/server/handlers/monitoring/client-log.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/monitoring/client-log.handler.js +39 -5
- package/esm/src/server/handlers/request/module/batch-module-handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/module/batch-module-handler.js +2 -1
- package/esm/src/utils/logger/redact.d.ts +10 -0
- package/esm/src/utils/logger/redact.d.ts.map +1 -1
- package/esm/src/utils/logger/redact.js +60 -1
- package/esm/src/utils/redis-client.d.ts +1 -0
- package/esm/src/utils/redis-client.d.ts.map +1 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
|
@@ -229,11 +229,37 @@ export class OAuthProvider {
|
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Module-level singleflight for token refreshes, scoped by TokenStore instance
|
|
234
|
+
* and then `(serviceId, userId)`. This dedupes separate OAuthService instances
|
|
235
|
+
* that share the same scoped store without making different project stores
|
|
236
|
+
* share refresh promises.
|
|
237
|
+
*/
|
|
238
|
+
const refreshInFlightByStore = new WeakMap();
|
|
239
|
+
function getRefreshInFlight(tokenStore, key) {
|
|
240
|
+
return refreshInFlightByStore.get(tokenStore)?.get(key);
|
|
241
|
+
}
|
|
242
|
+
function setRefreshInFlight(tokenStore, key, promise) {
|
|
243
|
+
let storeInflight = refreshInFlightByStore.get(tokenStore);
|
|
244
|
+
if (!storeInflight) {
|
|
245
|
+
storeInflight = new Map();
|
|
246
|
+
refreshInFlightByStore.set(tokenStore, storeInflight);
|
|
247
|
+
}
|
|
248
|
+
storeInflight.set(key, promise);
|
|
249
|
+
}
|
|
250
|
+
function clearRefreshInFlight(tokenStore, key, promise) {
|
|
251
|
+
const storeInflight = refreshInFlightByStore.get(tokenStore);
|
|
252
|
+
if (!storeInflight || storeInflight.get(key) !== promise)
|
|
253
|
+
return;
|
|
254
|
+
storeInflight.delete(key);
|
|
255
|
+
if (storeInflight.size === 0) {
|
|
256
|
+
refreshInFlightByStore.delete(tokenStore);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
232
259
|
/** Implement oauth service. */
|
|
233
260
|
export class OAuthService extends OAuthProvider {
|
|
234
261
|
serviceConfig;
|
|
235
262
|
tokenStore;
|
|
236
|
-
refreshPromises = new Map();
|
|
237
263
|
constructor(config, tokenStore, envReader) {
|
|
238
264
|
super(config, envReader);
|
|
239
265
|
this.serviceConfig = config;
|
|
@@ -245,9 +271,6 @@ export class OAuthService extends OAuthProvider {
|
|
|
245
271
|
get apiBaseUrl() {
|
|
246
272
|
return this.serviceConfig.apiBaseUrl;
|
|
247
273
|
}
|
|
248
|
-
refreshKey(userId) {
|
|
249
|
-
return JSON.stringify([this.serviceId, userId]);
|
|
250
|
-
}
|
|
251
274
|
createAuthorizationUrl(options = {}) {
|
|
252
275
|
return super.createAuthorizationUrl({
|
|
253
276
|
...options,
|
|
@@ -270,19 +293,21 @@ export class OAuthService extends OAuthProvider {
|
|
|
270
293
|
return tokens.accessToken;
|
|
271
294
|
if (!tokens.refreshToken)
|
|
272
295
|
return null;
|
|
273
|
-
|
|
274
|
-
|
|
296
|
+
if (!this.tokenStore) {
|
|
297
|
+
throw new Error("TokenStore not configured");
|
|
298
|
+
}
|
|
299
|
+
const key = JSON.stringify([this.serviceId, userId]);
|
|
300
|
+
const existingRefresh = getRefreshInFlight(this.tokenStore, key);
|
|
275
301
|
if (existingRefresh)
|
|
276
302
|
return existingRefresh;
|
|
303
|
+
const tokenStore = this.tokenStore;
|
|
277
304
|
const refreshPromise = this.refreshAndStoreAccessToken(userId, tokens.refreshToken);
|
|
278
|
-
|
|
305
|
+
setRefreshInFlight(tokenStore, key, refreshPromise);
|
|
279
306
|
try {
|
|
280
307
|
return await refreshPromise;
|
|
281
308
|
}
|
|
282
309
|
finally {
|
|
283
|
-
|
|
284
|
-
this.refreshPromises.delete(key);
|
|
285
|
-
}
|
|
310
|
+
clearRefreshInFlight(tokenStore, key, refreshPromise);
|
|
286
311
|
}
|
|
287
312
|
}
|
|
288
313
|
async refreshAndStoreAccessToken(userId, refreshToken) {
|
|
@@ -7,6 +7,11 @@ export interface MemoryTokenStoreOptions {
|
|
|
7
7
|
* {@link DEFAULT_MAX_TOKEN_ENTRIES}.
|
|
8
8
|
*/
|
|
9
9
|
maxEntries?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of in-flight OAuth state entries to retain before oldest
|
|
12
|
+
* entries are evicted. Defaults to {@link DEFAULT_MAX_STATE_ENTRIES}.
|
|
13
|
+
*/
|
|
14
|
+
maxStateEntries?: number;
|
|
10
15
|
}
|
|
11
16
|
/**
|
|
12
17
|
* In-memory TokenStore keyed by `(serviceId, userId)`.
|
|
@@ -24,6 +29,7 @@ export interface MemoryTokenStoreOptions {
|
|
|
24
29
|
export declare class MemoryTokenStore implements TokenStore {
|
|
25
30
|
private tokens;
|
|
26
31
|
private states;
|
|
32
|
+
private maxStateEntries;
|
|
27
33
|
private projectId;
|
|
28
34
|
private warnedProductionUse;
|
|
29
35
|
constructor(projectId?: string, options?: MemoryTokenStoreOptions);
|
|
@@ -44,6 +50,7 @@ export declare class MemoryTokenStore implements TokenStore {
|
|
|
44
50
|
*/
|
|
45
51
|
consumeState(state: string): Promise<StoredOAuthState | null>;
|
|
46
52
|
private cleanupExpiredStates;
|
|
53
|
+
private evictOldestStates;
|
|
47
54
|
/** List connected slots as `${serviceId}:${userId}` strings (test/debug aid). */
|
|
48
55
|
getConnectedServices(): string[];
|
|
49
56
|
/** Whether a given user has usable tokens for a service. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/token-store/memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/token-store/memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmB7E,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAS;gBAExB,SAAS,SAAY,EAAE,OAAO,GAAE,uBAA4B;IAQxE,OAAO,CAAC,SAAS;IAIjB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAW3B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMzE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAU7D,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,iBAAiB;IAQzB,iFAAiF;IACjF,oBAAoB,IAAI,MAAM,EAAE;IAOhC,4DAA4D;IAC5D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAQvD,QAAQ,IAAI,IAAI;CAIjB;AAED,eAAO,MAAM,gBAAgB,EAAE,UAAmC,CAAC"}
|
|
@@ -12,6 +12,8 @@ const STATE_EXPIRY_MS = 10 * 60 * 1_000;
|
|
|
12
12
|
* eviction is by capacity/recency only.
|
|
13
13
|
*/
|
|
14
14
|
const DEFAULT_MAX_TOKEN_ENTRIES = 10_000;
|
|
15
|
+
/** Default cap on in-flight OAuth state values. */
|
|
16
|
+
const DEFAULT_MAX_STATE_ENTRIES = 10_000;
|
|
15
17
|
/**
|
|
16
18
|
* In-memory TokenStore keyed by `(serviceId, userId)`.
|
|
17
19
|
*
|
|
@@ -28,10 +30,12 @@ const DEFAULT_MAX_TOKEN_ENTRIES = 10_000;
|
|
|
28
30
|
export class MemoryTokenStore {
|
|
29
31
|
tokens;
|
|
30
32
|
states = new Map();
|
|
33
|
+
maxStateEntries;
|
|
31
34
|
projectId;
|
|
32
35
|
warnedProductionUse = false;
|
|
33
36
|
constructor(projectId = "default", options = {}) {
|
|
34
37
|
this.projectId = projectId;
|
|
38
|
+
this.maxStateEntries = Math.max(1, options.maxStateEntries ?? DEFAULT_MAX_STATE_ENTRIES);
|
|
35
39
|
this.tokens = new LRUCacheAdapter({
|
|
36
40
|
maxEntries: options.maxEntries ?? DEFAULT_MAX_TOKEN_ENTRIES,
|
|
37
41
|
});
|
|
@@ -66,8 +70,9 @@ export class MemoryTokenStore {
|
|
|
66
70
|
return Promise.resolve();
|
|
67
71
|
}
|
|
68
72
|
setState(state, meta) {
|
|
69
|
-
this.states.set(state, meta);
|
|
70
73
|
this.cleanupExpiredStates();
|
|
74
|
+
this.states.set(state, meta);
|
|
75
|
+
this.evictOldestStates();
|
|
71
76
|
return Promise.resolve();
|
|
72
77
|
}
|
|
73
78
|
/**
|
|
@@ -92,6 +97,14 @@ export class MemoryTokenStore {
|
|
|
92
97
|
}
|
|
93
98
|
}
|
|
94
99
|
}
|
|
100
|
+
evictOldestStates() {
|
|
101
|
+
while (this.states.size > this.maxStateEntries) {
|
|
102
|
+
const oldestState = this.states.keys().next().value;
|
|
103
|
+
if (oldestState === undefined)
|
|
104
|
+
return;
|
|
105
|
+
this.states.delete(oldestState);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
95
108
|
/** List connected slots as `${serviceId}:${userId}` strings (test/debug aid). */
|
|
96
109
|
getConnectedServices() {
|
|
97
110
|
const prefix = `${this.projectId}:`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-instrumentation.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/auto-instrument/http-instrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-instrumentation.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/auto-instrument/http-instrumentation.ts"],"names":[],"mappings":"AAoCA,mCAAmC;AACnC,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAC1D,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAiCzC;AACD,2EAA2E;AAC3E,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,KAAwB,GACzC,OAAO,KAAK,CAsDd"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { serverLogger } from "../../utils/index.js";
|
|
2
|
+
import { sanitizeUrlForSpan } from "../../utils/logger/redact.js";
|
|
2
3
|
import { context as otContext, propagation, SpanKind, SpanStatusCode, trace, } from "../tracing/api-shim.js";
|
|
3
4
|
const logger = serverLogger.component("auto-instrument");
|
|
4
|
-
|
|
5
|
+
function getHttpTracer() {
|
|
6
|
+
return trace.getTracer("veryfront-http");
|
|
7
|
+
}
|
|
5
8
|
const headersGetter = {
|
|
6
9
|
keys(carrier) {
|
|
7
10
|
return [...carrier.keys()];
|
|
@@ -27,7 +30,7 @@ export function instrumentHttpHandler(handler) {
|
|
|
27
30
|
const httpAttrs = buildHttpAttributes(request, url);
|
|
28
31
|
const parentContext = extractParentContext(request.headers);
|
|
29
32
|
try {
|
|
30
|
-
return await
|
|
33
|
+
return await getHttpTracer().startActiveSpan("http.server.request", { kind: SpanKind.SERVER, attributes: httpAttrs }, parentContext, async (span) => {
|
|
31
34
|
try {
|
|
32
35
|
const response = await handler(request);
|
|
33
36
|
recordResponseSuccess(span, response, performance.now() - startTime, httpAttrs);
|
|
@@ -54,10 +57,11 @@ export function createInstrumentedFetch(baseFetch = globalThis.fetch) {
|
|
|
54
57
|
const startTime = performance.now();
|
|
55
58
|
const urlString = extractFetchUrl(input);
|
|
56
59
|
const method = init?.method ?? "GET";
|
|
60
|
+
const spanUrl = sanitizeUrlForSpan(urlString);
|
|
57
61
|
const fetchAttrs = {
|
|
58
62
|
"http.method": method,
|
|
59
|
-
"http.url":
|
|
60
|
-
"http.target":
|
|
63
|
+
"http.url": spanUrl,
|
|
64
|
+
"http.target": spanUrl,
|
|
61
65
|
"http.host": "",
|
|
62
66
|
"http.scheme": "",
|
|
63
67
|
};
|
|
@@ -71,7 +75,7 @@ export function createInstrumentedFetch(baseFetch = globalThis.fetch) {
|
|
|
71
75
|
/* expected: relative URLs cannot be parsed, leave defaults */
|
|
72
76
|
}
|
|
73
77
|
try {
|
|
74
|
-
return await
|
|
78
|
+
return await getHttpTracer().startActiveSpan("http.client.fetch", { kind: SpanKind.CLIENT, attributes: fetchAttrs }, async (span) => {
|
|
75
79
|
try {
|
|
76
80
|
const headers = new Headers(init?.headers);
|
|
77
81
|
propagation.inject(otContext.active(), headers, {
|
|
@@ -99,7 +103,7 @@ export function createInstrumentedFetch(baseFetch = globalThis.fetch) {
|
|
|
99
103
|
function buildHttpAttributes(request, url) {
|
|
100
104
|
return {
|
|
101
105
|
"http.method": request.method,
|
|
102
|
-
"http.url": request.url,
|
|
106
|
+
"http.url": sanitizeUrlForSpan(request.url),
|
|
103
107
|
"http.target": url.pathname,
|
|
104
108
|
"http.host": url.host,
|
|
105
109
|
"http.scheme": url.protocol.replace(":", ""),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-log-subscriber.d.ts","sourceRoot":"","sources":["../../../src/src/observability/file-log-subscriber.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAgBD,uBAAuB;AACvB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAW3D;AAaD,qCAAqC;AACrC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAAgB;
|
|
1
|
+
{"version":3,"file":"file-log-subscriber.d.ts","sourceRoot":"","sources":["../../../src/src/observability/file-log-subscriber.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAgBD,uBAAuB;AACvB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAW3D;AAaD,qCAAqC;AACrC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,MAAM,EAAE,aAAa;IAOjC,aAAa,IAAI,aAAa;IAQ9B,OAAO,CAAC,OAAO;YASD,UAAU;YAyBV,QAAQ;YAeR,SAAS;YAOT,MAAM;IAgCd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B;AAED,kCAAkC;AAClC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAEhF"}
|
|
@@ -43,6 +43,7 @@ export class FileLogSubscriber {
|
|
|
43
43
|
closed = false;
|
|
44
44
|
permissionFailed = false;
|
|
45
45
|
config;
|
|
46
|
+
encoder = new TextEncoder();
|
|
46
47
|
constructor(config) {
|
|
47
48
|
this.config = config;
|
|
48
49
|
this.maxSizeBytes = parseMaxSize(config.maxSize);
|
|
@@ -68,7 +69,7 @@ export class FileLogSubscriber {
|
|
|
68
69
|
if (!this.file)
|
|
69
70
|
await this.openFile();
|
|
70
71
|
const line = this.formatter(entry) + "\n";
|
|
71
|
-
const bytes =
|
|
72
|
+
const bytes = this.encoder.encode(line);
|
|
72
73
|
if (this.currentSize + bytes.length > this.maxSizeBytes) {
|
|
73
74
|
await this.rotate();
|
|
74
75
|
}
|
|
@@ -141,6 +141,7 @@ export declare function setGlobalActiveSpanAccessor(accessor: {
|
|
|
141
141
|
*/
|
|
142
142
|
export declare function setGlobalTracerProvider(p: TracerProvider): void;
|
|
143
143
|
export declare function getGlobalTracerProvider(): TracerProvider;
|
|
144
|
+
export declare function getTracerProviderRevision(): number;
|
|
144
145
|
/**
|
|
145
146
|
* Get a tracer from the active provider.
|
|
146
147
|
* Returns the no-op tracer when ext-observability-opentelemetry is not installed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-shim.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/tracing/api-shim.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api-shim.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/tracing/api-shim.ts"],"names":[],"mappings":"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"}
|
|
@@ -96,6 +96,7 @@ function createNoopProvider() {
|
|
|
96
96
|
// Global provider state
|
|
97
97
|
// ---------------------------------------------------------------------------
|
|
98
98
|
let _provider = createNoopProvider();
|
|
99
|
+
let _providerRevision = 0;
|
|
99
100
|
let _activeContext = NOOP_CONTEXT;
|
|
100
101
|
let _propagator = null;
|
|
101
102
|
/**
|
|
@@ -118,10 +119,14 @@ export function setGlobalActiveSpanAccessor(accessor) {
|
|
|
118
119
|
*/
|
|
119
120
|
export function setGlobalTracerProvider(p) {
|
|
120
121
|
_provider = p;
|
|
122
|
+
_providerRevision++;
|
|
121
123
|
}
|
|
122
124
|
export function getGlobalTracerProvider() {
|
|
123
125
|
return _provider;
|
|
124
126
|
}
|
|
127
|
+
export function getTracerProviderRevision() {
|
|
128
|
+
return _providerRevision;
|
|
129
|
+
}
|
|
125
130
|
/**
|
|
126
131
|
* Get a tracer from the active provider.
|
|
127
132
|
* Returns the no-op tracer when ext-observability-opentelemetry is not installed.
|
|
@@ -159,6 +164,7 @@ export const trace = {
|
|
|
159
164
|
},
|
|
160
165
|
setGlobalTracerProvider(p) {
|
|
161
166
|
_provider = p;
|
|
167
|
+
_providerRevision++;
|
|
162
168
|
},
|
|
163
169
|
getGlobalTracerProvider() {
|
|
164
170
|
return _provider;
|
|
@@ -227,6 +233,7 @@ export function getGlobalMetricsAPI() {
|
|
|
227
233
|
// ---------------------------------------------------------------------------
|
|
228
234
|
export function _resetShimForTests() {
|
|
229
235
|
_provider = createNoopProvider();
|
|
236
|
+
_providerRevision++;
|
|
230
237
|
_activeContext = NOOP_CONTEXT;
|
|
231
238
|
_propagator = null;
|
|
232
239
|
_metricsApi = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlp-setup.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/tracing/otlp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;4BAY4B;AAC5B,OAAO,4BAA4B,CAAC;AAMpC,OAAO,EACL,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"otlp-setup.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/tracing/otlp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;4BAY4B;AAC5B,OAAO,4BAA4B,CAAC;AAMpC,OAAO,EACL,KAAK,OAAO,EAOZ,KAAK,IAAI,EAKV,MAAM,eAAe,CAAC;AAIvB,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AA6DD,sCAAsC;AACtC,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD;AAED,qCAAqC;AACrC,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,0DAA0D;AAC1D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5D;AAcD,oBAAoB;AACpB,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,CAAC,EACX,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,CAAC,CAoBH;AAED,2BAA2B;AAC3B,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAKpE;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIpD;AAED,0BAA0B;AAC1B,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,OAAO,GACtB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CASzC;AAED,yCAAyC;AACzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAoBpF;AAED,4BAA4B;AAC5B,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACpD,IAAI,CAKN;AAED,mCAAmC;AACnC,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACpD,IAAI,CAKN;AAED,wBAAwB;AACxB,wBAAsB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3F;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,IAAI;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAMvE"}
|
|
@@ -15,7 +15,7 @@ import "../../../_dnt.polyfills.js";
|
|
|
15
15
|
import { getEnv } from "../../platform/compat/process.js";
|
|
16
16
|
import { isTruthyEnvValue } from "../../utils/constants/env.js";
|
|
17
17
|
import { serverLogger } from "../../utils/logger/logger.js";
|
|
18
|
-
import { context as shimContext, defaultTextMapGetter, defaultTextMapSetter, getTracer, propagation as shimPropagation, SpanKind, SpanStatusCode, trace as shimTrace, } from "./api-shim.js";
|
|
18
|
+
import { context as shimContext, defaultTextMapGetter, defaultTextMapSetter, getTracer, getTracerProviderRevision, propagation as shimPropagation, SpanKind, SpanStatusCode, trace as shimTrace, } from "./api-shim.js";
|
|
19
19
|
const logger = serverLogger.component("otel");
|
|
20
20
|
function parseHeaders(headerString) {
|
|
21
21
|
if (!headerString)
|
|
@@ -46,6 +46,19 @@ function getConfig() {
|
|
|
46
46
|
headers: parseHeaders(getEnv("OTEL_EXPORTER_OTLP_HEADERS")),
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
+
let cachedTracingRuntime;
|
|
50
|
+
function getTracingRuntime() {
|
|
51
|
+
const providerRevision = getTracerProviderRevision();
|
|
52
|
+
if (!cachedTracingRuntime || cachedTracingRuntime.providerRevision !== providerRevision) {
|
|
53
|
+
const config = getConfig();
|
|
54
|
+
cachedTracingRuntime = {
|
|
55
|
+
providerRevision,
|
|
56
|
+
config,
|
|
57
|
+
tracer: getTracer(config.serviceName),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return cachedTracingRuntime;
|
|
61
|
+
}
|
|
49
62
|
// ---------------------------------------------------------------------------
|
|
50
63
|
// Legacy initialise / shutdown (now delegated to bootstrap.ts + ext)
|
|
51
64
|
// ---------------------------------------------------------------------------
|
|
@@ -87,8 +100,7 @@ function setSpanErrorStatus(span, error) {
|
|
|
87
100
|
}
|
|
88
101
|
/** Applies span. */
|
|
89
102
|
export async function withSpan(name, fn, attributes) {
|
|
90
|
-
const
|
|
91
|
-
const tracer = getTracer(config.serviceName);
|
|
103
|
+
const { tracer } = getTracingRuntime();
|
|
92
104
|
const parentContext = shimContext.active();
|
|
93
105
|
const span = tracer.startSpan(name, { kind: SpanKind.INTERNAL, attributes }, parentContext);
|
|
94
106
|
const spanContext = shimTrace.setSpan(parentContext, span);
|
|
@@ -107,8 +119,7 @@ export async function withSpan(name, fn, attributes) {
|
|
|
107
119
|
}
|
|
108
120
|
/** Applies span sync. */
|
|
109
121
|
export function withSpanSync(name, fn, attributes) {
|
|
110
|
-
const
|
|
111
|
-
const tracer = getTracer(config.serviceName);
|
|
122
|
+
const { tracer } = getTracingRuntime();
|
|
112
123
|
const parentContext = shimContext.active();
|
|
113
124
|
const span = tracer.startSpan(name, { kind: SpanKind.INTERNAL, attributes }, parentContext);
|
|
114
125
|
try {
|
|
@@ -140,8 +151,7 @@ export function injectContext(headers) {
|
|
|
140
151
|
}
|
|
141
152
|
/** Starts server span. */
|
|
142
153
|
export function startServerSpan(method, path, parentContext) {
|
|
143
|
-
const
|
|
144
|
-
const tracer = getTracer(config.serviceName);
|
|
154
|
+
const { tracer } = getTracingRuntime();
|
|
145
155
|
const ctx = (parentContext || shimContext.active());
|
|
146
156
|
const span = tracer.startSpan(`${method} ${path}`, { kind: SpanKind.SERVER }, ctx);
|
|
147
157
|
span.setAttribute("http.method", method);
|
|
@@ -49,9 +49,12 @@ export interface ProxyHandlerOptions {
|
|
|
49
49
|
cache?: TokenCache;
|
|
50
50
|
logger?: ProxyLogger;
|
|
51
51
|
}
|
|
52
|
+
export interface ProxyRequestOptions {
|
|
53
|
+
url?: URL;
|
|
54
|
+
}
|
|
52
55
|
export declare function createProxyHandler(options: ProxyHandlerOptions): {
|
|
53
|
-
processRequest: (req: Request) => Promise<ProxyContext>;
|
|
54
|
-
getTokenForApi: (req: Request) => Promise<string | undefined>;
|
|
56
|
+
processRequest: (req: Request, options?: ProxyRequestOptions) => Promise<ProxyContext>;
|
|
57
|
+
getTokenForApi: (req: Request, options?: ProxyRequestOptions) => Promise<string | undefined>;
|
|
55
58
|
getStats: () => Promise<{
|
|
56
59
|
hits: number;
|
|
57
60
|
misses: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAoDnD;;;;;GAKG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAqHX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAgGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAoDnD;;;;;GAKG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAqHX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAgGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BA+RtD,OAAO,YACH,mBAAmB,KAC3B,OAAO,CAAC,YAAY,CAAC;0BAyQjB,OAAO,YACH,mBAAmB,KAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BAxeH,MAAM,EAAE;;EA4gBpC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAwB7E"}
|
package/esm/src/proxy/handler.js
CHANGED
|
@@ -76,8 +76,8 @@ function isInternalControlPlanePath(pathname) {
|
|
|
76
76
|
pathname.startsWith("/internal/tasks/") ||
|
|
77
77
|
pathname.startsWith("/internal/workflows/");
|
|
78
78
|
}
|
|
79
|
-
function isSignedInternalControlPlaneRequest(req) {
|
|
80
|
-
const pathname =
|
|
79
|
+
function isSignedInternalControlPlaneRequest(req, url) {
|
|
80
|
+
const pathname = url.pathname;
|
|
81
81
|
if (!isInternalControlPlanePath(pathname)) {
|
|
82
82
|
return false;
|
|
83
83
|
}
|
|
@@ -142,8 +142,8 @@ async function lookupProjectByDomain(domain, apiBaseUrl, token, logger) {
|
|
|
142
142
|
}
|
|
143
143
|
}, { "proxy.domain": domain });
|
|
144
144
|
}
|
|
145
|
-
function getRequestHost(req) {
|
|
146
|
-
return req.headers.get("host") ??
|
|
145
|
+
function getRequestHost(req, url) {
|
|
146
|
+
return req.headers.get("host") ?? url.host;
|
|
147
147
|
}
|
|
148
148
|
function getScope(environment) {
|
|
149
149
|
return environment === "preview" ? "preview" : "production";
|
|
@@ -296,8 +296,7 @@ export function createProxyHandler(options) {
|
|
|
296
296
|
error: { status, message, redirectUrl, slug },
|
|
297
297
|
};
|
|
298
298
|
}
|
|
299
|
-
function makeAuthRedirectUrl(
|
|
300
|
-
const url = new URL(req.url);
|
|
299
|
+
function makeAuthRedirectUrl(url) {
|
|
301
300
|
// Collapse leading slashes to prevent protocol-relative open redirects (e.g. "//evil.com/path")
|
|
302
301
|
const safePath = url.pathname.replace(/^\/\/+/, "/");
|
|
303
302
|
let returnPath = safePath + url.search;
|
|
@@ -316,16 +315,16 @@ export function createProxyHandler(options) {
|
|
|
316
315
|
function makeProjectNotFoundContext(base, message, token) {
|
|
317
316
|
return makeErrorContext(base, 404, message, token, undefined, "project-not-found");
|
|
318
317
|
}
|
|
319
|
-
async function resolveRequestToken(req, scope, host, projectSlug, options) {
|
|
318
|
+
async function resolveRequestToken(req, url, scope, host, projectSlug, options) {
|
|
320
319
|
const userToken = extractUserToken(req.headers.get("cookie") ?? "");
|
|
321
320
|
const useSignedInternalControlPlaneToken = options.allowSignedInternalControlPlaneToken &&
|
|
322
|
-
isSignedInternalControlPlaneRequest(req);
|
|
321
|
+
isSignedInternalControlPlaneRequest(req, url);
|
|
323
322
|
let token;
|
|
324
323
|
let tokenFetchError;
|
|
325
324
|
if (useSignedInternalControlPlaneToken) {
|
|
326
325
|
token = req.headers.get("x-token") ?? undefined;
|
|
327
326
|
logger?.debug("Using signed control-plane token for internal request", {
|
|
328
|
-
pathname:
|
|
327
|
+
pathname: url.pathname,
|
|
329
328
|
scope,
|
|
330
329
|
});
|
|
331
330
|
}
|
|
@@ -356,19 +355,19 @@ export function createProxyHandler(options) {
|
|
|
356
355
|
}
|
|
357
356
|
return { token, userToken, tokenFetchError };
|
|
358
357
|
}
|
|
359
|
-
async function checkProtectedAccess(req, matchingEnv, userToken, users, logContext) {
|
|
358
|
+
async function checkProtectedAccess(req, url, matchingEnv, userToken, users, logContext) {
|
|
360
359
|
if (!matchingEnv?.protected)
|
|
361
360
|
return null;
|
|
362
|
-
if (isSignedInternalControlPlaneRequest(req)) {
|
|
361
|
+
if (isSignedInternalControlPlaneRequest(req, url)) {
|
|
363
362
|
logger?.debug("Allowing signed internal control-plane request through protected environment", {
|
|
364
363
|
...logContext,
|
|
365
364
|
environmentName: matchingEnv.name,
|
|
366
|
-
pathname:
|
|
365
|
+
pathname: url.pathname,
|
|
367
366
|
});
|
|
368
367
|
return null;
|
|
369
368
|
}
|
|
370
369
|
if (!userToken) {
|
|
371
|
-
const redirectUrl = makeAuthRedirectUrl(
|
|
370
|
+
const redirectUrl = makeAuthRedirectUrl(url);
|
|
372
371
|
logger?.info("Protected environment requires authentication", {
|
|
373
372
|
...logContext,
|
|
374
373
|
environmentName: matchingEnv.name,
|
|
@@ -378,7 +377,7 @@ export function createProxyHandler(options) {
|
|
|
378
377
|
}
|
|
379
378
|
const userId = await extractUserIdFromToken(userToken, config.apiBaseUrl, logger);
|
|
380
379
|
if (!userId) {
|
|
381
|
-
const redirectUrl = makeAuthRedirectUrl(
|
|
380
|
+
const redirectUrl = makeAuthRedirectUrl(url);
|
|
382
381
|
logger?.info("Could not extract userId from token", {
|
|
383
382
|
...logContext,
|
|
384
383
|
environmentName: matchingEnv.name,
|
|
@@ -396,12 +395,12 @@ export function createProxyHandler(options) {
|
|
|
396
395
|
}
|
|
397
396
|
return null;
|
|
398
397
|
}
|
|
399
|
-
async function resolveReleaseAndProtection(req, token, userToken, lookupKey, envMatcher, logContext) {
|
|
398
|
+
async function resolveReleaseAndProtection(req, url, token, userToken, lookupKey, envMatcher, logContext) {
|
|
400
399
|
const lookupResult = await lookupProjectByDomain(lookupKey, config.apiBaseUrl, token, logger);
|
|
401
400
|
if (!lookupResult)
|
|
402
401
|
return { projectId: undefined, releaseId: undefined };
|
|
403
402
|
const matchingEnv = lookupResult.environments?.find(envMatcher);
|
|
404
|
-
const protectionError = await checkProtectedAccess(req, matchingEnv, userToken, lookupResult.users, logContext);
|
|
403
|
+
const protectionError = await checkProtectedAccess(req, url, matchingEnv, userToken, lookupResult.users, logContext);
|
|
405
404
|
if (protectionError)
|
|
406
405
|
return { error: protectionError };
|
|
407
406
|
return {
|
|
@@ -410,8 +409,9 @@ export function createProxyHandler(options) {
|
|
|
410
409
|
environmentId: matchingEnv?.id,
|
|
411
410
|
};
|
|
412
411
|
}
|
|
413
|
-
async function processRequest(req) {
|
|
414
|
-
const
|
|
412
|
+
async function processRequest(req, options = {}) {
|
|
413
|
+
const url = options.url ?? new URL(req.url);
|
|
414
|
+
const rawHost = getRequestHost(req, url);
|
|
415
415
|
const host = rawHost.replace(/:\d+$/, "");
|
|
416
416
|
const parsedDomain = parseProjectDomain(host);
|
|
417
417
|
const scope = getScope(parsedDomain.environment);
|
|
@@ -450,7 +450,7 @@ export function createProxyHandler(options) {
|
|
|
450
450
|
logger?.debug("Local project, skipping token fetch", { localPath });
|
|
451
451
|
}
|
|
452
452
|
else {
|
|
453
|
-
({ token, userToken, tokenFetchError } = await resolveRequestToken(req, scope, host, projectSlug, {
|
|
453
|
+
({ token, userToken, tokenFetchError } = await resolveRequestToken(req, url, scope, host, projectSlug, {
|
|
454
454
|
allowSignedInternalControlPlaneToken: true,
|
|
455
455
|
tokenFetchErrorMessage: "Token fetch failed",
|
|
456
456
|
}));
|
|
@@ -498,7 +498,7 @@ export function createProxyHandler(options) {
|
|
|
498
498
|
const matchingEnv = lookupResult.environments?.find((env) => env.domains?.some((d) => d.toLowerCase() === normalizedHost));
|
|
499
499
|
releaseId = matchingEnv?.active_release_id ?? undefined;
|
|
500
500
|
environmentId = matchingEnv?.id;
|
|
501
|
-
const protectionError = await checkProtectedAccess(req, matchingEnv, userToken, lookupResult.users, { domain: host });
|
|
501
|
+
const protectionError = await checkProtectedAccess(req, url, matchingEnv, userToken, lookupResult.users, { domain: host });
|
|
502
502
|
if (protectionError) {
|
|
503
503
|
return makeErrorContext(base, protectionError.status, protectionError.message, token, protectionError.redirectUrl);
|
|
504
504
|
}
|
|
@@ -512,7 +512,7 @@ export function createProxyHandler(options) {
|
|
|
512
512
|
}
|
|
513
513
|
else if (projectSlug && scope === "production" && token && parsedDomain.environment) {
|
|
514
514
|
const targetEnv = parsedDomain.environment.toLowerCase();
|
|
515
|
-
const resolved = await resolveReleaseAndProtection(req, token, userToken, projectSlug, (env) => env.name.toLowerCase() === targetEnv, { projectSlug });
|
|
515
|
+
const resolved = await resolveReleaseAndProtection(req, url, token, userToken, projectSlug, (env) => env.name.toLowerCase() === targetEnv, { projectSlug });
|
|
516
516
|
if ("error" in resolved) {
|
|
517
517
|
return makeErrorContext(base, resolved.error.status, resolved.error.message, token, resolved.error.redirectUrl);
|
|
518
518
|
}
|
|
@@ -539,7 +539,7 @@ export function createProxyHandler(options) {
|
|
|
539
539
|
else if (projectSlug && scope === "preview" && token) {
|
|
540
540
|
// Preview uses branch-based content (no releaseId needed), but must
|
|
541
541
|
// still enforce the environment's `protected` flag like other scopes.
|
|
542
|
-
const resolved = await resolveReleaseAndProtection(req, token, userToken, projectSlug, (env) => env.name.toLowerCase() === "preview", { projectSlug });
|
|
542
|
+
const resolved = await resolveReleaseAndProtection(req, url, token, userToken, projectSlug, (env) => env.name.toLowerCase() === "preview", { projectSlug });
|
|
543
543
|
if ("error" in resolved) {
|
|
544
544
|
return makeErrorContext(base, resolved.error.status, resolved.error.message, token, resolved.error.redirectUrl);
|
|
545
545
|
}
|
|
@@ -582,13 +582,14 @@ export function createProxyHandler(options) {
|
|
|
582
582
|
isLocalProject,
|
|
583
583
|
};
|
|
584
584
|
}
|
|
585
|
-
async function getTokenForApi(req) {
|
|
586
|
-
const
|
|
585
|
+
async function getTokenForApi(req, options = {}) {
|
|
586
|
+
const url = options.url ?? new URL(req.url);
|
|
587
|
+
const rawHost = getRequestHost(req, url);
|
|
587
588
|
const host = rawHost.replace(/:\d+$/, "");
|
|
588
589
|
const parsedDomain = parseProjectDomain(host);
|
|
589
590
|
const scope = getScope(parsedDomain.environment);
|
|
590
591
|
const projectSlug = parsedDomain.slug ?? undefined;
|
|
591
|
-
const { token } = await resolveRequestToken(req, scope, host, projectSlug, {
|
|
592
|
+
const { token } = await resolveRequestToken(req, url, scope, host, projectSlug, {
|
|
592
593
|
tokenFetchErrorMessage: "Token fetch failed for API",
|
|
593
594
|
});
|
|
594
595
|
return token;
|