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.
Files changed (91) hide show
  1. package/esm/cli/templates/manifest.js +2 -2
  2. package/esm/deno.js +1 -1
  3. package/esm/src/build/production-build/static-generation.d.ts.map +1 -1
  4. package/esm/src/build/production-build/static-generation.js +2 -0
  5. package/esm/src/cache/backends/api.d.ts.map +1 -1
  6. package/esm/src/cache/backends/api.js +9 -5
  7. package/esm/src/cache/backends/disk.d.ts +1 -1
  8. package/esm/src/cache/backends/disk.d.ts.map +1 -1
  9. package/esm/src/cache/backends/disk.js +41 -13
  10. package/esm/src/cache/backends/glob.d.ts +6 -0
  11. package/esm/src/cache/backends/glob.d.ts.map +1 -0
  12. package/esm/src/cache/backends/glob.js +41 -0
  13. package/esm/src/cache/backends/memory.d.ts +1 -1
  14. package/esm/src/cache/backends/memory.d.ts.map +1 -1
  15. package/esm/src/cache/backends/memory.js +14 -12
  16. package/esm/src/cache/backends/redis.d.ts.map +1 -1
  17. package/esm/src/cache/backends/redis.js +33 -7
  18. package/esm/src/cache/dependency-graph.d.ts +1 -0
  19. package/esm/src/cache/dependency-graph.d.ts.map +1 -1
  20. package/esm/src/cache/dependency-graph.js +15 -1
  21. package/esm/src/cache/paths.d.ts.map +1 -1
  22. package/esm/src/cache/paths.js +5 -0
  23. package/esm/src/embedding/index.d.ts +4 -1
  24. package/esm/src/embedding/index.d.ts.map +1 -1
  25. package/esm/src/embedding/index.js +3 -1
  26. package/esm/src/embedding/rag-store.d.ts.map +1 -1
  27. package/esm/src/embedding/rag-store.js +157 -8
  28. package/esm/src/embedding/react/use-uploads.d.ts +1 -0
  29. package/esm/src/embedding/react/use-uploads.d.ts.map +1 -1
  30. package/esm/src/embedding/react/use-uploads.js +4 -1
  31. package/esm/src/embedding/upload-handler.d.ts +29 -8
  32. package/esm/src/embedding/upload-handler.d.ts.map +1 -1
  33. package/esm/src/embedding/upload-handler.js +66 -6
  34. package/esm/src/html/html-shell-generator.js +5 -5
  35. package/esm/src/html/nonce-injection.d.ts.map +1 -1
  36. package/esm/src/html/nonce-injection.js +11 -4
  37. package/esm/src/html/utils.d.ts +5 -0
  38. package/esm/src/html/utils.d.ts.map +1 -1
  39. package/esm/src/html/utils.js +19 -9
  40. package/esm/src/middleware/builtin/security/redis-rate-limit.d.ts +2 -0
  41. package/esm/src/middleware/builtin/security/redis-rate-limit.d.ts.map +1 -1
  42. package/esm/src/middleware/builtin/security/redis-rate-limit.js +46 -13
  43. package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.d.ts.map +1 -1
  44. package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.js +12 -5
  45. package/esm/src/modules/server/module-batch-handler.d.ts +1 -0
  46. package/esm/src/modules/server/module-batch-handler.d.ts.map +1 -1
  47. package/esm/src/modules/server/module-batch-handler.js +52 -26
  48. package/esm/src/modules/server/module-server.d.ts.map +1 -1
  49. package/esm/src/modules/server/module-server.js +87 -69
  50. package/esm/src/modules/server/module-source-resolution-cache.d.ts +16 -0
  51. package/esm/src/modules/server/module-source-resolution-cache.d.ts.map +1 -0
  52. package/esm/src/modules/server/module-source-resolution-cache.js +43 -0
  53. package/esm/src/oauth/providers/base.d.ts +0 -2
  54. package/esm/src/oauth/providers/base.d.ts.map +1 -1
  55. package/esm/src/oauth/providers/base.js +35 -10
  56. package/esm/src/oauth/token-store/memory.d.ts +7 -0
  57. package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
  58. package/esm/src/oauth/token-store/memory.js +14 -1
  59. package/esm/src/observability/auto-instrument/http-instrumentation.d.ts.map +1 -1
  60. package/esm/src/observability/auto-instrument/http-instrumentation.js +10 -6
  61. package/esm/src/observability/file-log-subscriber.d.ts +1 -0
  62. package/esm/src/observability/file-log-subscriber.d.ts.map +1 -1
  63. package/esm/src/observability/file-log-subscriber.js +2 -1
  64. package/esm/src/observability/tracing/api-shim.d.ts +1 -0
  65. package/esm/src/observability/tracing/api-shim.d.ts.map +1 -1
  66. package/esm/src/observability/tracing/api-shim.js +7 -0
  67. package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
  68. package/esm/src/observability/tracing/otlp-setup.js +17 -7
  69. package/esm/src/proxy/handler.d.ts +5 -2
  70. package/esm/src/proxy/handler.d.ts.map +1 -1
  71. package/esm/src/proxy/handler.js +26 -25
  72. package/esm/src/proxy/main.js +8 -11
  73. package/esm/src/rendering/renderer.d.ts.map +1 -1
  74. package/esm/src/rendering/renderer.js +32 -12
  75. package/esm/src/server/context/cache-invalidation.d.ts.map +1 -1
  76. package/esm/src/server/context/cache-invalidation.js +2 -0
  77. package/esm/src/server/handlers/dev/scripts/error-overlay.d.ts.map +1 -1
  78. package/esm/src/server/handlers/dev/scripts/error-overlay.js +32 -18
  79. package/esm/src/server/handlers/monitoring/client-log.handler.d.ts +1 -0
  80. package/esm/src/server/handlers/monitoring/client-log.handler.d.ts.map +1 -1
  81. package/esm/src/server/handlers/monitoring/client-log.handler.js +39 -5
  82. package/esm/src/server/handlers/request/module/batch-module-handler.d.ts.map +1 -1
  83. package/esm/src/server/handlers/request/module/batch-module-handler.js +2 -1
  84. package/esm/src/utils/logger/redact.d.ts +10 -0
  85. package/esm/src/utils/logger/redact.d.ts.map +1 -1
  86. package/esm/src/utils/logger/redact.js +60 -1
  87. package/esm/src/utils/redis-client.d.ts +1 -0
  88. package/esm/src/utils/redis-client.d.ts.map +1 -1
  89. package/esm/src/utils/version-constant.d.ts +1 -1
  90. package/esm/src/utils/version-constant.js +1 -1
  91. 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
