@interfere/next 10.0.0 → 10.0.1-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +6 -1
  2. package/dist/config.d.mts +1 -0
  3. package/dist/config.d.mts.map +1 -1
  4. package/dist/config.mjs +1 -110
  5. package/dist/config.mjs.map +1 -1
  6. package/dist/instrument-client.d.mts +7 -10
  7. package/dist/instrument-client.d.mts.map +1 -1
  8. package/dist/instrument-client.mjs +1 -9
  9. package/dist/instrument-client.mjs.map +1 -1
  10. package/dist/instrumentation-client.mjs +1 -22
  11. package/dist/instrumentation-client.mjs.map +1 -1
  12. package/dist/instrumentation.d.mts +3 -3
  13. package/dist/instrumentation.d.mts.map +1 -1
  14. package/dist/instrumentation.edge.d.mts +1 -1
  15. package/dist/instrumentation.edge.d.mts.map +1 -1
  16. package/dist/instrumentation.edge.mjs +1 -34
  17. package/dist/instrumentation.edge.mjs.map +1 -1
  18. package/dist/instrumentation.mjs +1 -165
  19. package/dist/instrumentation.mjs.map +1 -1
  20. package/dist/internal/build/configure-build.d.mts +2 -0
  21. package/dist/internal/build/configure-build.d.mts.map +1 -1
  22. package/dist/internal/build/configure-build.mjs +1 -95
  23. package/dist/internal/build/configure-build.mjs.map +1 -1
  24. package/dist/internal/build/detect-bundler.d.mts +3 -2
  25. package/dist/internal/build/detect-bundler.d.mts.map +1 -1
  26. package/dist/internal/build/detect-bundler.mjs +1 -9
  27. package/dist/internal/build/detect-bundler.mjs.map +1 -1
  28. package/dist/internal/build/pipeline.d.mts +5 -7
  29. package/dist/internal/build/pipeline.d.mts.map +1 -1
  30. package/dist/internal/build/pipeline.mjs +1 -82
  31. package/dist/internal/build/pipeline.mjs.map +1 -1
  32. package/dist/internal/build/release/destinations/index.mjs +1 -13
  33. package/dist/internal/build/release/destinations/index.mjs.map +1 -1
  34. package/dist/internal/build/release/destinations/vercel.d.mts.map +1 -1
  35. package/dist/internal/build/release/destinations/vercel.mjs +1 -23
  36. package/dist/internal/build/release/destinations/vercel.mjs.map +1 -1
  37. package/dist/internal/build/release/git.d.mts.map +1 -1
  38. package/dist/internal/build/release/git.mjs +1 -32
  39. package/dist/internal/build/release/git.mjs.map +1 -1
  40. package/dist/internal/build/release/index.mjs +1 -18
  41. package/dist/internal/build/release/index.mjs.map +1 -1
  42. package/dist/internal/build/release/sources/github.d.mts.map +1 -1
  43. package/dist/internal/build/release/sources/github.mjs +1 -13
  44. package/dist/internal/build/release/sources/github.mjs.map +1 -1
  45. package/dist/internal/build/release/sources/index.d.mts.map +1 -1
  46. package/dist/internal/build/release/sources/index.mjs +1 -20
  47. package/dist/internal/build/release/sources/index.mjs.map +1 -1
  48. package/dist/internal/build/source-maps/discover-turbopack.d.mts.map +1 -1
  49. package/dist/internal/build/source-maps/discover-turbopack.mjs +1 -68
  50. package/dist/internal/build/source-maps/discover-turbopack.mjs.map +1 -1
  51. package/dist/internal/build/source-maps/discover-webpack.d.mts.map +1 -1
  52. package/dist/internal/build/source-maps/discover-webpack.mjs +1 -112
  53. package/dist/internal/build/source-maps/discover-webpack.mjs.map +1 -1
  54. package/dist/internal/build/source-maps/discover.d.mts +4 -4
  55. package/dist/internal/build/source-maps/discover.d.mts.map +1 -1
  56. package/dist/internal/build/source-maps/discover.mjs +1 -26
  57. package/dist/internal/build/source-maps/discover.mjs.map +1 -1
  58. package/dist/internal/build/source-maps/index.d.mts.map +1 -1
  59. package/dist/internal/build/source-maps/index.mjs +1 -18
  60. package/dist/internal/build/source-maps/index.mjs.map +1 -1
  61. package/dist/internal/build/source-maps/paths.d.mts.map +1 -1
  62. package/dist/internal/build/source-maps/paths.mjs +1 -49
  63. package/dist/internal/build/source-maps/paths.mjs.map +1 -1
  64. package/dist/internal/build/source-maps/upload.d.mts.map +1 -1
  65. package/dist/internal/build/source-maps/upload.mjs +1 -134
  66. package/dist/internal/build/source-maps/upload.mjs.map +1 -1
  67. package/dist/internal/build/value-injection-loader.d.mts.map +1 -1
  68. package/dist/internal/build/value-injection-loader.mjs +2 -24
  69. package/dist/internal/build/value-injection-loader.mjs.map +1 -1
  70. package/dist/internal/env.d.mts +2 -1
  71. package/dist/internal/env.d.mts.map +1 -1
  72. package/dist/internal/env.mjs +1 -32
  73. package/dist/internal/env.mjs.map +1 -1
  74. package/dist/internal/logger.d.mts.map +1 -1
  75. package/dist/internal/logger.mjs +1 -68
  76. package/dist/internal/logger.mjs.map +1 -1
  77. package/dist/internal/release-slug.d.mts.map +1 -1
  78. package/dist/internal/release-slug.mjs +1 -32
  79. package/dist/internal/release-slug.mjs.map +1 -1
  80. package/dist/internal/route/handle-get.d.mts.map +1 -1
  81. package/dist/internal/route/handle-get.mjs +1 -43
  82. package/dist/internal/route/handle-get.mjs.map +1 -1
  83. package/dist/internal/route/handle-post.d.mts.map +1 -1
  84. package/dist/internal/route/handle-post.mjs +1 -31
  85. package/dist/internal/route/handle-post.mjs.map +1 -1
  86. package/dist/internal/route/proxy.d.mts +8 -6
  87. package/dist/internal/route/proxy.d.mts.map +1 -1
  88. package/dist/internal/route/proxy.mjs +1 -134
  89. package/dist/internal/route/proxy.mjs.map +1 -1
  90. package/dist/internal/server/capture.d.mts.map +1 -1
  91. package/dist/internal/server/capture.mjs +1 -89
  92. package/dist/internal/server/capture.mjs.map +1 -1
  93. package/dist/internal/server/console-bridge.d.mts.map +1 -1
  94. package/dist/internal/server/console-bridge.mjs +1 -112
  95. package/dist/internal/server/console-bridge.mjs.map +1 -1
  96. package/dist/internal/server/id-generator.d.mts.map +1 -1
  97. package/dist/internal/server/id-generator.mjs +1 -68
  98. package/dist/internal/server/id-generator.mjs.map +1 -1
  99. package/dist/internal/server/instrumentation-options.d.mts.map +1 -1
  100. package/dist/internal/server/instrumentation-options.mjs +1 -1
  101. package/dist/internal/server/remote-config.d.mts.map +1 -1
  102. package/dist/internal/server/remote-config.mjs +1 -29
  103. package/dist/internal/server/remote-config.mjs.map +1 -1
  104. package/dist/internal/server/trace-meta.d.mts +1 -3
  105. package/dist/internal/server/trace-meta.d.mts.map +1 -1
  106. package/dist/internal/server/trace-meta.mjs +1 -41
  107. package/dist/internal/server/trace-meta.mjs.map +1 -1
  108. package/dist/internal/server/traceparent.d.mts.map +1 -1
  109. package/dist/internal/server/traceparent.mjs +1 -26
  110. package/dist/internal/server/traceparent.mjs.map +1 -1
  111. package/dist/internal/server/types.d.mts.map +1 -1
  112. package/dist/internal/server/types.mjs +1 -1
  113. package/dist/internal/setup-warnings.d.mts +1 -1
  114. package/dist/internal/setup-warnings.d.mts.map +1 -1
  115. package/dist/internal/setup-warnings.mjs +1 -45
  116. package/dist/internal/setup-warnings.mjs.map +1 -1
  117. package/dist/internal/url.d.mts +4 -0
  118. package/dist/internal/url.d.mts.map +1 -0
  119. package/dist/internal/url.mjs +1 -0
  120. package/dist/internal/url.mjs.map +1 -0
  121. package/dist/internal/version.mjs +1 -5
  122. package/dist/internal/version.mjs.map +1 -1
  123. package/dist/package.mjs +1 -5
  124. package/dist/provider.d.mts.map +1 -1
  125. package/dist/provider.mjs +1 -25
  126. package/dist/provider.mjs.map +1 -1
  127. package/dist/route-handler.d.mts.map +1 -1
  128. package/dist/route-handler.mjs +1 -33
  129. package/dist/route-handler.mjs.map +1 -1
  130. package/dist/server.mjs +1 -3
  131. package/package.json +29 -30