- const key = this.refreshKey(userId);
274
- const existingRefresh = this.refreshPromises.get(key);
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
- this.refreshPromises.set(key, refreshPromise);
305
+ setRefreshInFlight(tokenStore, key, refreshPromise);
279
306
  try {
280
307
  return await refreshPromise;
281
308
  }
282
309
  finally {
283
- if (this.refreshPromises.get(key) === refreshPromise) {
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;AAgB7E,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAS;gBAExB,SAAS,SAAY,EAAE,OAAO,GAAE,uBAA4B;IAOxE,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;IAM9D;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAU7D,OAAO,CAAC,oBAAoB;IAS5B,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"}
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":"AAiCA,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,CAqDd"}
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
- const tracer = trace.getTracer("veryfront-http");
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 tracer.startActiveSpan("http.server.request", { kind: SpanKind.SERVER, attributes: httpAttrs }, parentContext, async (span) => {
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": urlString,
60
- "http.target": urlString,
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 tracer.startActiveSpan("http.client.fetch", { kind: SpanKind.CLIENT, attributes: fetchAttrs }, async (span) => {
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(":", ""),
@@ -21,6 +21,7 @@ export declare class FileLogSubscriber {
21
21
  private closed;
22
22
  private permissionFailed;
23
23
  private config;
24
+ private readonly encoder;
24
25
  constructor(config: FileLogConfig);
25
26
  getSubscriber(): LogSubscriber;
26
27
  private enqueue;
@@ -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;gBAElB,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"}
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 = new TextEncoder().encode(line);
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,EAMZ,KAAK,IAAI,EAIV,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;AAuCD,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,CAuBZ;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,CAqBH;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,CAUzC;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"}
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 config = getConfig();
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 config = getConfig();
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 config = getConfig();
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;0BA2R1B,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BAmQ/B,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BA1d7C,MAAM,EAAE;;EAsfpC;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"}
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"}
@@ -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 = new URL(req.url).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") ?? new URL(req.url).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(req) {
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: new URL(req.url).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: new URL(req.url).pathname,
365
+ pathname: url.pathname,
367
366
  });
368
367
  return null;
369
368
  }
370
369
  if (!userToken) {
371
- const redirectUrl = makeAuthRedirectUrl(req);
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(req);
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 rawHost = getRequestHost(req);
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 rawHost = getRequestHost(req);
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;