@@ -1 +1 @@
1
- {"version":3,"file":"id-generator.mjs","names":[],"sources":["../../../src/internal/server/id-generator.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport {\n type IdGenerator,\n RandomIdGenerator,\n} from \"@opentelemetry/sdk-trace-base\";\n\nconst TRACE_ID_HEX_LEN = 32;\nconst SPAN_ID_HEX_LEN = 16;\nconst TRACE_PREFIX_HEX_LEN = 24;\nconst SPAN_PREFIX_HEX_LEN = 12;\nconst TRACE_COUNTER_HEX_LEN = TRACE_ID_HEX_LEN - TRACE_PREFIX_HEX_LEN;\nconst SPAN_COUNTER_HEX_LEN = SPAN_ID_HEX_LEN - SPAN_PREFIX_HEX_LEN;\nconst TRACE_COUNTER_MODULUS = 2 ** (TRACE_COUNTER_HEX_LEN * 4);\nconst SPAN_COUNTER_MODULUS = 2 ** (SPAN_COUNTER_HEX_LEN * 4);\n\n/**\n * IdGenerator hybrid that uses OTel's default `RandomIdGenerator` whenever\n * available and falls back to a counter-based generator inside Next 16's\n * prerender contexts.\n *\n * Why: Next 16's prerender extension throws synchronously on any\n * `Math.random()` / `crypto.getRandomValues()` call inside a Server\n * Component that hasn't first awaited Request data\n * (`next-prerender-random` / `next-prerender-crypto`). OTel's default\n * generator hits `Math.random()` on every span creation, so spans Next\n * opens around prerendered route renders blow up the build.\n *\n * The hybrid path keeps full 128-bit trace IDs / 64-bit span IDs for the\n * common case (SSR, runtime requests, fluid-compute invocations) and only\n * degrades inside prerender — where the alternative is build failure.\n *\n * Inside prerender, IDs are minted from a per-process random prefix\n * (seeded once at construction time, outside any prerender ALS frame) plus\n * a monotonic counter. Counter widths are masked to keep IDs at their\n * spec-mandated lengths even after wrap.\n */\nexport class PrerenderSafeIdGenerator implements IdGenerator {\n private readonly random = new RandomIdGenerator();\n private readonly tracePrefix: string;\n private readonly spanPrefix: string;\n private traceCounter = 0;\n private spanCounter = 0;\n\n constructor() {\n // Seeded once at `register()` time — module init runs outside any\n // prerender ALS frame, so `randomBytes` is permitted here even if\n // every later call from inside a render is not.\n const seed = randomBytes((TRACE_PREFIX_HEX_LEN + SPAN_PREFIX_HEX_LEN) / 2);\n this.tracePrefix = seed\n .subarray(0, TRACE_PREFIX_HEX_LEN / 2)\n .toString(\"hex\");\n this.spanPrefix = seed.subarray(TRACE_PREFIX_HEX_LEN / 2).toString(\"hex\");\n }\n\n generateTraceId(): string {\n try {\n return this.random.generateTraceId();\n } catch {\n return this.fallbackTraceId();\n }\n }\n\n generateSpanId(): string {\n try {\n return this.random.generateSpanId();\n } catch {\n return this.fallbackSpanId();\n }\n }\n\n private fallbackTraceId(): string {\n this.traceCounter = (this.traceCounter + 1) % TRACE_COUNTER_MODULUS;\n return (\n this.tracePrefix +\n this.traceCounter.toString(16).padStart(TRACE_COUNTER_HEX_LEN, \"0\")\n );\n }\n\n private fallbackSpanId(): string {\n this.spanCounter = (this.spanCounter + 1) % SPAN_COUNTER_MODULUS;\n return (\n this.spanPrefix +\n this.spanCounter.toString(16).padStart(SPAN_COUNTER_HEX_LEN, \"0\")\n );\n }\n}\n"],"mappings":";;;AAMA,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB,mBAAmB;AACjD,MAAM,uBAAuB,kBAAkB;AAC/C,MAAM,wBAAwB,MAAM,wBAAwB;AAC5D,MAAM,uBAAuB,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;AAuB1D,IAAa,2BAAb,MAA6D;CAC3D,SAA0B,IAAI,mBAAmB;CACjD;CACA;CACA,eAAuB;CACvB,cAAsB;CAEtB,cAAc;EAIZ,MAAM,OAAO,aAAa,uBAAuB,uBAAuB,EAAE;EAC1E,KAAK,cAAc,KAChB,SAAS,GAAG,uBAAuB,EAAE,CACrC,SAAS,MAAM;EAClB,KAAK,aAAa,KAAK,SAAS,uBAAuB,EAAE,CAAC,SAAS,MAAM;;CAG3E,kBAA0B;EACxB,IAAI;GACF,OAAO,KAAK,OAAO,iBAAiB;UAC9B;GACN,OAAO,KAAK,iBAAiB;;;CAIjC,iBAAyB;EACvB,IAAI;GACF,OAAO,KAAK,OAAO,gBAAgB;UAC7B;GACN,OAAO,KAAK,gBAAgB;;;CAIhC,kBAAkC;EAChC,KAAK,gBAAgB,KAAK,eAAe,KAAK;EAC9C,OACE,KAAK,cACL,KAAK,aAAa,SAAS,GAAG,CAAC,SAAS,uBAAuB,IAAI;;CAIvE,iBAAiC;EAC/B,KAAK,eAAe,KAAK,cAAc,KAAK;EAC5C,OACE,KAAK,aACL,KAAK,YAAY,SAAS,GAAG,CAAC,SAAS,sBAAsB,IAAI"}
1
+ {"version":3,"file":"id-generator.mjs","names":[],"sources":["../../../src/internal/server/id-generator.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport {\n type IdGenerator,\n RandomIdGenerator,\n} from \"@opentelemetry/sdk-trace-base\";\n\nconst TRACE_ID_HEX_LEN = 32;\nconst SPAN_ID_HEX_LEN = 16;\nconst TRACE_PREFIX_HEX_LEN = 24;\nconst SPAN_PREFIX_HEX_LEN = 12;\nconst TRACE_COUNTER_HEX_LEN = TRACE_ID_HEX_LEN - TRACE_PREFIX_HEX_LEN;\nconst SPAN_COUNTER_HEX_LEN = SPAN_ID_HEX_LEN - SPAN_PREFIX_HEX_LEN;\nconst TRACE_COUNTER_MODULUS = 2 ** (TRACE_COUNTER_HEX_LEN * 4);\nconst SPAN_COUNTER_MODULUS = 2 ** (SPAN_COUNTER_HEX_LEN * 4);\n\n/**\n * IdGenerator hybrid that uses OTel's default `RandomIdGenerator` whenever\n * available and falls back to a counter-based generator inside Next 16's\n * prerender contexts.\n *\n * Why: Next 16's prerender extension throws synchronously on any\n * `Math.random()` / `crypto.getRandomValues()` call inside a Server\n * Component that hasn't first awaited Request data\n * (`next-prerender-random` / `next-prerender-crypto`). OTel's default\n * generator hits `Math.random()` on every span creation, so spans Next\n * opens around prerendered route renders blow up the build.\n *\n * The hybrid path keeps full 128-bit trace IDs / 64-bit span IDs for the\n * common case (SSR, runtime requests, fluid-compute invocations) and only\n * degrades inside prerender — where the alternative is build failure.\n *\n * Inside prerender, IDs are minted from a per-process random prefix\n * (seeded once at construction time, outside any prerender ALS frame) plus\n * a monotonic counter. Counter widths are masked to keep IDs at their\n * spec-mandated lengths even after wrap.\n */\nexport class PrerenderSafeIdGenerator implements IdGenerator {\n private readonly random = new RandomIdGenerator();\n private readonly tracePrefix: string;\n private readonly spanPrefix: string;\n private traceCounter = 0;\n private spanCounter = 0;\n\n constructor() {\n // Seeded once at `register()` time — module init runs outside any\n // prerender ALS frame, so `randomBytes` is permitted here even if\n // every later call from inside a render is not.\n const seed = randomBytes((TRACE_PREFIX_HEX_LEN + SPAN_PREFIX_HEX_LEN) / 2);\n this.tracePrefix = seed\n .subarray(0, TRACE_PREFIX_HEX_LEN / 2)\n .toString(\"hex\");\n this.spanPrefix = seed.subarray(TRACE_PREFIX_HEX_LEN / 2).toString(\"hex\");\n }\n\n generateTraceId(): string {\n try {\n return this.random.generateTraceId();\n } catch {\n return this.fallbackTraceId();\n }\n }\n\n generateSpanId(): string {\n try {\n return this.random.generateSpanId();\n } catch {\n return this.fallbackSpanId();\n }\n }\n\n private fallbackTraceId(): string {\n this.traceCounter = (this.traceCounter + 1) % TRACE_COUNTER_MODULUS;\n return (\n this.tracePrefix +\n this.traceCounter.toString(16).padStart(TRACE_COUNTER_HEX_LEN, \"0\")\n );\n }\n\n private fallbackSpanId(): string {\n this.spanCounter = (this.spanCounter + 1) % SPAN_COUNTER_MODULUS;\n return (\n this.spanPrefix +\n this.spanCounter.toString(16).padStart(SPAN_COUNTER_HEX_LEN, \"0\")\n );\n }\n}\n"],"mappings":"kGAMA,MAMM,sBAAwB,GAAM,GAC9B,qBAAuB,GAAM,GAuBnC,IAAa,yBAAb,KAA6D,CAC3D,OAA0B,IAAI,kBAC9B,YACA,WACA,aAAuB,EACvB,YAAsB,EAEtB,aAAc,CAIZ,IAAM,KAAO,YAAa,GAA8C,CAAC,EACzE,KAAK,YAAc,KAChB,SAAS,EAAG,GAAuB,CAAC,EACpC,SAAS,KAAK,EACjB,KAAK,WAAa,KAAK,SAAS,GAAuB,CAAC,EAAE,SAAS,KAAK,CAC1E,CAEA,iBAA0B,CACxB,GAAI,CACF,OAAO,KAAK,OAAO,gBAAgB,CACrC,MAAQ,CACN,OAAO,KAAK,gBAAgB,CAC9B,CACF,CAEA,gBAAyB,CACvB,GAAI,CACF,OAAO,KAAK,OAAO,eAAe,CACpC,MAAQ,CACN,OAAO,KAAK,eAAe,CAC7B,CACF,CAEA,iBAAkC,CAEhC,MADA,MAAK,cAAgB,KAAK,aAAe,GAAK,sBAE5C,KAAK,YACL,KAAK,aAAa,SAAS,EAAE,EAAE,SAAS,EAAuB,GAAG,CAEtE,CAEA,gBAAiC,CAE/B,MADA,MAAK,aAAe,KAAK,YAAc,GAAK,qBAE1C,KAAK,WACL,KAAK,YAAY,SAAS,EAAE,EAAE,SAAS,EAAsB,GAAG,CAEpE,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation-options.d.mts","names":[],"sources":["../../../src/internal/server/instrumentation-options.ts"],"mappings":";;;;;;;AAyBA;;;;;;;;;;;;;;;;;;;UAAiB,4BAAA;EAmDkB;;;;;;;;;EAzCjC,sCAAA,GAAyC,kBAAA;;;;;;;;;;;;EAYzC,gCAAA,GAAmC,YAAA;;;;;;;EAOnC,iCAAA,GAAoC,aAAA;;;;;;;EAOpC,aAAA;;;;;;;EAOA,UAAA,aAAuB,MAAA;;;;;;;;EAQvB,oBAAA,aAAiC,MAAA;;;;;EAKjC,WAAA;AAAA"}
1
+ {"version":3,"file":"instrumentation-options.d.mts","names":[],"sources":["../../../src/internal/server/instrumentation-options.ts"],"mappings":";;;;;;;AAyBA;;;;;;;;;;;;;;;;;;;UAAiB,4BAAA;EAmDkB;;;AAKtB;;;;;;EA9CX,sCAAA,GAAyC,kBAAA;;;;;;;;;;;;EAYzC,gCAAA,GAAmC,YAAA;;;;;;;EAOnC,iCAAA,GAAoC,aAAA;;;;;;;EAOpC,aAAA;;;;;;;EAOA,UAAA,aAAuB,MAAA;;;;;;;;EAQvB,oBAAA,aAAiC,MAAA;;;;;EAKjC,WAAA;AAAA"}
@@ -1 +1 @@
1
- export {};
1
+ export{};
@@ -1 +1 @@
1
- {"version":3,"file":"remote-config.d.mts","names":[],"sources":["../../../src/internal/server/remote-config.ts"],"mappings":";iBAUsB,yBAAA,CAAA,GAA6B,OAAA;AAAA,iBAkCnC,eAAA,CAAgB,MAAA"}
1
+ {"version":3,"file":"remote-config.d.mts","names":[],"sources":["../../../src/internal/server/remote-config.ts"],"mappings":";iBAWsB,yBAAA,CAAA,GAA6B,OAAO;AAAA,iBAoC1C,eAAA,CAAgB,MAAc"}
@@ -1,29 +1 @@
1
- import { isEnabledOnServer, readInterfereEnv } from "../env.mjs";
2
- import { API_PATHS } from "@interfere/constants/api";
3
- //#region src/internal/server/remote-config.ts
4
- let cachedConfig = null;
5
- async function fetchAndCacheRemoteConfig() {
6
- if (!isEnabledOnServer()) return;
7
- const env = readInterfereEnv();
8
- if (env.apiKey === null) return;
9
- try {
10
- const url = `${env.apiUrl}${API_PATHS.CONFIG}`;
11
- const response = await fetch(url, {
12
- method: "GET",
13
- headers: {
14
- "content-type": "application/json",
15
- "x-api-key": env.apiKey
16
- },
17
- signal: AbortSignal.timeout(1e4)
18
- });
19
- if (!response.ok) return;
20
- const config = await response.json();
21
- if (config?.plugins) cachedConfig = config.plugins;
22
- } catch {}
23
- }
24
- function isPluginEnabled(plugin) {
25
- if (!cachedConfig) return true;
26
- return cachedConfig[plugin] !== false;
27
- }
28
- //#endregion
29
- export { fetchAndCacheRemoteConfig, isPluginEnabled };
1
+ import{isEnabledOnServer,readInterfereEnv}from"../env.mjs";import{withPublicKey}from"../url.mjs";import{API_PATHS}from"@interfere/constants/api";let cachedConfig=null;async function fetchAndCacheRemoteConfig(){if(!isEnabledOnServer())return;let env=readInterfereEnv();if(env.publicKey!==null)try{let url=withPublicKey(`${env.apiUrl}${API_PATHS.CONFIG}`,env.publicKey),response=await fetch(url,{method:`GET`,headers:{"content-type":`application/json`},signal:AbortSignal.timeout(1e4)});if(!response.ok)return;let config=await response.json();config?.plugins&&(cachedConfig=config.plugins)}catch{}}function isPluginEnabled(plugin){return cachedConfig?cachedConfig[plugin]!==!1:!0}export{fetchAndCacheRemoteConfig,isPluginEnabled};
@@ -1 +1 @@
1
- {"version":3,"file":"remote-config.mjs","names":[],"sources":["../../../src/internal/server/remote-config.ts"],"sourcesContent":["import { API_PATHS } from \"@interfere/constants/api\";\nimport type {\n RemoteConfig,\n RemotePluginConfig,\n} from \"@interfere/types/sdk/remote-config\";\n\nimport { isEnabledOnServer, readInterfereEnv } from \"../env.js\";\n\nlet cachedConfig: RemotePluginConfig | null = null;\n\nexport async function fetchAndCacheRemoteConfig(): Promise<void> {\n if (!isEnabledOnServer()) {\n return;\n }\n\n const env = readInterfereEnv();\n if (env.apiKey === null) {\n return;\n }\n\n try {\n const url = `${env.apiUrl}${API_PATHS.CONFIG}`;\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n \"x-api-key\": env.apiKey,\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n return;\n }\n\n const config = (await response.json()) as RemoteConfig;\n if (config?.plugins) {\n cachedConfig = config.plugins;\n }\n } catch {\n // Fail silently — all plugins remain enabled\n }\n}\n\nexport function isPluginEnabled(plugin: string): boolean {\n if (!cachedConfig) {\n return true;\n }\n return cachedConfig[plugin as keyof RemotePluginConfig] !== false;\n}\n"],"mappings":";;;AAQA,IAAI,eAA0C;AAE9C,eAAsB,4BAA2C;CAC/D,IAAI,CAAC,mBAAmB,EACtB;CAGF,MAAM,MAAM,kBAAkB;CAC9B,IAAI,IAAI,WAAW,MACjB;CAGF,IAAI;EACF,MAAM,MAAM,GAAG,IAAI,SAAS,UAAU;EACtC,MAAM,WAAW,MAAM,MAAM,KAAK;GAChC,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,aAAa,IAAI;IAClB;GACD,QAAQ,YAAY,QAAQ,IAAO;GACpC,CAAC;EAEF,IAAI,CAAC,SAAS,IACZ;EAGF,MAAM,SAAU,MAAM,SAAS,MAAM;EACrC,IAAI,QAAQ,SACV,eAAe,OAAO;SAElB;;AAKV,SAAgB,gBAAgB,QAAyB;CACvD,IAAI,CAAC,cACH,OAAO;CAET,OAAO,aAAa,YAAwC"}
1
+ {"version":3,"file":"remote-config.mjs","names":[],"sources":["../../../src/internal/server/remote-config.ts"],"sourcesContent":["import { API_PATHS } from \"@interfere/constants/api\";\nimport type {\n RemoteConfig,\n RemotePluginConfig,\n} from \"@interfere/types/sdk/remote-config\";\n\nimport { isEnabledOnServer, readInterfereEnv } from \"../env.js\";\nimport { withPublicKey } from \"../url.js\";\n\nlet cachedConfig: RemotePluginConfig | null = null;\n\nexport async function fetchAndCacheRemoteConfig(): Promise<void> {\n if (!isEnabledOnServer()) {\n return;\n }\n\n const env = readInterfereEnv();\n if (env.publicKey === null) {\n return;\n }\n\n try {\n const url = withPublicKey(\n `${env.apiUrl}${API_PATHS.CONFIG}`,\n env.publicKey\n );\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n return;\n }\n\n const config = (await response.json()) as RemoteConfig;\n if (config?.plugins) {\n cachedConfig = config.plugins;\n }\n } catch {\n // Fail silently — all plugins remain enabled\n }\n}\n\nexport function isPluginEnabled(plugin: string): boolean {\n if (!cachedConfig) {\n return true;\n }\n return cachedConfig[plugin as keyof RemotePluginConfig] !== false;\n}\n"],"mappings":"iJASA,IAAI,aAA0C,KAE9C,eAAsB,2BAA2C,CAC/D,GAAI,CAAC,kBAAkB,EACrB,OAGF,IAAM,IAAM,iBAAiB,EACzB,OAAI,YAAc,KAItB,GAAI,CACF,IAAM,IAAM,cACV,GAAG,IAAI,SAAS,UAAU,SAC1B,IAAI,SACN,EACM,SAAW,MAAM,MAAM,IAAK,CAChC,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,OAAQ,YAAY,QAAQ,GAAM,CACpC,CAAC,EAED,GAAI,CAAC,SAAS,GACZ,OAGF,IAAM,OAAU,MAAM,SAAS,KAAK,EAChC,QAAQ,UACV,aAAe,OAAO,QAE1B,MAAQ,CAER,CACF,CAEA,SAAgB,gBAAgB,OAAyB,CAIvD,OAHK,aAGE,aAAa,UAAwC,GAFnD,EAGX"}
@@ -1,5 +1,3 @@
1
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
1
  //#region src/internal/server/trace-meta.d.ts
4
2
  /**
5
3
  * Server Component that emits a `<meta name="traceparent">` tag so the
@@ -29,6 +27,6 @@ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
29
27
  * missing meta tag the same as no parent — every browser span starts a
30
28
  * fresh root, which is at least internally consistent.
31
29
  */
32
- declare function TraceMeta(): _$react_jsx_runtime0.JSX.Element | null;
30
+ declare function TraceMeta(): import("react/jsx-runtime").JSX.Element | null;
33
31
  //#endregion
34
32
  export { TraceMeta };
@@ -1 +1 @@
1
- {"version":3,"file":"trace-meta.d.mts","names":[],"sources":["../../../src/internal/server/trace-meta.tsx"],"mappings":";;;;;;AA8BA;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,CAAA,GAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"trace-meta.d.mts","names":[],"sources":["../../../src/internal/server/trace-meta.tsx"],"mappings":";;AA8BA;;;;AAAyB;;;;;;;;;;;;;;;;;;;;;;;iBAAT,SAAA,CAAA,+BAAS,GAAA,CAAA,OAAA"}
@@ -1,41 +1 @@
1
- import { activeTraceparent } from "./traceparent.mjs";
2
- import { jsx } from "react/jsx-runtime";
3
- //#region src/internal/server/trace-meta.tsx
4
- /**
5
- * Server Component that emits a `<meta name="traceparent">` tag so the
6
- * client SDK can stitch every browser span onto the server-side trace.
7
- *
8
- * Customer usage — drop into the root layout's `<head>`:
9
- *
10
- * ```tsx
11
- * import { TraceMeta } from "@interfere/next/server";
12
- *
13
- * export default function RootLayout({ children }) {
14
- * return (
15
- * <html>
16
- * <head>
17
- * <TraceMeta />
18
- * </head>
19
- * <body>{children}</body>
20
- * </html>
21
- * );
22
- * }
23
- * ```
24
- *
25
- * Renders nothing when no OTel span is active (dev without OTel
26
- * registered, edge runtime where `@interfere/next/instrumentation`'s
27
- * async `register()` hasn't completed before the layout renders, or
28
- * unsampled traces). The client SDK's propagation reader handles a
29
- * missing meta tag the same as no parent — every browser span starts a
30
- * fresh root, which is at least internally consistent.
31
- */
32
- function TraceMeta() {
33
- const traceparent = activeTraceparent();
34
- if (!traceparent) return null;
35
- return /* @__PURE__ */ jsx("meta", {
36
- content: traceparent,
37
- name: "traceparent"
38
- });
39
- }
40
- //#endregion
41
- export { TraceMeta };
1
+ import{activeTraceparent}from"./traceparent.mjs";import{jsx}from"react/jsx-runtime";function TraceMeta(){let traceparent=activeTraceparent();return traceparent?jsx(`meta`,{content:traceparent,name:`traceparent`}):null}export{TraceMeta};
@@ -1 +1 @@
1
- {"version":3,"file":"trace-meta.mjs","names":[],"sources":["../../../src/internal/server/trace-meta.tsx"],"sourcesContent":["import { activeTraceparent } from \"./traceparent.js\";\n\n/**\n * Server Component that emits a `<meta name=\"traceparent\">` tag so the\n * client SDK can stitch every browser span onto the server-side trace.\n *\n * Customer usage — drop into the root layout's `<head>`:\n *\n * ```tsx\n * import { TraceMeta } from \"@interfere/next/server\";\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html>\n * <head>\n * <TraceMeta />\n * </head>\n * <body>{children}</body>\n * </html>\n * );\n * }\n * ```\n *\n * Renders nothing when no OTel span is active (dev without OTel\n * registered, edge runtime where `@interfere/next/instrumentation`'s\n * async `register()` hasn't completed before the layout renders, or\n * unsampled traces). The client SDK's propagation reader handles a\n * missing meta tag the same as no parent — every browser span starts a\n * fresh root, which is at least internally consistent.\n */\nexport function TraceMeta() {\n const traceparent = activeTraceparent();\n if (!traceparent) {\n return null;\n }\n return <meta content={traceparent} name=\"traceparent\" />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,YAAY;CAC1B,MAAM,cAAc,mBAAmB;CACvC,IAAI,CAAC,aACH,OAAO;CAET,OAAO,oBAAC,QAAD;EAAM,SAAS;EAAa,MAAK;EAAgB,CAAA"}
1
+ {"version":3,"file":"trace-meta.mjs","names":[],"sources":["../../../src/internal/server/trace-meta.tsx"],"sourcesContent":["import { activeTraceparent } from \"./traceparent.js\";\n\n/**\n * Server Component that emits a `<meta name=\"traceparent\">` tag so the\n * client SDK can stitch every browser span onto the server-side trace.\n *\n * Customer usage — drop into the root layout's `<head>`:\n *\n * ```tsx\n * import { TraceMeta } from \"@interfere/next/server\";\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html>\n * <head>\n * <TraceMeta />\n * </head>\n * <body>{children}</body>\n * </html>\n * );\n * }\n * ```\n *\n * Renders nothing when no OTel span is active (dev without OTel\n * registered, edge runtime where `@interfere/next/instrumentation`'s\n * async `register()` hasn't completed before the layout renders, or\n * unsampled traces). The client SDK's propagation reader handles a\n * missing meta tag the same as no parent — every browser span starts a\n * fresh root, which is at least internally consistent.\n */\nexport function TraceMeta() {\n const traceparent = activeTraceparent();\n if (!traceparent) {\n return null;\n }\n return <meta content={traceparent} name=\"traceparent\" />;\n}\n"],"mappings":"oFA8BA,SAAgB,WAAY,CAC1B,IAAM,YAAc,kBAAkB,EAItC,OAHK,YAGE,IAAC,OAAD,CAAM,QAAS,YAAa,KAAK,aAAe,CAAA,EAF9C,IAGX"}
@@ -1 +1 @@
1
- {"version":3,"file":"traceparent.d.mts","names":[],"sources":["../../../src/internal/server/traceparent.ts"],"mappings":";;AAiBA;;;;;;;;;;;iBAAgB,iBAAA,CAAA"}
1
+ {"version":3,"file":"traceparent.d.mts","names":[],"sources":["../../../src/internal/server/traceparent.ts"],"mappings":";;AAiBA;;;;AAAiC;;;;;;;iBAAjB,iBAAA,CAAA"}
@@ -1,26 +1 @@
1
- import { TraceFlags, trace } from "@opentelemetry/api";
2
- //#region src/internal/server/traceparent.ts
3
- const SAMPLED_BIT = TraceFlags.SAMPLED;
4
- const W3C_TRACECONTEXT_VERSION = "00";
5
- /**
6
- * Build a W3C `traceparent` string from the currently-active OTel
7
- * span, or `null` if no span is active or the trace is not sampled.
8
- *
9
- * Server-side counterpart to the client SDK's
10
- * `internal/otel/propagation.ts`: both ends of the wire filter
11
- * unsampled traces. The browser doesn't honor the `sampled` bit when
12
- * creating child spans, so propagating an unsampled trace_id from the
13
- * server would orphan every browser span under a trace with no
14
- * recorded server segments. Returning null lets the browser fall back
15
- * to its own root, which is at least internally consistent.
16
- */
17
- function activeTraceparent() {
18
- const span = trace.getActiveSpan();
19
- if (!span) return null;
20
- const ctx = span.spanContext();
21
- if ((ctx.traceFlags & SAMPLED_BIT) !== SAMPLED_BIT) return null;
22
- const flags = ctx.traceFlags.toString(16).padStart(2, "0");
23
- return `${W3C_TRACECONTEXT_VERSION}-${ctx.traceId}-${ctx.spanId}-${flags}`;
24
- }
25
- //#endregion
26
- export { activeTraceparent };
1
+ import{TraceFlags,trace}from"@opentelemetry/api";const SAMPLED_BIT=TraceFlags.SAMPLED;function activeTraceparent(){let span=trace.getActiveSpan();if(!span)return null;let ctx=span.spanContext();if((ctx.traceFlags&SAMPLED_BIT)!==SAMPLED_BIT)return null;let flags=ctx.traceFlags.toString(16).padStart(2,`0`);return`00-${ctx.traceId}-${ctx.spanId}-${flags}`}export{activeTraceparent};
@@ -1 +1 @@
1
- {"version":3,"file":"traceparent.mjs","names":[],"sources":["../../../src/internal/server/traceparent.ts"],"sourcesContent":["import { TraceFlags, trace } from \"@opentelemetry/api\";\n\nconst SAMPLED_BIT = TraceFlags.SAMPLED;\nconst W3C_TRACECONTEXT_VERSION = \"00\";\n\n/**\n * Build a W3C `traceparent` string from the currently-active OTel\n * span, or `null` if no span is active or the trace is not sampled.\n *\n * Server-side counterpart to the client SDK's\n * `internal/otel/propagation.ts`: both ends of the wire filter\n * unsampled traces. The browser doesn't honor the `sampled` bit when\n * creating child spans, so propagating an unsampled trace_id from the\n * server would orphan every browser span under a trace with no\n * recorded server segments. Returning null lets the browser fall back\n * to its own root, which is at least internally consistent.\n */\nexport function activeTraceparent(): string | null {\n const span = trace.getActiveSpan();\n if (!span) {\n return null;\n }\n const ctx = span.spanContext();\n // biome-ignore lint/suspicious/noBitwiseOperators: W3C trace_flags is a bitmask; SAMPLED (0x01) must be tested independently of any future reserved flags.\n if ((ctx.traceFlags & SAMPLED_BIT) !== SAMPLED_BIT) {\n return null;\n }\n const flags = ctx.traceFlags.toString(16).padStart(2, \"0\");\n return `${W3C_TRACECONTEXT_VERSION}-${ctx.traceId}-${ctx.spanId}-${flags}`;\n}\n"],"mappings":";;AAEA,MAAM,cAAc,WAAW;AAC/B,MAAM,2BAA2B;;;;;;;;;;;;;AAcjC,SAAgB,oBAAmC;CACjD,MAAM,OAAO,MAAM,eAAe;CAClC,IAAI,CAAC,MACH,OAAO;CAET,MAAM,MAAM,KAAK,aAAa;CAE9B,KAAK,IAAI,aAAa,iBAAiB,aACrC,OAAO;CAET,MAAM,QAAQ,IAAI,WAAW,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI;CAC1D,OAAO,GAAG,yBAAyB,GAAG,IAAI,QAAQ,GAAG,IAAI,OAAO,GAAG"}
1
+ {"version":3,"file":"traceparent.mjs","names":[],"sources":["../../../src/internal/server/traceparent.ts"],"sourcesContent":["import { TraceFlags, trace } from \"@opentelemetry/api\";\n\nconst SAMPLED_BIT = TraceFlags.SAMPLED;\nconst W3C_TRACECONTEXT_VERSION = \"00\";\n\n/**\n * Build a W3C `traceparent` string from the currently-active OTel\n * span, or `null` if no span is active or the trace is not sampled.\n *\n * Server-side counterpart to the client SDK's\n * `internal/otel/propagation.ts`: both ends of the wire filter\n * unsampled traces. The browser doesn't honor the `sampled` bit when\n * creating child spans, so propagating an unsampled trace_id from the\n * server would orphan every browser span under a trace with no\n * recorded server segments. Returning null lets the browser fall back\n * to its own root, which is at least internally consistent.\n */\nexport function activeTraceparent(): string | null {\n const span = trace.getActiveSpan();\n if (!span) {\n return null;\n }\n const ctx = span.spanContext();\n // biome-ignore lint/suspicious/noBitwiseOperators: W3C trace_flags is a bitmask; SAMPLED (0x01) must be tested independently of any future reserved flags.\n if ((ctx.traceFlags & SAMPLED_BIT) !== SAMPLED_BIT) {\n return null;\n }\n const flags = ctx.traceFlags.toString(16).padStart(2, \"0\");\n return `${W3C_TRACECONTEXT_VERSION}-${ctx.traceId}-${ctx.spanId}-${flags}`;\n}\n"],"mappings":"iDAEA,MAAM,YAAc,WAAW,QAe/B,SAAgB,mBAAmC,CACjD,IAAM,KAAO,MAAM,cAAc,EACjC,GAAI,CAAC,KACH,OAAO,KAET,IAAM,IAAM,KAAK,YAAY,EAE7B,IAAK,IAAI,WAAa,eAAiB,YACrC,OAAO,KAET,IAAM,MAAQ,IAAI,WAAW,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,EACzD,MAAO,MAA+B,IAAI,QAAQ,GAAG,IAAI,OAAO,GAAG,OACrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/internal/server/types.ts"],"mappings":";;;;KAGY,qBAAA,GAAwB,IAAA,CAClC,aAAA;AAAA,UAIe,mBAAA;EAAA,SACN,SAAA,GAAY,cAAA;EAAA,SACZ,MAAA,GAAS,IAAA,CAAK,aAAA;AAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/internal/server/types.ts"],"mappings":";;;;KAGY,qBAAA,GAAwB,IAAI,CACtC,aAAA;AAAA,UAIe,mBAAA;EAAA,SACN,SAAA,GAAY,cAAA;EAAA,SACZ,MAAA,GAAS,IAAA,CAAK,aAAA;AAAA"}
@@ -1 +1 @@
1
- export {};
1
+ export{};
@@ -1,6 +1,6 @@
1
1
  //#region src/internal/setup-warnings.d.ts
2
2
  /**
3
- * Best-effort warning when the customer set `INTERFERE_API_KEY` but never
3
+ * Best-effort warning when the customer set `INTERFERE_PUBLIC_KEY` but never
4
4
  * created `instrumentation.ts`. Server-side tracing then silently does
5
5
  * nothing — that's surprising and there's no other place we get to tell
6
6
  * them. Never blocks the build: some customers genuinely don't want
@@ -1 +1 @@
1
- {"version":3,"file":"setup-warnings.d.mts","names":[],"sources":["../../src/internal/setup-warnings.ts"],"mappings":";;AA8BA;;;;;AAeA;iBAfgB,kCAAA,CAAmC,UAAA;;;;;;iBAenC,oBAAA,CAAqB,UAAA"}
1
+ {"version":3,"file":"setup-warnings.d.mts","names":[],"sources":["../../src/internal/setup-warnings.ts"],"mappings":";;AA8BA;;;;AAAqE;AAerE;iBAfgB,kCAAA,CAAmC,UAAkB;;;AAed;;;iBAAvC,oBAAA,CAAqB,UAAkB"}
@@ -1,45 +1 @@
1
- import { log } from "./logger.mjs";
2
- import { createRequire } from "node:module";
3
- import { existsSync } from "node:fs";
4
- import { resolve } from "node:path";
5
- //#region src/internal/setup-warnings.ts
6
- const SERVER_INSTRUMENTATION_FILES = [
7
- "instrumentation.ts",
8
- "instrumentation.tsx",
9
- "instrumentation.js",
10
- "instrumentation.jsx",
11
- "src/instrumentation.ts",
12
- "src/instrumentation.tsx",
13
- "src/instrumentation.js",
14
- "src/instrumentation.jsx"
15
- ];
16
- function hasServerInstrumentation(projectDir) {
17
- return SERVER_INSTRUMENTATION_FILES.some((c) => existsSync(resolve(projectDir, c)));
18
- }
19
- /**
20
- * Best-effort warning when the customer set `INTERFERE_API_KEY` but never
21
- * created `instrumentation.ts`. Server-side tracing then silently does
22
- * nothing — that's surprising and there's no other place we get to tell
23
- * them. Never blocks the build: some customers genuinely don't want
24
- * server-side tracing.
25
- */
26
- function warnIfServerInstrumentationMissing(projectDir) {
27
- if (hasServerInstrumentation(projectDir)) return;
28
- log.warn("No instrumentation.ts found", ["Server-side traces will be skipped. To enable, create instrumentation.ts at the project root with:", " export { register } from '@interfere/next/instrumentation';"]);
29
- }
30
- /**
31
- * Reads the customer's installed `next` package version. Returns `null` if
32
- * Next isn't resolvable from `projectDir` (e.g. running outside a Next app),
33
- * in which case callers should skip version-conditional behaviour.
34
- */
35
- function readNextMajorVersion(projectDir) {
36
- try {
37
- const pkg = createRequire(`${projectDir}/_`)("next/package.json");
38
- const major = Number.parseInt(pkg.version?.split(".")[0] ?? "", 10);
39
- return Number.isFinite(major) ? major : null;
40
- } catch {
41
- return null;
42
- }
43
- }
44
- //#endregion
45
- export { readNextMajorVersion, warnIfServerInstrumentationMissing };
1
+ import{log}from"./logger.mjs";import{createRequire}from"node:module";import{existsSync}from"node:fs";import{resolve}from"node:path";const SERVER_INSTRUMENTATION_FILES=[`instrumentation.ts`,`instrumentation.tsx`,`instrumentation.js`,`instrumentation.jsx`,`src/instrumentation.ts`,`src/instrumentation.tsx`,`src/instrumentation.js`,`src/instrumentation.jsx`];function hasServerInstrumentation(projectDir){return SERVER_INSTRUMENTATION_FILES.some(c=>existsSync(resolve(projectDir,c)))}function warnIfServerInstrumentationMissing(projectDir){hasServerInstrumentation(projectDir)||log.warn(`No instrumentation.ts found`,[`Server-side traces will be skipped. To enable, create instrumentation.ts at the project root with:`,` export { register } from '@interfere/next/instrumentation';`])}function readNextMajorVersion(projectDir){try{let pkg=createRequire(`${projectDir}/_`)(`next/package.json`),major=Number.parseInt(pkg.version?.split(`.`)[0]??``,10);return Number.isFinite(major)?major:null}catch{return null}}export{readNextMajorVersion,warnIfServerInstrumentationMissing};
@@ -1 +1 @@
1
- {"version":3,"file":"setup-warnings.mjs","names":[],"sources":["../../src/internal/setup-warnings.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { resolve } from \"node:path\";\n\nimport { log } from \"./logger.js\";\n\nconst SERVER_INSTRUMENTATION_FILES = [\n \"instrumentation.ts\",\n \"instrumentation.tsx\",\n \"instrumentation.js\",\n \"instrumentation.jsx\",\n \"src/instrumentation.ts\",\n \"src/instrumentation.tsx\",\n \"src/instrumentation.js\",\n \"src/instrumentation.jsx\",\n] as const;\n\nfunction hasServerInstrumentation(projectDir: string): boolean {\n return SERVER_INSTRUMENTATION_FILES.some((c) =>\n existsSync(resolve(projectDir, c))\n );\n}\n\n/**\n * Best-effort warning when the customer set `INTERFERE_API_KEY` but never\n * created `instrumentation.ts`. Server-side tracing then silently does\n * nothing — that's surprising and there's no other place we get to tell\n * them. Never blocks the build: some customers genuinely don't want\n * server-side tracing.\n */\nexport function warnIfServerInstrumentationMissing(projectDir: string): void {\n if (hasServerInstrumentation(projectDir)) {\n return;\n }\n log.warn(\"No instrumentation.ts found\", [\n \"Server-side traces will be skipped. To enable, create instrumentation.ts at the project root with:\",\n \" export { register } from '@interfere/next/instrumentation';\",\n ]);\n}\n\n/**\n * Reads the customer's installed `next` package version. Returns `null` if\n * Next isn't resolvable from `projectDir` (e.g. running outside a Next app),\n * in which case callers should skip version-conditional behaviour.\n */\nexport function readNextMajorVersion(projectDir: string): number | null {\n try {\n const require = createRequire(`${projectDir}/_`);\n const pkg = require(\"next/package.json\") as { version?: string };\n const major = Number.parseInt(pkg.version?.split(\".\")[0] ?? \"\", 10);\n return Number.isFinite(major) ? major : null;\n } catch {\n return null;\n }\n}\n"],"mappings":";;;;;AAMA,MAAM,+BAA+B;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,yBAAyB,YAA6B;CAC7D,OAAO,6BAA6B,MAAM,MACxC,WAAW,QAAQ,YAAY,EAAE,CAAC,CACnC;;;;;;;;;AAUH,SAAgB,mCAAmC,YAA0B;CAC3E,IAAI,yBAAyB,WAAW,EACtC;CAEF,IAAI,KAAK,+BAA+B,CACtC,sGACA,gEACD,CAAC;;;;;;;AAQJ,SAAgB,qBAAqB,YAAmC;CACtE,IAAI;EAEF,MAAM,MADU,cAAc,GAAG,WAAW,IACzB,CAAC,oBAAoB;EACxC,MAAM,QAAQ,OAAO,SAAS,IAAI,SAAS,MAAM,IAAI,CAAC,MAAM,IAAI,GAAG;EACnE,OAAO,OAAO,SAAS,MAAM,GAAG,QAAQ;SAClC;EACN,OAAO"}
1
+ {"version":3,"file":"setup-warnings.mjs","names":[],"sources":["../../src/internal/setup-warnings.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { resolve } from \"node:path\";\n\nimport { log } from \"./logger.js\";\n\nconst SERVER_INSTRUMENTATION_FILES = [\n \"instrumentation.ts\",\n \"instrumentation.tsx\",\n \"instrumentation.js\",\n \"instrumentation.jsx\",\n \"src/instrumentation.ts\",\n \"src/instrumentation.tsx\",\n \"src/instrumentation.js\",\n \"src/instrumentation.jsx\",\n] as const;\n\nfunction hasServerInstrumentation(projectDir: string): boolean {\n return SERVER_INSTRUMENTATION_FILES.some((c) =>\n existsSync(resolve(projectDir, c))\n );\n}\n\n/**\n * Best-effort warning when the customer set `INTERFERE_PUBLIC_KEY` but never\n * created `instrumentation.ts`. Server-side tracing then silently does\n * nothing — that's surprising and there's no other place we get to tell\n * them. Never blocks the build: some customers genuinely don't want\n * server-side tracing.\n */\nexport function warnIfServerInstrumentationMissing(projectDir: string): void {\n if (hasServerInstrumentation(projectDir)) {\n return;\n }\n log.warn(\"No instrumentation.ts found\", [\n \"Server-side traces will be skipped. To enable, create instrumentation.ts at the project root with:\",\n \" export { register } from '@interfere/next/instrumentation';\",\n ]);\n}\n\n/**\n * Reads the customer's installed `next` package version. Returns `null` if\n * Next isn't resolvable from `projectDir` (e.g. running outside a Next app),\n * in which case callers should skip version-conditional behaviour.\n */\nexport function readNextMajorVersion(projectDir: string): number | null {\n try {\n const require = createRequire(`${projectDir}/_`);\n const pkg = require(\"next/package.json\") as { version?: string };\n const major = Number.parseInt(pkg.version?.split(\".\")[0] ?? \"\", 10);\n return Number.isFinite(major) ? major : null;\n } catch {\n return null;\n }\n}\n"],"mappings":"oIAMA,MAAM,6BAA+B,CACnC,qBACA,sBACA,qBACA,sBACA,yBACA,0BACA,yBACA,yBACF,EAEA,SAAS,yBAAyB,WAA6B,CAC7D,OAAO,6BAA6B,KAAM,GACxC,WAAW,QAAQ,WAAY,CAAC,CAAC,CACnC,CACF,CASA,SAAgB,mCAAmC,WAA0B,CACvE,yBAAyB,UAAU,GAGvC,IAAI,KAAK,8BAA+B,CACtC,qGACA,+DACF,CAAC,CACH,CAOA,SAAgB,qBAAqB,WAAmC,CACtE,GAAI,CAEF,IAAM,IADU,cAAc,GAAG,WAAW,GAC1B,EAAE,mBAAmB,EACjC,MAAQ,OAAO,SAAS,IAAI,SAAS,MAAM,GAAG,EAAE,IAAM,GAAI,EAAE,EAClE,OAAO,OAAO,SAAS,KAAK,EAAI,MAAQ,IAC1C,MAAQ,CACN,OAAO,IACT,CACF"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/url.d.ts
2
+ declare function withPublicKey(url: string, publicKey: string): string;
3
+ //#endregion
4
+ export { withPublicKey };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.mts","names":[],"sources":["../../src/internal/url.ts"],"mappings":";iBAEgB,aAAA,CAAc,GAAA,UAAa,SAAiB"}
@@ -0,0 +1 @@
1
+ function withPublicKey(url,publicKey){let next=new URL(url);return next.searchParams.set(`pk`,publicKey),next.toString()}export{withPublicKey};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.mjs","names":[],"sources":["../../src/internal/url.ts"],"sourcesContent":["const PUBLIC_KEY_QUERY = \"pk\";\n\nexport function withPublicKey(url: string, publicKey: string): string {\n const next = new URL(url);\n next.searchParams.set(PUBLIC_KEY_QUERY, publicKey);\n return next.toString();\n}\n"],"mappings":"AAEA,SAAgB,cAAc,IAAa,UAA2B,CACpE,IAAM,KAAO,IAAI,IAAI,GAAG,EAExB,OADA,KAAK,aAAa,IAAI,KAAkB,SAAS,EAC1C,KAAK,SAAS,CACvB"}
@@ -1,5 +1 @@
1
- import { name, version } from "../package.mjs";
2
- //#region src/internal/version.ts
3
- const PRODUCER_VERSION = `${name}@${version}`;
4
- //#endregion
5
- export { PRODUCER_VERSION };
1
+ import{name,version}from"../package.mjs";const PRODUCER_VERSION=`${name}@${version}`;export{PRODUCER_VERSION};
@@ -1 +1 @@
1
- {"version":3,"file":"version.mjs","names":["pkg.name","pkg.version"],"sources":["../../src/internal/version.ts"],"sourcesContent":["import pkg from \"../../package.json\" with { type: \"json\" };\n\nexport const PRODUCER_VERSION = `${pkg.name}@${pkg.version}`;\n"],"mappings":";;AAEA,MAAa,mBAAmB,GAAGA,KAAS,GAAGC"}
1
+ {"version":3,"file":"version.mjs","names":["pkg.name","pkg.version"],"sources":["../../src/internal/version.ts"],"sourcesContent":["import pkg from \"../../package.json\" with { type: \"json\" };\n\nexport const PRODUCER_VERSION = `${pkg.name}@${pkg.version}`;\n"],"mappings":"yCAEA,MAAa,iBAAmB,GAAGA,KAAS,GAAGC"}
package/dist/package.mjs CHANGED
@@ -1,5 +1 @@
1
- //#region package.json
2
- var name = "@interfere/next";
3
- var version = "10.0.0";
4
- //#endregion
5
- export { name, version };
1
+ var name=`@interfere/next`,version=`10.0.1-canary.0`;export{name,version};
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.mts","names":[],"sources":["../src/provider.tsx"],"mappings":";;;;;UAeU,sBAAA,SAA+B,iBAAA;EACvC,OAAA,GAAU,cAAA;EACV,aAAA;AAAA;;;;;;;;;iBAWc,iBAAA,CAAA;EACd,QAAA;EACA,OAAA;EACA;AAAA,GACC,sBAAA,GAAyB,SAAA"}
1
+ {"version":3,"file":"provider.d.mts","names":[],"sources":["../src/provider.tsx"],"mappings":";;;;;UAeU,sBAAA,SAA+B,iBAAiB;EACxD,OAAA,GAAU,cAAA;EACV,aAAA;AAAA;;;;;;;;;iBAWc,iBAAA,CAAA;EACd,QAAA;EACA,OAAA;EACA;AAAA,GACC,sBAAA,GAAyB,SAAA"}
package/dist/provider.mjs CHANGED
@@ -1,25 +1 @@
1
- "use client";
2
- import { getKernelOrNull, subscribeToKernel } from "./instrument-client.mjs";
3
- import { InterfereProvider as InterfereProvider$1, useInterfere, useSession } from "@interfere/react/provider";
4
- import { useSyncExternalStore } from "react";
5
- import { jsx } from "react/jsx-runtime";
6
- //#region src/provider.tsx
7
- const nullSnapshot = () => null;
8
- /**
9
- * Next.js wrapper around `@interfere/react`'s provider that resolves the
10
- * kernel from module scope (set by the matching `init()` call). Customer
11
- * code never passes the kernel explicitly. Uses `getKernelOrNull()` so the
12
- * provider is safe to render during SSR/SSG when `init()` hasn't run
13
- * (`init()` is client-only); the core provider mounts with null-safe
14
- * accessors and switches to the real kernel on client hydration.
15
- */
16
- function InterfereProvider({ children, consent, errorBoundary }) {
17
- return /* @__PURE__ */ jsx(InterfereProvider$1, {
18
- kernel: useSyncExternalStore(subscribeToKernel, getKernelOrNull, nullSnapshot),
19
- ...consent === void 0 ? {} : { consent },
20
- ...errorBoundary === void 0 ? {} : { errorBoundary },
21
- children
22
- });
23
- }
24
- //#endregion
25
- export { InterfereProvider, useInterfere, useSession };
1
+ "use client";import{getKernelOrNull,subscribeToKernel}from"./instrument-client.mjs";import{InterfereProvider as InterfereProvider$1,useInterfere,useSession}from"@interfere/react/provider";import{useSyncExternalStore}from"react";import{jsx}from"react/jsx-runtime";const nullSnapshot=()=>null;function InterfereProvider({children,consent,errorBoundary}){return jsx(InterfereProvider$1,{kernel:useSyncExternalStore(subscribeToKernel,getKernelOrNull,nullSnapshot),...consent===void 0?{}:{consent},...errorBoundary===void 0?{}:{errorBoundary},children})}export{InterfereProvider,useInterfere,useSession};
@@ -1 +1 @@
1
- {"version":3,"file":"provider.mjs","names":["CoreInterfereProvider"],"sources":["../src/provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { InterfereProvider as CoreInterfereProvider } from \"@interfere/react/provider\";\nimport type { ConsentState } from \"@interfere/types/sdk/plugins/manifest\";\n\nimport {\n type PropsWithChildren,\n type ReactNode,\n useSyncExternalStore,\n} from \"react\";\n\nimport { getKernelOrNull, subscribeToKernel } from \"./instrument-client.js\";\n\nconst nullSnapshot = () => null;\n\ninterface InterfereProviderProps extends PropsWithChildren {\n consent?: ConsentState | undefined;\n errorBoundary?: boolean;\n}\n\n/**\n * Next.js wrapper around `@interfere/react`'s provider that resolves the\n * kernel from module scope (set by the matching `init()` call). Customer\n * code never passes the kernel explicitly. Uses `getKernelOrNull()` so the\n * provider is safe to render during SSR/SSG when `init()` hasn't run\n * (`init()` is client-only); the core provider mounts with null-safe\n * accessors and switches to the real kernel on client hydration.\n */\nexport function InterfereProvider({\n children,\n consent,\n errorBoundary,\n}: InterfereProviderProps): ReactNode {\n // Subscribe so the provider re-renders when `init()` resolves on the\n // client (customers commonly fire-and-forget `init()` from\n // `instrumentation-client.ts`, so the kernel may not be available\n // when the provider first mounts). Server renders see `null` via\n // `nullSnapshot` and the core provider mounts with null-safe accessors.\n const kernel = useSyncExternalStore(\n subscribeToKernel,\n getKernelOrNull,\n nullSnapshot\n );\n return (\n <CoreInterfereProvider\n kernel={kernel}\n {...(consent === undefined ? {} : { consent })}\n {...(errorBoundary === undefined ? {} : { errorBoundary })}\n >\n {children}\n </CoreInterfereProvider>\n );\n}\n\n// biome-ignore lint/performance/noBarrelFile: Next.js provider entrypoint re-exports the React SDK hooks for one-line customer setup.\nexport { useInterfere, useSession } from \"@interfere/react/provider\";\nexport type {\n ConsentCategory,\n ConsentState,\n GateableCategory,\n} from \"@interfere/types/sdk/plugins/manifest\";\n"],"mappings":";;;;;;AAaA,MAAM,qBAAqB;;;;;;;;;AAe3B,SAAgB,kBAAkB,EAChC,UACA,SACA,iBACoC;CAWpC,OACE,oBAACA,qBAAD;EACE,QAPW,qBACb,mBACA,iBACA,aAIgB;EACd,GAAK,YAAY,KAAA,IAAY,EAAE,GAAG,EAAE,SAAS;EAC7C,GAAK,kBAAkB,KAAA,IAAY,EAAE,GAAG,EAAE,eAAe;EAExD;EACqB,CAAA"}
1
+ {"version":3,"file":"provider.mjs","names":["CoreInterfereProvider"],"sources":["../src/provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { InterfereProvider as CoreInterfereProvider } from \"@interfere/react/provider\";\nimport type { ConsentState } from \"@interfere/types/sdk/plugins/manifest\";\n\nimport {\n type PropsWithChildren,\n type ReactNode,\n useSyncExternalStore,\n} from \"react\";\n\nimport { getKernelOrNull, subscribeToKernel } from \"./instrument-client.js\";\n\nconst nullSnapshot = () => null;\n\ninterface InterfereProviderProps extends PropsWithChildren {\n consent?: ConsentState | undefined;\n errorBoundary?: boolean;\n}\n\n/**\n * Next.js wrapper around `@interfere/react`'s provider that resolves the\n * kernel from module scope (set by the matching `init()` call). Customer\n * code never passes the kernel explicitly. Uses `getKernelOrNull()` so the\n * provider is safe to render during SSR/SSG when `init()` hasn't run\n * (`init()` is client-only); the core provider mounts with null-safe\n * accessors and switches to the real kernel on client hydration.\n */\nexport function InterfereProvider({\n children,\n consent,\n errorBoundary,\n}: InterfereProviderProps): ReactNode {\n // Subscribe so the provider re-renders when `init()` resolves on the\n // client (customers commonly fire-and-forget `init()` from\n // `instrumentation-client.ts`, so the kernel may not be available\n // when the provider first mounts). Server renders see `null` via\n // `nullSnapshot` and the core provider mounts with null-safe accessors.\n const kernel = useSyncExternalStore(\n subscribeToKernel,\n getKernelOrNull,\n nullSnapshot\n );\n return (\n <CoreInterfereProvider\n kernel={kernel}\n {...(consent === undefined ? {} : { consent })}\n {...(errorBoundary === undefined ? {} : { errorBoundary })}\n >\n {children}\n </CoreInterfereProvider>\n );\n}\n\n// biome-ignore lint/performance/noBarrelFile: Next.js provider entrypoint re-exports the React SDK hooks for one-line customer setup.\nexport { useInterfere, useSession } from \"@interfere/react/provider\";\nexport type {\n ConsentCategory,\n ConsentState,\n GateableCategory,\n} from \"@interfere/types/sdk/plugins/manifest\";\n"],"mappings":"uQAaA,MAAM,iBAAqB,KAe3B,SAAgB,kBAAkB,CAChC,SACA,QACA,eACoC,CAWpC,OACE,IAACA,oBAAD,CACE,OAPW,qBACb,kBACA,gBACA,YAIe,EACb,GAAK,UAAY,IAAA,GAAY,CAAC,EAAI,CAAE,OAAQ,EAC5C,GAAK,gBAAkB,IAAA,GAAY,CAAC,EAAI,CAAE,aAAc,EAEvD,QACoB,CAAA,CAE3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-handler.d.mts","names":[],"sources":["../src/route-handler.ts"],"mappings":";;AAaA;;;;;iBAAsB,GAAA,CAAI,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA;AAAA,iBAOrC,IAAA,CAAK,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA;AAAA,iBAchC,OAAA,CAAA,GAAW,QAAA"}
1
+ {"version":3,"file":"route-handler.d.mts","names":[],"sources":["../src/route-handler.ts"],"mappings":";;AAaA;;;;;iBAAsB,GAAA,CAAI,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA;AAAA,iBAOrC,IAAA,CAAK,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA;AAAA,iBAchC,OAAA,CAAA,GAAW,QAAQ"}
@@ -1,33 +1 @@
1
- import { isEnabledOnServer } from "./internal/env.mjs";
2
- import { handleGet } from "./internal/route/handle-get.mjs";
3
- import { handlePost } from "./internal/route/handle-post.mjs";
4
- //#region src/route-handler.ts
5
- /**
6
- * Customers consume this module via `export * from "@interfere/next/route-handler"`
7
- * so any HTTP method we add later (PATCH, DELETE, …) is picked up
8
- * without a customer file change. Do NOT add non-method exports here —
9
- * `route-handler.lint.test.ts` will fail the build if you do.
10
- */
11
- const DISABLED = () => new Response(null, { status: 204 });
12
- async function GET(request) {
13
- if (!isEnabledOnServer()) return DISABLED();
14
- return await handleGet(request);
15
- }
16
- function POST(request) {
17
- if (!isEnabledOnServer()) return Promise.resolve(DISABLED());
18
- return handlePost(request);
19
- }
20
- const CORS_HEADERS = {
21
- "Access-Control-Allow-Origin": "*",
22
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
23
- "Access-Control-Allow-Headers": "Content-Type",
24
- "Access-Control-Max-Age": "86400"
25
- };
26
- function OPTIONS() {
27
- return new Response(null, {
28
- status: 200,
29
- headers: CORS_HEADERS
30
- });
31
- }
32
- //#endregion
33
- export { GET, OPTIONS, POST };
1
+ import{isEnabledOnServer}from"./internal/env.mjs";import{handleGet}from"./internal/route/handle-get.mjs";import{handlePost}from"./internal/route/handle-post.mjs";const DISABLED=()=>new Response(null,{status:204});async function GET(request){return isEnabledOnServer()?await handleGet(request):DISABLED()}function POST(request){return isEnabledOnServer()?handlePost(request):Promise.resolve(DISABLED())}const CORS_HEADERS={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`GET, POST, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`,"Access-Control-Max-Age":`86400`};function OPTIONS(){return new Response(null,{status:200,headers:CORS_HEADERS})}export{GET,OPTIONS,POST};
@@ -1 +1 @@
1
- {"version":3,"file":"route-handler.mjs","names":[],"sources":["../src/route-handler.ts"],"sourcesContent":["/**\n * Customers consume this module via `export * from \"@interfere/next/route-handler\"`\n * so any HTTP method we add later (PATCH, DELETE, …) is picked up\n * without a customer file change. Do NOT add non-method exports here —\n * `route-handler.lint.test.ts` will fail the build if you do.\n */\n\nimport { isEnabledOnServer } from \"./internal/env.js\";\nimport { handleGet } from \"./internal/route/handle-get.js\";\nimport { handlePost } from \"./internal/route/handle-post.js\";\n\nconst DISABLED = () => new Response(null, { status: 204 });\n\nexport async function GET(request: Request): Promise<Response> {\n if (!isEnabledOnServer()) {\n return DISABLED();\n }\n return await handleGet(request);\n}\n\nexport function POST(request: Request): Promise<Response> {\n if (!isEnabledOnServer()) {\n return Promise.resolve(DISABLED());\n }\n return handlePost(request);\n}\n\nconst CORS_HEADERS = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type\",\n \"Access-Control-Max-Age\": \"86400\",\n};\n\nexport function OPTIONS(): Response {\n return new Response(null, { status: 200, headers: CORS_HEADERS });\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAM,iBAAiB,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;AAE1D,eAAsB,IAAI,SAAqC;CAC7D,IAAI,CAAC,mBAAmB,EACtB,OAAO,UAAU;CAEnB,OAAO,MAAM,UAAU,QAAQ;;AAGjC,SAAgB,KAAK,SAAqC;CACxD,IAAI,CAAC,mBAAmB,EACtB,OAAO,QAAQ,QAAQ,UAAU,CAAC;CAEpC,OAAO,WAAW,QAAQ;;AAG5B,MAAM,eAAe;CACnB,+BAA+B;CAC/B,gCAAgC;CAChC,gCAAgC;CAChC,0BAA0B;CAC3B;AAED,SAAgB,UAAoB;CAClC,OAAO,IAAI,SAAS,MAAM;EAAE,QAAQ;EAAK,SAAS;EAAc,CAAC"}
1
+ {"version":3,"file":"route-handler.mjs","names":[],"sources":["../src/route-handler.ts"],"sourcesContent":["/**\n * Customers consume this module via `export * from \"@interfere/next/route-handler\"`\n * so any HTTP method we add later (PATCH, DELETE, …) is picked up\n * without a customer file change. Do NOT add non-method exports here —\n * `route-handler.lint.test.ts` will fail the build if you do.\n */\n\nimport { isEnabledOnServer } from \"./internal/env.js\";\nimport { handleGet } from \"./internal/route/handle-get.js\";\nimport { handlePost } from \"./internal/route/handle-post.js\";\n\nconst DISABLED = () => new Response(null, { status: 204 });\n\nexport async function GET(request: Request): Promise<Response> {\n if (!isEnabledOnServer()) {\n return DISABLED();\n }\n return await handleGet(request);\n}\n\nexport function POST(request: Request): Promise<Response> {\n if (!isEnabledOnServer()) {\n return Promise.resolve(DISABLED());\n }\n return handlePost(request);\n}\n\nconst CORS_HEADERS = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type\",\n \"Access-Control-Max-Age\": \"86400\",\n};\n\nexport function OPTIONS(): Response {\n return new Response(null, { status: 200, headers: CORS_HEADERS });\n}\n"],"mappings":"kKAWA,MAAM,aAAiB,IAAI,SAAS,KAAM,CAAE,OAAQ,GAAI,CAAC,EAEzD,eAAsB,IAAI,QAAqC,CAI7D,OAHK,kBAAkB,EAGhB,MAAM,UAAU,OAAO,EAFrB,SAAS,CAGpB,CAEA,SAAgB,KAAK,QAAqC,CAIxD,OAHK,kBAAkB,EAGhB,WAAW,OAAO,EAFhB,QAAQ,QAAQ,SAAS,CAAC,CAGrC,CAEA,MAAM,aAAe,CACnB,8BAA+B,IAC/B,+BAAgC,qBAChC,+BAAgC,eAChC,yBAA0B,OAC5B,EAEA,SAAgB,SAAoB,CAClC,OAAO,IAAI,SAAS,KAAM,CAAE,OAAQ,IAAK,QAAS,YAAa,CAAC,CAClE"}
package/dist/server.mjs CHANGED
@@ -1,3 +1 @@
1
- import { captureError, onRequestError } from "./internal/server/capture.mjs";
2
- import { TraceMeta } from "./internal/server/trace-meta.mjs";
3
- export { TraceMeta, captureError, onRequestError };
1
+ import{captureError,onRequestError}from"./internal/server/capture.mjs";import{TraceMeta}from"./internal/server/trace-meta.mjs";export{TraceMeta,captureError,onRequestError};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interfere/next",
3
- "version": "10.0.0",
3
+ "version": "10.0.1-canary.0",
4
4
  "license": "MIT",
5
5
  "description": "Build software that never breaks.",
6
6
  "keywords": [
@@ -26,72 +26,71 @@
26
26
  "type": "module",
27
27
  "exports": {
28
28
  "./config": {
29
- "@source": "./src/config.ts",
29
+ "monorepo": "./src/config.ts",
30
30
  "types": "./dist/config.d.mts",
31
31
  "default": "./dist/config.mjs"
32
32
  },
33
33
  "./instrument-client": {
34
- "@source": "./src/instrument-client.ts",
34
+ "monorepo": "./src/instrument-client.ts",
35
35
  "types": "./dist/instrument-client.d.mts",
36
36
  "default": "./dist/instrument-client.mjs"
37
37
  },
38
38
  "./instrumentation": {
39
39
  "edge-light": {
40
- "@source": "./src/instrumentation.edge.ts",
40
+ "monorepo": "./src/instrumentation.edge.ts",
41
41
  "types": "./dist/instrumentation.edge.d.mts",
42
42
  "default": "./dist/instrumentation.edge.mjs"
43
43
  },
44
44
  "workerd": {
45
- "@source": "./src/instrumentation.edge.ts",
45
+ "monorepo": "./src/instrumentation.edge.ts",
46
46
  "types": "./dist/instrumentation.edge.d.mts",
47
47
  "default": "./dist/instrumentation.edge.mjs"
48
48
  },
49
49
  "worker": {
50
- "@source": "./src/instrumentation.edge.ts",
50
+ "monorepo": "./src/instrumentation.edge.ts",
51
51
  "types": "./dist/instrumentation.edge.d.mts",
52
52
  "default": "./dist/instrumentation.edge.mjs"
53
53
  },
54
54
  "node": {
55
- "@source": "./src/instrumentation.ts",
55
+ "monorepo": "./src/instrumentation.ts",
56
56
  "types": "./dist/instrumentation.d.mts",
57
57
  "default": "./dist/instrumentation.mjs"
58
58
  },
59
59
  "import": {
60
- "@source": "./src/instrumentation.ts",
60
+ "monorepo": "./src/instrumentation.ts",
61
61
  "types": "./dist/instrumentation.d.mts",
62
62
  "default": "./dist/instrumentation.mjs"
63
63
  },
64
64
  "default": {
65
- "@source": "./src/instrumentation.edge.ts",
65
+ "monorepo": "./src/instrumentation.edge.ts",
66
66
  "types": "./dist/instrumentation.edge.d.mts",
67
67
  "default": "./dist/instrumentation.edge.mjs"
68
68
  }
69
69
  },
70
70
  "./instrumentation-client": {
71
- "@source": "./src/instrumentation-client.ts",
71
+ "monorepo": "./src/instrumentation-client.ts",
72
72
  "types": "./dist/instrumentation-client.d.mts",
73
73
  "default": "./dist/instrumentation-client.mjs"
74
74
  },
75
75
  "./provider": {
76
- "@source": "./src/provider.tsx",
76
+ "monorepo": "./src/provider.tsx",
77
77
  "types": "./dist/provider.d.mts",
78
78
  "default": "./dist/provider.mjs"
79
79
  },
80
80
  "./route-handler": {
81
- "@source": "./src/route-handler.ts",
81
+ "monorepo": "./src/route-handler.ts",
82
82
  "types": "./dist/route-handler.d.mts",
83
83
  "default": "./dist/route-handler.mjs"
84
84
  },
85
85
  "./server": {
86
- "@source": "./src/server.ts",
86
+ "monorepo": "./src/server.ts",
87
87
  "types": "./dist/server.d.mts",
88
88
  "default": "./dist/server.mjs"
89
89
  }
90
90
  },
91
91
  "sideEffects": false,
92
92
  "publishConfig": {
93
- "access": "public",
94
- "tag": "canary"
93
+ "access": "public"
95
94
  },
96
95
  "scripts": {
97
96
  "build": "tsdown",
@@ -99,23 +98,23 @@
99
98
  "typecheck": "tsgo --noEmit --incremental"
100
99
  },
101
100
  "dependencies": {
102
- "@interfere/constants": "^9.0.1",
101
+ "@interfere/constants": "^9.0.2-canary.0",
103
102
  "@interfere/helpers": "^9.0.0",
104
- "@interfere/react": "^10.0.0",
105
- "@interfere/sdk": "^9.0.3",
106
- "@interfere/types": "^9.0.0",
103
+ "@interfere/react": "^10.0.1-canary.0",
104
+ "@interfere/sdk": "^10.0.1-canary.0",
105
+ "@interfere/types": "^9.0.3-canary.0",
107
106
  "@opentelemetry/api": "^1.9.1",
108
- "@opentelemetry/api-logs": "^0.217.0",
107
+ "@opentelemetry/api-logs": "^0.218.0",
109
108
  "@opentelemetry/baggage-span-processor": "^0.5.0",
110
109
  "@opentelemetry/context-async-hooks": "^2.7.1",
111
110
  "@opentelemetry/core": "^2.7.0",
112
- "@opentelemetry/exporter-logs-otlp-http": "^0.217.0",
113
- "@opentelemetry/exporter-metrics-otlp-http": "^0.217.0",
114
- "@opentelemetry/exporter-trace-otlp-http": "^0.217.0",
115
- "@opentelemetry/instrumentation": "^0.217.0",
116
- "@opentelemetry/instrumentation-undici": "^0.27.0",
111
+ "@opentelemetry/exporter-logs-otlp-http": "^0.218.0",
112
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.218.0",
113
+ "@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
114
+ "@opentelemetry/instrumentation": "^0.218.0",
115
+ "@opentelemetry/instrumentation-undici": "^0.28.0",
117
116
  "@opentelemetry/resources": "^2.7.0",
118
- "@opentelemetry/sdk-logs": "^0.217.0",
117
+ "@opentelemetry/sdk-logs": "^0.218.0",
119
118
  "@opentelemetry/sdk-metrics": "^2.7.0",
120
119
  "@opentelemetry/sdk-trace-base": "^2.7.0",
121
120
  "@opentelemetry/sdk-trace-node": "^2.7.1",
@@ -142,11 +141,11 @@
142
141
  "@interfere/test-utils": "^9.0.0",
143
142
  "@interfere/typescript-config": "^9.0.0",
144
143
  "@types/node": "^24.12.0",
145
- "@types/react": "19.2.14",
144
+ "@types/react": "19.2.15",
146
145
  "@types/react-dom": "19.2.3",
147
- "@typescript/native-preview": "7.0.0-dev.20260512.1",
148
- "@vitest/browser": "4.1.6",
149
- "@vitest/browser-playwright": "4.1.6",
146
+ "@typescript/native-preview": "7.0.0-dev.20260522.1",
147
+ "@vitest/browser": "4.1.7",
148
+ "@vitest/browser-playwright": "4.1.7",
150
149
  "@vitest/coverage-v8": "^4.1.6",
151
150
  "next": "^16.2.4",
152
151
  "playwright": "^1.60.0",