@interfere/next 0.1.0-alpha.11 → 0.1.0-alpha.2

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 (266) hide show
  1. package/README.md +70 -305
  2. package/dist/_virtual/_rolldown/runtime.mjs +11 -5
  3. package/dist/config.d.mts +11 -0
  4. package/dist/config.d.mts.map +1 -0
  5. package/dist/config.mjs +116 -0
  6. package/dist/config.mjs.map +1 -0
  7. package/dist/instrument-client.d.mts +2 -0
  8. package/dist/instrument-client.mjs +2 -0
  9. package/dist/internal/build/configure-build.d.mts +22 -0
  10. package/dist/internal/build/configure-build.d.mts.map +1 -0
  11. package/dist/internal/build/configure-build.mjs +87 -0
  12. package/dist/internal/build/configure-build.mjs.map +1 -0
  13. package/dist/internal/build/injected.d.mts +12 -0
  14. package/dist/internal/build/injected.d.mts.map +1 -0
  15. package/dist/internal/build/injected.mjs +9 -0
  16. package/dist/internal/build/injected.mjs.map +1 -0
  17. package/dist/internal/build/logger.d.mts +8 -0
  18. package/dist/internal/build/logger.d.mts.map +1 -0
  19. package/dist/internal/build/logger.mjs +44 -0
  20. package/dist/internal/build/logger.mjs.map +1 -0
  21. package/dist/internal/build/release/destinations/vercel.d.mts +6 -0
  22. package/dist/internal/build/release/destinations/vercel.d.mts.map +1 -0
  23. package/dist/internal/build/release/destinations/vercel.mjs +25 -0
  24. package/dist/internal/build/release/destinations/vercel.mjs.map +1 -0
  25. package/dist/internal/build/release/git.d.mts +4 -0
  26. package/dist/internal/build/release/git.d.mts.map +1 -0
  27. package/dist/internal/build/release/git.mjs +21 -0
  28. package/dist/internal/build/release/git.mjs.map +1 -0
  29. package/dist/internal/build/release/index.d.mts +7 -0
  30. package/dist/internal/build/release/index.d.mts.map +1 -0
  31. package/dist/internal/build/release/index.mjs +26 -0
  32. package/dist/internal/build/release/index.mjs.map +1 -0
  33. package/dist/internal/build/release/sources/github.d.mts +6 -0
  34. package/dist/internal/build/release/sources/github.d.mts.map +1 -0
  35. package/dist/internal/build/release/sources/github.mjs +15 -0
  36. package/dist/internal/build/release/sources/github.mjs.map +1 -0
  37. package/dist/internal/build/release/types.d.mts +11 -0
  38. package/dist/internal/build/release/types.d.mts.map +1 -0
  39. package/dist/internal/build/release/types.mjs +1 -0
  40. package/dist/internal/build/source-maps/discover.d.mts +14 -0
  41. package/dist/internal/build/source-maps/discover.d.mts.map +1 -0
  42. package/dist/internal/build/source-maps/discover.mjs +61 -0
  43. package/dist/internal/build/source-maps/discover.mjs.map +1 -0
  44. package/dist/internal/build/source-maps/index.d.mts +23 -0
  45. package/dist/internal/build/source-maps/index.d.mts.map +1 -0
  46. package/dist/internal/build/source-maps/index.mjs +33 -0
  47. package/dist/internal/build/source-maps/index.mjs.map +1 -0
  48. package/dist/internal/build/value-injection-loader.d.mts +10 -0
  49. package/dist/internal/build/value-injection-loader.d.mts.map +1 -0
  50. package/dist/internal/build/value-injection-loader.mjs +24 -0
  51. package/dist/internal/build/value-injection-loader.mjs.map +1 -0
  52. package/dist/internal/env.d.mts +15 -0
  53. package/dist/internal/env.d.mts.map +1 -0
  54. package/dist/internal/env.mjs +18 -0
  55. package/dist/internal/env.mjs.map +1 -0
  56. package/dist/internal/route/cors.d.mts +4 -0
  57. package/dist/internal/route/cors.d.mts.map +1 -0
  58. package/dist/internal/route/cors.mjs +15 -0
  59. package/dist/internal/route/cors.mjs.map +1 -0
  60. package/dist/internal/route/handle-get.d.mts +4 -0
  61. package/dist/internal/route/handle-get.d.mts.map +1 -0
  62. package/dist/internal/route/handle-get.mjs +15 -0
  63. package/dist/internal/route/handle-get.mjs.map +1 -0
  64. package/dist/internal/route/handle-post.d.mts +4 -0
  65. package/dist/internal/route/handle-post.d.mts.map +1 -0
  66. package/dist/internal/route/handle-post.mjs +105 -0
  67. package/dist/internal/route/handle-post.mjs.map +1 -0
  68. package/dist/internal/route/sw-script.d.mts +4 -0
  69. package/dist/internal/route/sw-script.d.mts.map +1 -0
  70. package/dist/internal/route/sw-script.mjs +32 -0
  71. package/dist/internal/route/sw-script.mjs.map +1 -0
  72. package/dist/internal/server/capture.d.mts +9 -0
  73. package/dist/internal/server/capture.d.mts.map +1 -0
  74. package/dist/internal/server/capture.mjs +46 -0
  75. package/dist/internal/server/capture.mjs.map +1 -0
  76. package/dist/internal/server/dedupe.d.mts +5 -0
  77. package/dist/internal/server/dedupe.d.mts.map +1 -0
  78. package/dist/internal/server/dedupe.mjs +11 -0
  79. package/dist/internal/server/dedupe.mjs.map +1 -0
  80. package/dist/internal/server/envelope.d.mts +14 -0
  81. package/dist/internal/server/envelope.d.mts.map +1 -0
  82. package/dist/internal/server/envelope.mjs +41 -0
  83. package/dist/internal/server/envelope.mjs.map +1 -0
  84. package/dist/internal/server/mechanisms.d.mts +7 -0
  85. package/dist/internal/server/mechanisms.d.mts.map +1 -0
  86. package/dist/internal/server/mechanisms.mjs +12 -0
  87. package/dist/internal/server/mechanisms.mjs.map +1 -0
  88. package/dist/internal/server/normalize-request.d.mts +7 -0
  89. package/dist/internal/server/normalize-request.d.mts.map +1 -0
  90. package/dist/internal/server/normalize-request.mjs +50 -0
  91. package/dist/internal/server/normalize-request.mjs.map +1 -0
  92. package/dist/internal/server/runtime.d.mts +14 -0
  93. package/dist/internal/server/runtime.d.mts.map +1 -0
  94. package/dist/internal/server/runtime.mjs +18 -0
  95. package/dist/internal/server/runtime.mjs.map +1 -0
  96. package/dist/internal/server/session.d.mts +11 -0
  97. package/dist/internal/server/session.d.mts.map +1 -0
  98. package/dist/internal/server/session.mjs +15 -0
  99. package/dist/internal/server/session.mjs.map +1 -0
  100. package/dist/internal/server/transport.d.mts +12 -0
  101. package/dist/internal/server/transport.d.mts.map +1 -0
  102. package/dist/internal/server/transport.mjs +17 -0
  103. package/dist/internal/server/transport.mjs.map +1 -0
  104. package/dist/internal/server/types.d.mts +17 -0
  105. package/dist/internal/server/types.d.mts.map +1 -0
  106. package/dist/internal/server/types.mjs +1 -0
  107. package/dist/provider.d.mts +2 -0
  108. package/dist/provider.mjs +3 -0
  109. package/dist/route-handler.d.mts +7 -0
  110. package/dist/route-handler.d.mts.map +1 -0
  111. package/dist/route-handler.mjs +18 -0
  112. package/dist/route-handler.mjs.map +1 -0
  113. package/dist/server.d.mts +8 -0
  114. package/dist/server.d.mts.map +1 -0
  115. package/dist/server.mjs +6 -0
  116. package/dist/server.mjs.map +1 -0
  117. package/package.json +52 -84
  118. package/LICENSE +0 -21
  119. package/dist/build/env-config.d.mts +0 -9
  120. package/dist/build/env-config.d.mts.map +0 -1
  121. package/dist/build/env-config.mjs +0 -25
  122. package/dist/build/env-config.mjs.map +0 -1
  123. package/dist/build/exchange-surface.d.mts +0 -9
  124. package/dist/build/exchange-surface.d.mts.map +0 -1
  125. package/dist/build/exchange-surface.mjs +0 -36
  126. package/dist/build/exchange-surface.mjs.map +0 -1
  127. package/dist/build/loaders/value-injection-loader.d.mts +0 -22
  128. package/dist/build/loaders/value-injection-loader.d.mts.map +0 -1
  129. package/dist/build/loaders/value-injection-loader.mjs +0 -35
  130. package/dist/build/loaders/value-injection-loader.mjs.map +0 -1
  131. package/dist/build/logger.d.mts +0 -11
  132. package/dist/build/logger.d.mts.map +0 -1
  133. package/dist/build/logger.mjs +0 -153
  134. package/dist/build/logger.mjs.map +0 -1
  135. package/dist/build/nextjs-version.d.mts +0 -40
  136. package/dist/build/nextjs-version.d.mts.map +0 -1
  137. package/dist/build/nextjs-version.mjs +0 -66
  138. package/dist/build/nextjs-version.mjs.map +0 -1
  139. package/dist/build/release-program.d.mts +0 -21
  140. package/dist/build/release-program.d.mts.map +0 -1
  141. package/dist/build/release-program.mjs +0 -91
  142. package/dist/build/release-program.mjs.map +0 -1
  143. package/dist/build/services/config.service.d.mts +0 -9
  144. package/dist/build/services/config.service.d.mts.map +0 -1
  145. package/dist/build/services/config.service.mjs +0 -8
  146. package/dist/build/services/config.service.mjs.map +0 -1
  147. package/dist/build/services/instrumentation-detection.service.d.mts +0 -19
  148. package/dist/build/services/instrumentation-detection.service.d.mts.map +0 -1
  149. package/dist/build/services/instrumentation-detection.service.mjs +0 -77
  150. package/dist/build/services/instrumentation-detection.service.mjs.map +0 -1
  151. package/dist/build/services/preflight.service.d.mts +0 -18
  152. package/dist/build/services/preflight.service.d.mts.map +0 -1
  153. package/dist/build/services/preflight.service.mjs +0 -67
  154. package/dist/build/services/preflight.service.mjs.map +0 -1
  155. package/dist/build/services/release-api.service.d.mts +0 -11
  156. package/dist/build/services/release-api.service.d.mts.map +0 -1
  157. package/dist/build/services/release-api.service.mjs +0 -9
  158. package/dist/build/services/release-api.service.mjs.map +0 -1
  159. package/dist/build/services/release-identity.service.d.mts +0 -23
  160. package/dist/build/services/release-identity.service.d.mts.map +0 -1
  161. package/dist/build/services/release-identity.service.mjs +0 -61
  162. package/dist/build/services/release-identity.service.mjs.map +0 -1
  163. package/dist/build/services/source-map-failure-cleanup.service.d.mts +0 -11
  164. package/dist/build/services/source-map-failure-cleanup.service.d.mts.map +0 -1
  165. package/dist/build/services/source-map-failure-cleanup.service.mjs +0 -9
  166. package/dist/build/services/source-map-failure-cleanup.service.mjs.map +0 -1
  167. package/dist/build/services/source-map.service.d.mts +0 -20
  168. package/dist/build/services/source-map.service.d.mts.map +0 -1
  169. package/dist/build/services/source-map.service.mjs +0 -56
  170. package/dist/build/services/source-map.service.mjs.map +0 -1
  171. package/dist/build/source-maps/api.d.mts +0 -44
  172. package/dist/build/source-maps/api.d.mts.map +0 -1
  173. package/dist/build/source-maps/api.mjs +0 -64
  174. package/dist/build/source-maps/api.mjs.map +0 -1
  175. package/dist/build/source-maps/client.d.mts +0 -82
  176. package/dist/build/source-maps/client.d.mts.map +0 -1
  177. package/dist/build/source-maps/client.mjs +0 -239
  178. package/dist/build/source-maps/client.mjs.map +0 -1
  179. package/dist/build/source-maps/errors.d.mts +0 -121
  180. package/dist/build/source-maps/errors.d.mts.map +0 -1
  181. package/dist/build/source-maps/errors.mjs +0 -46
  182. package/dist/build/source-maps/errors.mjs.map +0 -1
  183. package/dist/build/source-maps/files.d.mts +0 -35
  184. package/dist/build/source-maps/files.d.mts.map +0 -1
  185. package/dist/build/source-maps/files.mjs +0 -220
  186. package/dist/build/source-maps/files.mjs.map +0 -1
  187. package/dist/build/source-maps/providers/deployment/detector.d.mts +0 -17
  188. package/dist/build/source-maps/providers/deployment/detector.d.mts.map +0 -1
  189. package/dist/build/source-maps/providers/deployment/detector.mjs +0 -20
  190. package/dist/build/source-maps/providers/deployment/detector.mjs.map +0 -1
  191. package/dist/build/source-maps/providers/deployment/types.d.mts +0 -12
  192. package/dist/build/source-maps/providers/deployment/types.d.mts.map +0 -1
  193. package/dist/build/source-maps/providers/deployment/types.mjs +0 -3
  194. package/dist/build/source-maps/providers/deployment/vercel.d.mts +0 -6
  195. package/dist/build/source-maps/providers/deployment/vercel.d.mts.map +0 -1
  196. package/dist/build/source-maps/providers/deployment/vercel.mjs +0 -33
  197. package/dist/build/source-maps/providers/deployment/vercel.mjs.map +0 -1
  198. package/dist/build/source-maps/providers/source-control/detector.d.mts +0 -16
  199. package/dist/build/source-maps/providers/source-control/detector.d.mts.map +0 -1
  200. package/dist/build/source-maps/providers/source-control/detector.mjs +0 -20
  201. package/dist/build/source-maps/providers/source-control/detector.mjs.map +0 -1
  202. package/dist/build/source-maps/providers/source-control/git.d.mts +0 -6
  203. package/dist/build/source-maps/providers/source-control/git.d.mts.map +0 -1
  204. package/dist/build/source-maps/providers/source-control/git.mjs +0 -47
  205. package/dist/build/source-maps/providers/source-control/git.mjs.map +0 -1
  206. package/dist/build/source-maps/providers/source-control/types.d.mts +0 -14
  207. package/dist/build/source-maps/providers/source-control/types.d.mts.map +0 -1
  208. package/dist/build/source-maps/providers/source-control/types.mjs +0 -3
  209. package/dist/build/with-interfere.d.mts +0 -70
  210. package/dist/build/with-interfere.d.mts.map +0 -1
  211. package/dist/build/with-interfere.mjs +0 -182
  212. package/dist/build/with-interfere.mjs.map +0 -1
  213. package/dist/client/auto-init.d.mts +0 -91
  214. package/dist/client/auto-init.d.mts.map +0 -1
  215. package/dist/client/auto-init.mjs +0 -121
  216. package/dist/client/auto-init.mjs.map +0 -1
  217. package/dist/client/client.d.mts +0 -3
  218. package/dist/client/client.mjs +0 -5
  219. package/dist/client/provider.d.mts +0 -22
  220. package/dist/client/provider.d.mts.map +0 -1
  221. package/dist/client/provider.mjs +0 -50
  222. package/dist/client/provider.mjs.map +0 -1
  223. package/dist/lib/env.d.mts +0 -12
  224. package/dist/lib/env.d.mts.map +0 -1
  225. package/dist/lib/env.mjs +0 -17
  226. package/dist/lib/env.mjs.map +0 -1
  227. package/dist/lib/types.d.mts +0 -22
  228. package/dist/lib/types.d.mts.map +0 -1
  229. package/dist/lib/types.mjs +0 -7
  230. package/dist/lib/types.mjs.map +0 -1
  231. package/dist/server/auto-init.d.mts +0 -88
  232. package/dist/server/auto-init.d.mts.map +0 -1
  233. package/dist/server/auto-init.mjs +0 -101
  234. package/dist/server/auto-init.mjs.map +0 -1
  235. package/dist/server/middleware.d.mts +0 -11
  236. package/dist/server/middleware.d.mts.map +0 -1
  237. package/dist/server/middleware.mjs +0 -92
  238. package/dist/server/middleware.mjs.map +0 -1
  239. package/dist/server/on-request-error.d.mts +0 -27
  240. package/dist/server/on-request-error.d.mts.map +0 -1
  241. package/dist/server/on-request-error.mjs +0 -74
  242. package/dist/server/on-request-error.mjs.map +0 -1
  243. package/dist/server/proxy.d.mts +0 -6
  244. package/dist/server/proxy.d.mts.map +0 -1
  245. package/dist/server/proxy.mjs +0 -29
  246. package/dist/server/proxy.mjs.map +0 -1
  247. package/dist/server/route-handler.d.mts +0 -39
  248. package/dist/server/route-handler.d.mts.map +0 -1
  249. package/dist/server/route-handler.mjs +0 -171
  250. package/dist/server/route-handler.mjs.map +0 -1
  251. package/dist/server/sdk.d.mts +0 -96
  252. package/dist/server/sdk.d.mts.map +0 -1
  253. package/dist/server/sdk.mjs +0 -152
  254. package/dist/server/sdk.mjs.map +0 -1
  255. package/dist/server/services/config.service.d.mts +0 -48
  256. package/dist/server/services/config.service.d.mts.map +0 -1
  257. package/dist/server/services/config.service.mjs +0 -67
  258. package/dist/server/services/config.service.mjs.map +0 -1
  259. package/dist/server/services/error-tracking.service.d.mts +0 -19
  260. package/dist/server/services/error-tracking.service.d.mts.map +0 -1
  261. package/dist/server/services/error-tracking.service.mjs +0 -33
  262. package/dist/server/services/error-tracking.service.mjs.map +0 -1
  263. package/dist/server/session-context.d.mts +0 -60
  264. package/dist/server/session-context.d.mts.map +0 -1
  265. package/dist/server/session-context.mjs +0 -62
  266. package/dist/server/session-context.mjs.map +0 -1
@@ -0,0 +1,18 @@
1
+ import { parseEnvValue } from "@interfere/types/sdk/env";
2
+ import { API_URL } from "@interfere/constants/api";
3
+ import { normalizeEnv } from "@interfere/types/sdk/runtime";
4
+ //#region src/internal/env.ts
5
+ function readInterfereEnv() {
6
+ const nodeEnvironment = normalizeEnv(process.env.NODE_ENV) ?? "production";
7
+ return {
8
+ apiKey: parseEnvValue(process.env.INTERFERE_API_KEY),
9
+ apiUrl: parseEnvValue(process.env.INTERFERE_API_URL) ?? API_URL,
10
+ nodeEnvironment,
11
+ release: {
12
+ sourceId: parseEnvValue(process.env.NEXT_PUBLIC_INTERFERE_BUILD_ID),
13
+ destinationId: parseEnvValue(process.env.NEXT_PUBLIC_INTERFERE_RELEASE_ID)
14
+ }
15
+ };
16
+ }
17
+ //#endregion
18
+ export { readInterfereEnv };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.mjs","names":[],"sources":["../../src/internal/env.ts"],"sourcesContent":["import { API_URL } from \"@interfere/constants/api\";\nimport { parseEnvValue } from \"@interfere/types/sdk/env\";\nimport type { Env } from \"@interfere/types/sdk/runtime\";\nimport { normalizeEnv } from \"@interfere/types/sdk/runtime\";\n\nexport interface InterfereEnv {\n readonly apiKey: string | null;\n readonly apiUrl: string;\n readonly nodeEnvironment: Exclude<Env, null>;\n readonly release: {\n readonly sourceId: string | null;\n readonly destinationId: string | null;\n };\n}\n\nexport function readInterfereEnv(): InterfereEnv {\n const nodeEnvironment = normalizeEnv(process.env.NODE_ENV) ?? \"production\";\n return {\n apiKey: parseEnvValue(process.env.INTERFERE_API_KEY),\n apiUrl: parseEnvValue(process.env.INTERFERE_API_URL) ?? API_URL,\n nodeEnvironment,\n release: {\n sourceId: parseEnvValue(process.env.NEXT_PUBLIC_INTERFERE_BUILD_ID),\n destinationId: parseEnvValue(\n process.env.NEXT_PUBLIC_INTERFERE_RELEASE_ID\n ),\n },\n };\n}\n"],"mappings":";;;;AAeA,SAAgB,mBAAiC;CAC/C,MAAM,kBAAkB,aAAa,QAAQ,IAAI,SAAS,IAAI;AAC9D,QAAO;EACL,QAAQ,cAAc,QAAQ,IAAI,kBAAkB;EACpD,QAAQ,cAAc,QAAQ,IAAI,kBAAkB,IAAI;EACxD;EACA,SAAS;GACP,UAAU,cAAc,QAAQ,IAAI,+BAA+B;GACnE,eAAe,cACb,QAAQ,IAAI,iCACb;GACF;EACF"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/route/cors.d.ts
2
+ declare function handleOptions(): Response;
3
+ //#endregion
4
+ export { handleOptions };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.mts","names":[],"sources":["../../../src/internal/route/cors.ts"],"mappings":";iBAOgB,aAAA,CAAA,GAAiB,QAAA"}
@@ -0,0 +1,15 @@
1
+ //#region src/internal/route/cors.ts
2
+ const CORS_HEADERS = {
3
+ "Access-Control-Allow-Origin": "*",
4
+ "Access-Control-Allow-Methods": "GET, POST, PUT, OPTIONS",
5
+ "Access-Control-Allow-Headers": "Content-Type",
6
+ "Access-Control-Max-Age": "86400"
7
+ };
8
+ function handleOptions() {
9
+ return new Response(null, {
10
+ status: 200,
11
+ headers: CORS_HEADERS
12
+ });
13
+ }
14
+ //#endregion
15
+ export { handleOptions };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.mjs","names":[],"sources":["../../../src/internal/route/cors.ts"],"sourcesContent":["const CORS_HEADERS = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type\",\n \"Access-Control-Max-Age\": \"86400\",\n};\n\nexport function handleOptions(): Response {\n return new Response(null, {\n status: 200,\n headers: CORS_HEADERS,\n });\n}\n"],"mappings":";AAAA,MAAM,eAAe;CACnB,+BAA+B;CAC/B,gCAAgC;CAChC,gCAAgC;CAChC,0BAA0B;CAC3B;AAED,SAAgB,gBAA0B;AACxC,QAAO,IAAI,SAAS,MAAM;EACxB,QAAQ;EACR,SAAS;EACV,CAAC"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/route/handle-get.d.ts
2
+ declare function handleGet(request: Request): Response;
3
+ //#endregion
4
+ export { handleGet };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-get.d.mts","names":[],"sources":["../../../src/internal/route/handle-get.ts"],"mappings":";iBAEgB,SAAA,CAAU,OAAA,EAAS,OAAA,GAAU,QAAA"}
@@ -0,0 +1,15 @@
1
+ import { SW_SCRIPT } from "./sw-script.mjs";
2
+ //#region src/internal/route/handle-get.ts
3
+ function handleGet(request) {
4
+ if (!new URL(request.url).pathname.endsWith("/sw")) return new Response("Not Found", { status: 404 });
5
+ return new Response(SW_SCRIPT, {
6
+ status: 200,
7
+ headers: {
8
+ "content-type": "application/javascript",
9
+ "service-worker-allowed": "/",
10
+ "cache-control": "public, max-age=3600"
11
+ }
12
+ });
13
+ }
14
+ //#endregion
15
+ export { handleGet };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-get.mjs","names":[],"sources":["../../../src/internal/route/handle-get.ts"],"sourcesContent":["import { SW_SCRIPT } from \"./sw-script.js\";\n\nexport function handleGet(request: Request): Response {\n const pathname = new URL(request.url).pathname;\n if (!pathname.endsWith(\"/sw\")) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n return new Response(SW_SCRIPT, {\n status: 200,\n headers: {\n \"content-type\": \"application/javascript\",\n \"service-worker-allowed\": \"/\",\n \"cache-control\": \"public, max-age=3600\",\n },\n });\n}\n"],"mappings":";;AAEA,SAAgB,UAAU,SAA4B;AAEpD,KAAI,CADa,IAAI,IAAI,QAAQ,IAAI,CAAC,SACxB,SAAS,MAAM,CAC3B,QAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,KAAK,CAAC;AAGnD,QAAO,IAAI,SAAS,WAAW;EAC7B,QAAQ;EACR,SAAS;GACP,gBAAgB;GAChB,0BAA0B;GAC1B,iBAAiB;GAClB;EACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/route/handle-post.d.ts
2
+ declare function handlePost(request: Request): Promise<Response>;
3
+ //#endregion
4
+ export { handlePost };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-post.d.mts","names":[],"sources":["../../../src/internal/route/handle-post.ts"],"mappings":";iBA0CsB,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA"}
@@ -0,0 +1,105 @@
1
+ import { readInterfereEnv } from "../env.mjs";
2
+ import { API_PATHS } from "@interfere/constants/api";
3
+ //#region src/internal/route/handle-post.ts
4
+ function parseEnvelopes(value) {
5
+ if (!Array.isArray(value)) return null;
6
+ return value;
7
+ }
8
+ function injectReleaseMetadata(envelopes, metadata) {
9
+ if (metadata.sourceId === null && metadata.destinationId === null) return envelopes;
10
+ return envelopes.map((envelope) => ({
11
+ ...envelope,
12
+ buildId: metadata.sourceId ?? envelope.buildId,
13
+ releaseId: metadata.destinationId ?? envelope.releaseId
14
+ }));
15
+ }
16
+ const PROXY_PATH_PATTERN = /\/api\/interfere(\/.*)/;
17
+ function extractSubPath(request) {
18
+ return new URL(request.url).pathname.match(PROXY_PATH_PATTERN)?.[1] ?? "/";
19
+ }
20
+ async function handlePost(request) {
21
+ const env = readInterfereEnv();
22
+ if (env.apiKey === null) {
23
+ console.warn("[interfere] INTERFERE_API_KEY is not set. The proxy route will return 503 until this environment variable is configured.");
24
+ return Response.json({
25
+ code: "INTERFERE_NOT_CONFIGURED",
26
+ message: "INTERFERE_API_KEY is required."
27
+ }, { status: 503 });
28
+ }
29
+ const authed = {
30
+ apiKey: env.apiKey,
31
+ apiUrl: env.apiUrl,
32
+ release: env.release
33
+ };
34
+ const subPath = extractSubPath(request);
35
+ try {
36
+ if (subPath === API_PATHS.INGEST) return await handleIngest(request, authed);
37
+ return await forwardToCollector(request, authed, subPath);
38
+ } catch (error) {
39
+ console.error(`[interfere] proxy ${request.method} ${subPath} failed:`, error);
40
+ return Response.json({
41
+ code: "INTERFERE_PROXY_ERROR",
42
+ message: "Proxy request failed."
43
+ }, { status: 502 });
44
+ }
45
+ }
46
+ async function handleIngest(request, env) {
47
+ let payload;
48
+ try {
49
+ payload = await request.json();
50
+ } catch {
51
+ return Response.json({
52
+ code: "INTERFERE_INVALID_JSON",
53
+ message: "Request body must be valid JSON."
54
+ }, { status: 400 });
55
+ }
56
+ const envelopes = parseEnvelopes(payload);
57
+ if (envelopes === null) return Response.json({
58
+ code: "INTERFERE_INVALID_ENVELOPES",
59
+ message: "Request body must be an array of envelopes."
60
+ }, { status: 400 });
61
+ const traceparent = request.headers.get("traceparent");
62
+ const upstream = await fetch(`${env.apiUrl}${API_PATHS.INGEST}`, {
63
+ method: "POST",
64
+ headers: {
65
+ "content-type": "application/json",
66
+ "x-api-key": env.apiKey,
67
+ ...traceparent ? { traceparent } : {}
68
+ },
69
+ body: JSON.stringify(injectReleaseMetadata(envelopes, env.release)),
70
+ keepalive: true
71
+ });
72
+ return new Response(upstream.body, {
73
+ status: upstream.status,
74
+ headers: { "content-type": upstream.headers.get("content-type") ?? "application/json" }
75
+ });
76
+ }
77
+ async function forwardToCollector(request, env, subPath) {
78
+ const url = `${env.apiUrl}${subPath}`;
79
+ const traceparent = request.headers.get("traceparent");
80
+ console.debug(`[interfere] proxy ${request.method} ${subPath} -> ${url}`);
81
+ const upstream = await fetch(url, {
82
+ method: request.method,
83
+ headers: {
84
+ "content-type": request.headers.get("content-type") ?? "application/json",
85
+ "x-api-key": env.apiKey,
86
+ ...traceparent ? { traceparent } : {}
87
+ },
88
+ body: request.body,
89
+ keepalive: true
90
+ });
91
+ if (!upstream.ok) {
92
+ const body = await upstream.text().catch(() => "");
93
+ console.error(`[interfere] upstream ${upstream.status} for ${request.method} ${subPath}:`, body);
94
+ return Response.json({
95
+ code: "INTERFERE_UPSTREAM_ERROR",
96
+ message: body
97
+ }, { status: upstream.status });
98
+ }
99
+ return new Response(upstream.body, {
100
+ status: upstream.status,
101
+ headers: { "content-type": upstream.headers.get("content-type") ?? "application/json" }
102
+ });
103
+ }
104
+ //#endregion
105
+ export { handlePost };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-post.mjs","names":[],"sources":["../../../src/internal/route/handle-post.ts"],"sourcesContent":["import { API_PATHS } from \"@interfere/constants/api\";\nimport type { Envelope } from \"@interfere/types/sdk/envelope\";\n\nimport { type InterfereEnv, readInterfereEnv } from \"../env.js\";\n\nfunction parseEnvelopes(value: unknown): Envelope[] | null {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return value as Envelope[];\n}\n\nfunction injectReleaseMetadata(\n envelopes: Envelope[],\n metadata: { sourceId: string | null; destinationId: string | null }\n): Envelope[] {\n if (metadata.sourceId === null && metadata.destinationId === null) {\n return envelopes;\n }\n\n return envelopes.map((envelope) => ({\n ...envelope,\n buildId: metadata.sourceId ?? envelope.buildId,\n releaseId: metadata.destinationId ?? envelope.releaseId,\n }));\n}\n\nconst PROXY_PATH_PATTERN = /\\/api\\/interfere(\\/.*)/;\n\nfunction extractSubPath(request: Request): string {\n const url = new URL(request.url);\n const match = url.pathname.match(PROXY_PATH_PATTERN);\n return match?.[1] ?? \"/\";\n}\n\ninterface AuthenticatedEnv {\n apiKey: string;\n apiUrl: string;\n release: InterfereEnv[\"release\"];\n}\n\nexport async function handlePost(request: Request): Promise<Response> {\n const env = readInterfereEnv();\n\n if (env.apiKey === null) {\n console.warn(\n \"[interfere] INTERFERE_API_KEY is not set. The proxy route will return 503 until this environment variable is configured.\"\n );\n\n return Response.json(\n {\n code: \"INTERFERE_NOT_CONFIGURED\",\n message: \"INTERFERE_API_KEY is required.\",\n },\n { status: 503 }\n );\n }\n\n const authed: AuthenticatedEnv = {\n apiKey: env.apiKey,\n apiUrl: env.apiUrl,\n release: env.release,\n };\n\n const subPath = extractSubPath(request);\n\n try {\n if (subPath === API_PATHS.INGEST) {\n return await handleIngest(request, authed);\n }\n\n return await forwardToCollector(request, authed, subPath);\n } catch (error) {\n console.error(\n `[interfere] proxy ${request.method} ${subPath} failed:`,\n error\n );\n return Response.json(\n { code: \"INTERFERE_PROXY_ERROR\", message: \"Proxy request failed.\" },\n { status: 502 }\n );\n }\n}\n\nasync function handleIngest(\n request: Request,\n env: AuthenticatedEnv\n): Promise<Response> {\n let payload: unknown;\n try {\n payload = await request.json();\n } catch {\n return Response.json(\n {\n code: \"INTERFERE_INVALID_JSON\",\n message: \"Request body must be valid JSON.\",\n },\n { status: 400 }\n );\n }\n\n const envelopes = parseEnvelopes(payload);\n if (envelopes === null) {\n return Response.json(\n {\n code: \"INTERFERE_INVALID_ENVELOPES\",\n message: \"Request body must be an array of envelopes.\",\n },\n { status: 400 }\n );\n }\n\n const traceparent = request.headers.get(\"traceparent\");\n const upstream = await fetch(`${env.apiUrl}${API_PATHS.INGEST}`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"x-api-key\": env.apiKey,\n ...(traceparent ? { traceparent } : {}),\n },\n body: JSON.stringify(injectReleaseMetadata(envelopes, env.release)),\n keepalive: true,\n });\n\n return new Response(upstream.body, {\n status: upstream.status,\n headers: {\n \"content-type\":\n upstream.headers.get(\"content-type\") ?? \"application/json\",\n },\n });\n}\n\nasync function forwardToCollector(\n request: Request,\n env: AuthenticatedEnv,\n subPath: string\n): Promise<Response> {\n const url = `${env.apiUrl}${subPath}`;\n const traceparent = request.headers.get(\"traceparent\");\n\n console.debug(`[interfere] proxy ${request.method} ${subPath} -> ${url}`);\n\n const upstream = await fetch(url, {\n method: request.method,\n headers: {\n \"content-type\": request.headers.get(\"content-type\") ?? \"application/json\",\n \"x-api-key\": env.apiKey,\n ...(traceparent ? { traceparent } : {}),\n },\n body: request.body,\n keepalive: true,\n });\n\n if (!upstream.ok) {\n const body = await upstream.text().catch(() => \"\");\n console.error(\n `[interfere] upstream ${upstream.status} for ${request.method} ${subPath}:`,\n body\n );\n return Response.json(\n { code: \"INTERFERE_UPSTREAM_ERROR\", message: body },\n { status: upstream.status }\n );\n }\n\n return new Response(upstream.body, {\n status: upstream.status,\n headers: {\n \"content-type\":\n upstream.headers.get(\"content-type\") ?? \"application/json\",\n },\n });\n}\n"],"mappings":";;;AAKA,SAAS,eAAe,OAAmC;AACzD,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO;AAGT,QAAO;;AAGT,SAAS,sBACP,WACA,UACY;AACZ,KAAI,SAAS,aAAa,QAAQ,SAAS,kBAAkB,KAC3D,QAAO;AAGT,QAAO,UAAU,KAAK,cAAc;EAClC,GAAG;EACH,SAAS,SAAS,YAAY,SAAS;EACvC,WAAW,SAAS,iBAAiB,SAAS;EAC/C,EAAE;;AAGL,MAAM,qBAAqB;AAE3B,SAAS,eAAe,SAA0B;AAGhD,QAFY,IAAI,IAAI,QAAQ,IAAI,CACd,SAAS,MAAM,mBAAmB,GACrC,MAAM;;AASvB,eAAsB,WAAW,SAAqC;CACpE,MAAM,MAAM,kBAAkB;AAE9B,KAAI,IAAI,WAAW,MAAM;AACvB,UAAQ,KACN,2HACD;AAED,SAAO,SAAS,KACd;GACE,MAAM;GACN,SAAS;GACV,EACD,EAAE,QAAQ,KAAK,CAChB;;CAGH,MAAM,SAA2B;EAC/B,QAAQ,IAAI;EACZ,QAAQ,IAAI;EACZ,SAAS,IAAI;EACd;CAED,MAAM,UAAU,eAAe,QAAQ;AAEvC,KAAI;AACF,MAAI,YAAY,UAAU,OACxB,QAAO,MAAM,aAAa,SAAS,OAAO;AAG5C,SAAO,MAAM,mBAAmB,SAAS,QAAQ,QAAQ;UAClD,OAAO;AACd,UAAQ,MACN,qBAAqB,QAAQ,OAAO,GAAG,QAAQ,WAC/C,MACD;AACD,SAAO,SAAS,KACd;GAAE,MAAM;GAAyB,SAAS;GAAyB,EACnE,EAAE,QAAQ,KAAK,CAChB;;;AAIL,eAAe,aACb,SACA,KACmB;CACnB,IAAI;AACJ,KAAI;AACF,YAAU,MAAM,QAAQ,MAAM;SACxB;AACN,SAAO,SAAS,KACd;GACE,MAAM;GACN,SAAS;GACV,EACD,EAAE,QAAQ,KAAK,CAChB;;CAGH,MAAM,YAAY,eAAe,QAAQ;AACzC,KAAI,cAAc,KAChB,QAAO,SAAS,KACd;EACE,MAAM;EACN,SAAS;EACV,EACD,EAAE,QAAQ,KAAK,CAChB;CAGH,MAAM,cAAc,QAAQ,QAAQ,IAAI,cAAc;CACtD,MAAM,WAAW,MAAM,MAAM,GAAG,IAAI,SAAS,UAAU,UAAU;EAC/D,QAAQ;EACR,SAAS;GACP,gBAAgB;GAChB,aAAa,IAAI;GACjB,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;GACvC;EACD,MAAM,KAAK,UAAU,sBAAsB,WAAW,IAAI,QAAQ,CAAC;EACnE,WAAW;EACZ,CAAC;AAEF,QAAO,IAAI,SAAS,SAAS,MAAM;EACjC,QAAQ,SAAS;EACjB,SAAS,EACP,gBACE,SAAS,QAAQ,IAAI,eAAe,IAAI,oBAC3C;EACF,CAAC;;AAGJ,eAAe,mBACb,SACA,KACA,SACmB;CACnB,MAAM,MAAM,GAAG,IAAI,SAAS;CAC5B,MAAM,cAAc,QAAQ,QAAQ,IAAI,cAAc;AAEtD,SAAQ,MAAM,qBAAqB,QAAQ,OAAO,GAAG,QAAQ,MAAM,MAAM;CAEzE,MAAM,WAAW,MAAM,MAAM,KAAK;EAChC,QAAQ,QAAQ;EAChB,SAAS;GACP,gBAAgB,QAAQ,QAAQ,IAAI,eAAe,IAAI;GACvD,aAAa,IAAI;GACjB,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;GACvC;EACD,MAAM,QAAQ;EACd,WAAW;EACZ,CAAC;AAEF,KAAI,CAAC,SAAS,IAAI;EAChB,MAAM,OAAO,MAAM,SAAS,MAAM,CAAC,YAAY,GAAG;AAClD,UAAQ,MACN,wBAAwB,SAAS,OAAO,OAAO,QAAQ,OAAO,GAAG,QAAQ,IACzE,KACD;AACD,SAAO,SAAS,KACd;GAAE,MAAM;GAA4B,SAAS;GAAM,EACnD,EAAE,QAAQ,SAAS,QAAQ,CAC5B;;AAGH,QAAO,IAAI,SAAS,SAAS,MAAM;EACjC,QAAQ,SAAS;EACjB,SAAS,EACP,gBACE,SAAS,QAAQ,IAAI,eAAe,IAAI,oBAC3C;EACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/route/sw-script.d.ts
2
+ declare const SW_SCRIPT = "importScripts('https://storage.googleapis.com/workbox-cdn/releases/7.3.0/workbox-sw.js');\n\nself.addEventListener('install', function() { self.skipWaiting(); });\nself.addEventListener('activate', function(e) { e.waitUntil(self.clients.claim()); });\n\nworkbox.setConfig({ debug: false });\n\nworkbox.routing.registerRoute(\n function(ctx) {\n return ctx.request.method === 'POST' && ctx.url.pathname.startsWith('/api/interfere/');\n },\n new workbox.strategies.NetworkOnly({\n plugins: [\n new workbox.backgroundSync.BackgroundSyncPlugin('interfere-queue', {\n maxRetentionTime: 1440,\n }),\n {\n fetchDidSucceed: function(ctx) {\n if (ctx.response.status >= 500) {\n throw new Error(ctx.request.url + ' returned ' + ctx.response.status);\n }\n return ctx.response;\n },\n },\n ],\n }),\n 'POST'\n);";
3
+ //#endregion
4
+ export { SW_SCRIPT };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-script.d.mts","names":[],"sources":["../../../src/internal/route/sw-script.ts"],"mappings":";cAAa,SAAA"}
@@ -0,0 +1,32 @@
1
+ //#region src/internal/route/sw-script.ts
2
+ const SW_SCRIPT = `\
3
+ importScripts('https://storage.googleapis.com/workbox-cdn/releases/7.3.0/workbox-sw.js');
4
+
5
+ self.addEventListener('install', function() { self.skipWaiting(); });
6
+ self.addEventListener('activate', function(e) { e.waitUntil(self.clients.claim()); });
7
+
8
+ workbox.setConfig({ debug: false });
9
+
10
+ workbox.routing.registerRoute(
11
+ function(ctx) {
12
+ return ctx.request.method === 'POST' && ctx.url.pathname.startsWith('/api/interfere/');
13
+ },
14
+ new workbox.strategies.NetworkOnly({
15
+ plugins: [
16
+ new workbox.backgroundSync.BackgroundSyncPlugin('interfere-queue', {
17
+ maxRetentionTime: 1440,
18
+ }),
19
+ {
20
+ fetchDidSucceed: function(ctx) {
21
+ if (ctx.response.status >= 500) {
22
+ throw new Error(ctx.request.url + ' returned ' + ctx.response.status);
23
+ }
24
+ return ctx.response;
25
+ },
26
+ },
27
+ ],
28
+ }),
29
+ 'POST'
30
+ );`;
31
+ //#endregion
32
+ export { SW_SCRIPT };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-script.mjs","names":[],"sources":["../../../src/internal/route/sw-script.ts"],"sourcesContent":["export const SW_SCRIPT = `\\\nimportScripts('https://storage.googleapis.com/workbox-cdn/releases/7.3.0/workbox-sw.js');\n\nself.addEventListener('install', function() { self.skipWaiting(); });\nself.addEventListener('activate', function(e) { e.waitUntil(self.clients.claim()); });\n\nworkbox.setConfig({ debug: false });\n\nworkbox.routing.registerRoute(\n function(ctx) {\n return ctx.request.method === 'POST' && ctx.url.pathname.startsWith('/api/interfere/');\n },\n new workbox.strategies.NetworkOnly({\n plugins: [\n new workbox.backgroundSync.BackgroundSyncPlugin('interfere-queue', {\n maxRetentionTime: 1440,\n }),\n {\n fetchDidSucceed: function(ctx) {\n if (ctx.response.status >= 500) {\n throw new Error(ctx.request.url + ' returned ' + ctx.response.status);\n }\n return ctx.response;\n },\n },\n ],\n }),\n 'POST'\n);`;\n"],"mappings":";AAAA,MAAa,YAAY"}
@@ -0,0 +1,9 @@
1
+ import { CaptureErrorContext, OnRequestErrorContext } from "./types.mjs";
2
+
3
+ //#region src/internal/server/capture.d.ts
4
+ declare function captureServerError(error: unknown, request?: unknown, context?: CaptureErrorContext): Promise<void>;
5
+ declare function captureOnRequestError(error: Error & {
6
+ digest?: string;
7
+ }, request: unknown, context: OnRequestErrorContext): Promise<void>;
8
+ //#endregion
9
+ export { captureOnRequestError, captureServerError };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.mts","names":[],"sources":["../../../src/internal/server/capture.ts"],"mappings":";;;iBAcsB,kBAAA,CACpB,KAAA,WACA,OAAA,YACA,OAAA,GAAU,mBAAA,GACT,OAAA;AAAA,iBA4BmB,qBAAA,CACpB,KAAA,EAAO,KAAA;EAAU,MAAA;AAAA,GACjB,OAAA,WACA,OAAA,EAAS,qBAAA,GACR,OAAA"}
@@ -0,0 +1,46 @@
1
+ import { isErrorCaptured, markErrorCaptured } from "./dedupe.mjs";
2
+ import { ON_REQUEST_ERROR_MECHANISM } from "./mechanisms.mjs";
3
+ import { buildErrorEnvelope } from "./envelope.mjs";
4
+ import { normalizeRequest } from "./normalize-request.mjs";
5
+ import { resolveServerCaptureRuntime } from "./runtime.mjs";
6
+ import { sendEnvelope } from "./transport.mjs";
7
+ //#region src/internal/server/capture.ts
8
+ const DEFAULT_REQUEST = {
9
+ method: "GET",
10
+ path: "/",
11
+ headers: new Headers()
12
+ };
13
+ async function captureServerError(error, request, context) {
14
+ const runtime = resolveServerCaptureRuntime();
15
+ if (runtime.apiKey === null) return;
16
+ const normalizedRequest = normalizeRequest(request);
17
+ const envelope = buildErrorEnvelope({
18
+ error,
19
+ request: normalizedRequest,
20
+ context,
21
+ runtime
22
+ });
23
+ try {
24
+ await sendEnvelope({
25
+ envelope,
26
+ runtime,
27
+ traceparent: context?.traceparent ?? normalizedRequest?.headers.get("traceparent") ?? void 0
28
+ });
29
+ } catch {}
30
+ }
31
+ async function captureOnRequestError(error, request, context) {
32
+ if (isErrorCaptured(error)) return;
33
+ markErrorCaptured(error);
34
+ const normalizedRequest = normalizeRequest(request) ?? DEFAULT_REQUEST;
35
+ await captureServerError(error, normalizedRequest, {
36
+ mechanism: ON_REQUEST_ERROR_MECHANISM,
37
+ nextjs: {
38
+ ...context,
39
+ requestMethod: normalizedRequest.method,
40
+ requestPath: normalizedRequest.path,
41
+ ...error.digest ? { errorDigest: error.digest } : {}
42
+ }
43
+ });
44
+ }
45
+ //#endregion
46
+ export { captureOnRequestError, captureServerError };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.mjs","names":[],"sources":["../../../src/internal/server/capture.ts"],"sourcesContent":["import { isErrorCaptured, markErrorCaptured } from \"./dedupe.js\";\nimport { buildErrorEnvelope } from \"./envelope.js\";\nimport { ON_REQUEST_ERROR_MECHANISM } from \"./mechanisms.js\";\nimport { normalizeRequest, TRACEPARENT_HEADER } from \"./normalize-request.js\";\nimport { resolveServerCaptureRuntime } from \"./runtime.js\";\nimport { sendEnvelope } from \"./transport.js\";\nimport type { CaptureErrorContext, OnRequestErrorContext } from \"./types.js\";\n\nconst DEFAULT_REQUEST = {\n method: \"GET\",\n path: \"/\",\n headers: new Headers(),\n};\n\nexport async function captureServerError(\n error: unknown,\n request?: unknown,\n context?: CaptureErrorContext\n): Promise<void> {\n const runtime = resolveServerCaptureRuntime();\n if (runtime.apiKey === null) {\n return;\n }\n\n const normalizedRequest = normalizeRequest(request);\n const envelope = buildErrorEnvelope({\n error,\n request: normalizedRequest,\n context,\n runtime,\n });\n\n try {\n await sendEnvelope({\n envelope,\n runtime,\n traceparent:\n context?.traceparent ??\n normalizedRequest?.headers.get(TRACEPARENT_HEADER) ??\n undefined,\n });\n } catch {\n /* best-effort */\n }\n}\n\nexport async function captureOnRequestError(\n error: Error & { digest?: string },\n request: unknown,\n context: OnRequestErrorContext\n): Promise<void> {\n if (isErrorCaptured(error)) {\n return;\n }\n markErrorCaptured(error);\n\n const normalizedRequest = normalizeRequest(request) ?? DEFAULT_REQUEST;\n\n await captureServerError(error, normalizedRequest, {\n mechanism: ON_REQUEST_ERROR_MECHANISM,\n nextjs: {\n ...context,\n requestMethod: normalizedRequest.method,\n requestPath: normalizedRequest.path,\n ...(error.digest ? { errorDigest: error.digest } : {}),\n },\n });\n}\n"],"mappings":";;;;;;;AAQA,MAAM,kBAAkB;CACtB,QAAQ;CACR,MAAM;CACN,SAAS,IAAI,SAAS;CACvB;AAED,eAAsB,mBACpB,OACA,SACA,SACe;CACf,MAAM,UAAU,6BAA6B;AAC7C,KAAI,QAAQ,WAAW,KACrB;CAGF,MAAM,oBAAoB,iBAAiB,QAAQ;CACnD,MAAM,WAAW,mBAAmB;EAClC;EACA,SAAS;EACT;EACA;EACD,CAAC;AAEF,KAAI;AACF,QAAM,aAAa;GACjB;GACA;GACA,aACE,SAAS,eACT,mBAAmB,QAAQ,IAAA,cAAuB,IAClD,KAAA;GACH,CAAC;SACI;;AAKV,eAAsB,sBACpB,OACA,SACA,SACe;AACf,KAAI,gBAAgB,MAAM,CACxB;AAEF,mBAAkB,MAAM;CAExB,MAAM,oBAAoB,iBAAiB,QAAQ,IAAI;AAEvD,OAAM,mBAAmB,OAAO,mBAAmB;EACjD,WAAW;EACX,QAAQ;GACN,GAAG;GACH,eAAe,kBAAkB;GACjC,aAAa,kBAAkB;GAC/B,GAAI,MAAM,SAAS,EAAE,aAAa,MAAM,QAAQ,GAAG,EAAE;GACtD;EACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ //#region src/internal/server/dedupe.d.ts
2
+ declare function isErrorCaptured(error: unknown): boolean;
3
+ declare function markErrorCaptured(error: unknown): void;
4
+ //#endregion
5
+ export { isErrorCaptured, markErrorCaptured };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedupe.d.mts","names":[],"sources":["../../../src/internal/server/dedupe.ts"],"mappings":";iBAEgB,eAAA,CAAgB,KAAA;AAAA,iBAIhB,iBAAA,CAAkB,KAAA"}
@@ -0,0 +1,11 @@
1
+ //#region src/internal/server/dedupe.ts
2
+ const seenErrors = /* @__PURE__ */ new WeakSet();
3
+ function isErrorCaptured(error) {
4
+ return error instanceof Error && seenErrors.has(error);
5
+ }
6
+ function markErrorCaptured(error) {
7
+ if (!(error instanceof Error)) return;
8
+ seenErrors.add(error);
9
+ }
10
+ //#endregion
11
+ export { isErrorCaptured, markErrorCaptured };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedupe.mjs","names":[],"sources":["../../../src/internal/server/dedupe.ts"],"sourcesContent":["const seenErrors = new WeakSet<Error>();\n\nexport function isErrorCaptured(error: unknown): boolean {\n return error instanceof Error && seenErrors.has(error);\n}\n\nexport function markErrorCaptured(error: unknown): void {\n if (!(error instanceof Error)) {\n return;\n }\n\n seenErrors.add(error);\n}\n"],"mappings":";AAAA,MAAM,6BAAa,IAAI,SAAgB;AAEvC,SAAgB,gBAAgB,OAAyB;AACvD,QAAO,iBAAiB,SAAS,WAAW,IAAI,MAAM;;AAGxD,SAAgB,kBAAkB,OAAsB;AACtD,KAAI,EAAE,iBAAiB,OACrB;AAGF,YAAW,IAAI,MAAM"}
@@ -0,0 +1,14 @@
1
+ import { CaptureErrorContext, NormalizedRequest } from "./types.mjs";
2
+ import { ServerCaptureRuntime } from "./runtime.mjs";
3
+ import { Envelope } from "@interfere/types/sdk/envelope";
4
+
5
+ //#region src/internal/server/envelope.d.ts
6
+ interface BuildErrorEnvelopeParams {
7
+ readonly context?: CaptureErrorContext;
8
+ readonly error: unknown;
9
+ readonly request: NormalizedRequest | null;
10
+ readonly runtime: ServerCaptureRuntime;
11
+ }
12
+ declare function buildErrorEnvelope(params: BuildErrorEnvelopeParams): Envelope<"error">;
13
+ //#endregion
14
+ export { buildErrorEnvelope };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.mts","names":[],"sources":["../../../src/internal/server/envelope.ts"],"mappings":";;;;;UAWU,wBAAA;EAAA,SACC,OAAA,GAAU,mBAAA;EAAA,SACV,KAAA;EAAA,SACA,OAAA,EAAS,iBAAA;EAAA,SACT,OAAA,EAAS,oBAAA;AAAA;AAAA,iBAGJ,kBAAA,CACd,MAAA,EAAQ,wBAAA,GACP,QAAA"}
@@ -0,0 +1,41 @@
1
+ import { DEFAULT_ERROR_MECHANISM } from "./mechanisms.mjs";
2
+ import { resolveSession } from "./session.mjs";
3
+ import { toError, toExceptions } from "@interfere/types/sdk/errors";
4
+ import { v7 } from "uuid";
5
+ //#region src/internal/server/envelope.ts
6
+ function buildErrorEnvelope(params) {
7
+ const { error, request, context, runtime } = params;
8
+ const session = resolveSession(request?.headers ?? new Headers());
9
+ let nextjsContext;
10
+ if (context?.nextjs) nextjsContext = toNextjsContext(context.nextjs);
11
+ else if (request) nextjsContext = toNextjsRequestContext(request);
12
+ return {
13
+ uuid: v7(),
14
+ v: 0,
15
+ type: "error",
16
+ payload: { exceptions: toExceptions(toError(error), context?.mechanism ?? DEFAULT_ERROR_MECHANISM) },
17
+ clientTs: Date.now(),
18
+ runtime: runtime.runtime,
19
+ environment: runtime.environment,
20
+ buildId: runtime.buildId,
21
+ releaseId: runtime.releaseId,
22
+ sessionId: session.id,
23
+ ...session.source ? { sessionSource: session.source } : {},
24
+ ...nextjsContext ? { context: nextjsContext } : {}
25
+ };
26
+ }
27
+ function toNextjsRequestContext(request) {
28
+ return {
29
+ runtime: "nextjs",
30
+ requestMethod: request.method,
31
+ requestPath: request.path
32
+ };
33
+ }
34
+ function toNextjsContext(context) {
35
+ return {
36
+ runtime: "nextjs",
37
+ ...context
38
+ };
39
+ }
40
+ //#endregion
41
+ export { buildErrorEnvelope };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.mjs","names":["uuidv7"],"sources":["../../../src/internal/server/envelope.ts"],"sourcesContent":["import type { Envelope } from \"@interfere/types/sdk/envelope\";\nimport { toError, toExceptions } from \"@interfere/types/sdk/errors\";\nimport type { NextjsContext } from \"@interfere/types/sdk/plugins/context/next\";\n\nimport { v7 as uuidv7 } from \"uuid\";\n\nimport { DEFAULT_ERROR_MECHANISM } from \"./mechanisms.js\";\nimport type { ServerCaptureRuntime } from \"./runtime.js\";\nimport { resolveSession } from \"./session.js\";\nimport type { CaptureErrorContext, NormalizedRequest } from \"./types.js\";\n\ninterface BuildErrorEnvelopeParams {\n readonly context?: CaptureErrorContext;\n readonly error: unknown;\n readonly request: NormalizedRequest | null;\n readonly runtime: ServerCaptureRuntime;\n}\n\nexport function buildErrorEnvelope(\n params: BuildErrorEnvelopeParams\n): Envelope<\"error\"> {\n const { error, request, context, runtime } = params;\n const session = resolveSession(request?.headers ?? new Headers());\n\n let nextjsContext: NextjsContext | undefined;\n if (context?.nextjs) {\n nextjsContext = toNextjsContext(context.nextjs);\n } else if (request) {\n nextjsContext = toNextjsRequestContext(request);\n }\n\n return {\n uuid: uuidv7(),\n v: 0,\n type: \"error\",\n payload: {\n exceptions: toExceptions(\n toError(error),\n context?.mechanism ?? DEFAULT_ERROR_MECHANISM\n ),\n },\n clientTs: Date.now(),\n runtime: runtime.runtime,\n environment: runtime.environment,\n buildId: runtime.buildId,\n releaseId: runtime.releaseId,\n sessionId: session.id,\n ...(session.source ? { sessionSource: session.source } : {}),\n ...(nextjsContext ? { context: nextjsContext } : {}),\n };\n}\n\nfunction toNextjsRequestContext(request: NormalizedRequest): NextjsContext {\n return {\n runtime: \"nextjs\",\n requestMethod: request.method,\n requestPath: request.path,\n };\n}\n\nfunction toNextjsContext(\n context: Omit<NextjsContext, \"runtime\">\n): NextjsContext {\n return {\n runtime: \"nextjs\",\n ...context,\n };\n}\n"],"mappings":";;;;;AAkBA,SAAgB,mBACd,QACmB;CACnB,MAAM,EAAE,OAAO,SAAS,SAAS,YAAY;CAC7C,MAAM,UAAU,eAAe,SAAS,WAAW,IAAI,SAAS,CAAC;CAEjE,IAAI;AACJ,KAAI,SAAS,OACX,iBAAgB,gBAAgB,QAAQ,OAAO;UACtC,QACT,iBAAgB,uBAAuB,QAAQ;AAGjD,QAAO;EACL,MAAMA,IAAQ;EACd,GAAG;EACH,MAAM;EACN,SAAS,EACP,YAAY,aACV,QAAQ,MAAM,EACd,SAAS,aAAa,wBACvB,EACF;EACD,UAAU,KAAK,KAAK;EACpB,SAAS,QAAQ;EACjB,aAAa,QAAQ;EACrB,SAAS,QAAQ;EACjB,WAAW,QAAQ;EACnB,WAAW,QAAQ;EACnB,GAAI,QAAQ,SAAS,EAAE,eAAe,QAAQ,QAAQ,GAAG,EAAE;EAC3D,GAAI,gBAAgB,EAAE,SAAS,eAAe,GAAG,EAAE;EACpD;;AAGH,SAAS,uBAAuB,SAA2C;AACzE,QAAO;EACL,SAAS;EACT,eAAe,QAAQ;EACvB,aAAa,QAAQ;EACtB;;AAGH,SAAS,gBACP,SACe;AACf,QAAO;EACL,SAAS;EACT,GAAG;EACJ"}
@@ -0,0 +1,7 @@
1
+ import { ErrorMechanism } from "@interfere/types/sdk/plugins/payload/errors";
2
+
3
+ //#region src/internal/server/mechanisms.d.ts
4
+ declare const DEFAULT_ERROR_MECHANISM: ErrorMechanism;
5
+ declare const ON_REQUEST_ERROR_MECHANISM: ErrorMechanism;
6
+ //#endregion
7
+ export { DEFAULT_ERROR_MECHANISM, ON_REQUEST_ERROR_MECHANISM };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mechanisms.d.mts","names":[],"sources":["../../../src/internal/server/mechanisms.ts"],"mappings":";;;cAEa,uBAAA,EAAyB,cAAA;AAAA,cAKzB,0BAAA,EAA4B,cAAA"}
@@ -0,0 +1,12 @@
1
+ //#region src/internal/server/mechanisms.ts
2
+ const DEFAULT_ERROR_MECHANISM = {
3
+ type: "captureError",
4
+ handled: true
5
+ };
6
+ const ON_REQUEST_ERROR_MECHANISM = {
7
+ type: "onRequestError",
8
+ handled: false,
9
+ synthetic: false
10
+ };
11
+ //#endregion
12
+ export { DEFAULT_ERROR_MECHANISM, ON_REQUEST_ERROR_MECHANISM };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mechanisms.mjs","names":[],"sources":["../../../src/internal/server/mechanisms.ts"],"sourcesContent":["import type { ErrorMechanism } from \"@interfere/types/sdk/plugins/payload/errors\";\n\nexport const DEFAULT_ERROR_MECHANISM: ErrorMechanism = {\n type: \"captureError\",\n handled: true,\n};\n\nexport const ON_REQUEST_ERROR_MECHANISM: ErrorMechanism = {\n type: \"onRequestError\",\n handled: false,\n synthetic: false,\n};\n"],"mappings":";AAEA,MAAa,0BAA0C;CACrD,MAAM;CACN,SAAS;CACV;AAED,MAAa,6BAA6C;CACxD,MAAM;CACN,SAAS;CACT,WAAW;CACZ"}
@@ -0,0 +1,7 @@
1
+ import { NormalizedRequest } from "./types.mjs";
2
+
3
+ //#region src/internal/server/normalize-request.d.ts
4
+ declare const TRACEPARENT_HEADER = "traceparent";
5
+ declare function normalizeRequest(request: unknown): NormalizedRequest | null;
6
+ //#endregion
7
+ export { TRACEPARENT_HEADER, normalizeRequest };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-request.d.mts","names":[],"sources":["../../../src/internal/server/normalize-request.ts"],"mappings":";;;cAEa,kBAAA;AAAA,iBAEG,gBAAA,CAAiB,OAAA,YAAmB,iBAAA"}
@@ -0,0 +1,50 @@
1
+ //#region src/internal/server/normalize-request.ts
2
+ const TRACEPARENT_HEADER = "traceparent";
3
+ function normalizeRequest(request) {
4
+ if (request instanceof Request) return {
5
+ method: normalizeMethod(request.method),
6
+ path: normalizePath(request.url),
7
+ headers: request.headers
8
+ };
9
+ if (typeof request !== "object" || request === null) return null;
10
+ const value = request;
11
+ return {
12
+ method: normalizeMethod(value.method),
13
+ path: normalizePath(typeof value.path === "string" ? value.path : toStringOrDefault(value.url)),
14
+ headers: normalizeHeaders(value.headers)
15
+ };
16
+ }
17
+ function normalizeMethod(value) {
18
+ if (typeof value !== "string") return "GET";
19
+ const method = value.trim();
20
+ return method.length > 0 ? method.toUpperCase() : "GET";
21
+ }
22
+ function normalizePath(value) {
23
+ if (value.length === 0) return "/";
24
+ try {
25
+ return new URL(value, "http://localhost").pathname || "/";
26
+ } catch {
27
+ return value.startsWith("/") ? value : `/${value}`;
28
+ }
29
+ }
30
+ function toStringOrDefault(value, fallback = "/") {
31
+ if (typeof value !== "string") return fallback;
32
+ const trimmed = value.trim();
33
+ return trimmed.length > 0 ? trimmed : fallback;
34
+ }
35
+ function normalizeHeaders(value) {
36
+ if (value instanceof Headers) return new Headers(value);
37
+ if (typeof value !== "object" || value === null) return new Headers();
38
+ const headers = new Headers();
39
+ for (const [key, headerValue] of Object.entries(value)) {
40
+ if (headerValue === void 0) continue;
41
+ if (Array.isArray(headerValue)) {
42
+ headers.set(key, headerValue.join(", "));
43
+ continue;
44
+ }
45
+ headers.set(key, String(headerValue));
46
+ }
47
+ return headers;
48
+ }
49
+ //#endregion
50
+ export { TRACEPARENT_HEADER, normalizeRequest };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-request.mjs","names":[],"sources":["../../../src/internal/server/normalize-request.ts"],"sourcesContent":["import type { NormalizedRequest } from \"./types.js\";\n\nexport const TRACEPARENT_HEADER = \"traceparent\";\n\nexport function normalizeRequest(request: unknown): NormalizedRequest | null {\n if (request instanceof Request) {\n return {\n method: normalizeMethod(request.method),\n path: normalizePath(request.url),\n headers: request.headers,\n };\n }\n\n if (typeof request !== \"object\" || request === null) {\n return null;\n }\n\n const value = request as {\n headers?: unknown;\n method?: unknown;\n path?: unknown;\n url?: unknown;\n };\n\n return {\n method: normalizeMethod(value.method),\n path: normalizePath(\n typeof value.path === \"string\" ? value.path : toStringOrDefault(value.url)\n ),\n headers: normalizeHeaders(value.headers),\n };\n}\n\nfunction normalizeMethod(value: unknown): string {\n if (typeof value !== \"string\") {\n return \"GET\";\n }\n\n const method = value.trim();\n return method.length > 0 ? method.toUpperCase() : \"GET\";\n}\n\nfunction normalizePath(value: string): string {\n if (value.length === 0) {\n return \"/\";\n }\n\n try {\n const parsed = new URL(value, \"http://localhost\");\n return parsed.pathname || \"/\";\n } catch {\n return value.startsWith(\"/\") ? value : `/${value}`;\n }\n}\n\nfunction toStringOrDefault(value: unknown, fallback = \"/\"): string {\n if (typeof value !== \"string\") {\n return fallback;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : fallback;\n}\n\nfunction normalizeHeaders(value: unknown): Headers {\n if (value instanceof Headers) {\n return new Headers(value);\n }\n\n if (typeof value !== \"object\" || value === null) {\n return new Headers();\n }\n\n const headers = new Headers();\n for (const [key, headerValue] of Object.entries(value)) {\n if (headerValue === undefined) {\n continue;\n }\n\n if (Array.isArray(headerValue)) {\n headers.set(key, headerValue.join(\", \"));\n continue;\n }\n\n headers.set(key, String(headerValue));\n }\n\n return headers;\n}\n"],"mappings":";AAEA,MAAa,qBAAqB;AAElC,SAAgB,iBAAiB,SAA4C;AAC3E,KAAI,mBAAmB,QACrB,QAAO;EACL,QAAQ,gBAAgB,QAAQ,OAAO;EACvC,MAAM,cAAc,QAAQ,IAAI;EAChC,SAAS,QAAQ;EAClB;AAGH,KAAI,OAAO,YAAY,YAAY,YAAY,KAC7C,QAAO;CAGT,MAAM,QAAQ;AAOd,QAAO;EACL,QAAQ,gBAAgB,MAAM,OAAO;EACrC,MAAM,cACJ,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO,kBAAkB,MAAM,IAAI,CAC3E;EACD,SAAS,iBAAiB,MAAM,QAAQ;EACzC;;AAGH,SAAS,gBAAgB,OAAwB;AAC/C,KAAI,OAAO,UAAU,SACnB,QAAO;CAGT,MAAM,SAAS,MAAM,MAAM;AAC3B,QAAO,OAAO,SAAS,IAAI,OAAO,aAAa,GAAG;;AAGpD,SAAS,cAAc,OAAuB;AAC5C,KAAI,MAAM,WAAW,EACnB,QAAO;AAGT,KAAI;AAEF,SADe,IAAI,IAAI,OAAO,mBAAmB,CACnC,YAAY;SACpB;AACN,SAAO,MAAM,WAAW,IAAI,GAAG,QAAQ,IAAI;;;AAI/C,SAAS,kBAAkB,OAAgB,WAAW,KAAa;AACjE,KAAI,OAAO,UAAU,SACnB,QAAO;CAGT,MAAM,UAAU,MAAM,MAAM;AAC5B,QAAO,QAAQ,SAAS,IAAI,UAAU;;AAGxC,SAAS,iBAAiB,OAAyB;AACjD,KAAI,iBAAiB,QACnB,QAAO,IAAI,QAAQ,MAAM;AAG3B,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO,IAAI,SAAS;CAGtB,MAAM,UAAU,IAAI,SAAS;AAC7B,MAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,MAAM,EAAE;AACtD,MAAI,gBAAgB,KAAA,EAClB;AAGF,MAAI,MAAM,QAAQ,YAAY,EAAE;AAC9B,WAAQ,IAAI,KAAK,YAAY,KAAK,KAAK,CAAC;AACxC;;AAGF,UAAQ,IAAI,KAAK,OAAO,YAAY,CAAC;;AAGvC,QAAO"}
@@ -0,0 +1,14 @@
1
+ import { Env, Runtime } from "@interfere/types/sdk/runtime";
2
+
3
+ //#region src/internal/server/runtime.d.ts
4
+ interface ServerCaptureRuntime {
5
+ readonly apiKey: string | null;
6
+ readonly buildId: string;
7
+ readonly environment: Env;
8
+ readonly ingestUrl: string;
9
+ readonly releaseId: string | null;
10
+ readonly runtime: Runtime;
11
+ }
12
+ declare function resolveServerCaptureRuntime(): ServerCaptureRuntime;
13
+ //#endregion
14
+ export { ServerCaptureRuntime, resolveServerCaptureRuntime };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../../../src/internal/server/runtime.ts"],"mappings":";;;UAMiB,oBAAA;EAAA,SACN,MAAA;EAAA,SACA,OAAA;EAAA,SACA,WAAA,EAAa,GAAA;EAAA,SACb,SAAA;EAAA,SACA,SAAA;EAAA,SACA,OAAA,EAAS,OAAA;AAAA;AAAA,iBAGJ,2BAAA,CAAA,GAA+B,oBAAA"}
@@ -0,0 +1,18 @@
1
+ import { readInterfereEnv } from "../env.mjs";
2
+ import { API_PATHS } from "@interfere/constants/api";
3
+ import { inferRuntime } from "@interfere/types/sdk/runtime";
4
+ //#region src/internal/server/runtime.ts
5
+ function resolveServerCaptureRuntime() {
6
+ const env = readInterfereEnv();
7
+ if (env.release.sourceId === null) throw new Error("[interfere] Missing NEXT_PUBLIC_INTERFERE_BUILD_ID at runtime. Ensure withInterfere() wraps your Next.js config.");
8
+ return {
9
+ apiKey: env.apiKey,
10
+ ingestUrl: `${env.apiUrl}${API_PATHS.INGEST}`,
11
+ environment: env.nodeEnvironment,
12
+ runtime: inferRuntime({ nextRuntime: process.env.NEXT_RUNTIME }),
13
+ buildId: env.release.sourceId,
14
+ releaseId: env.release.destinationId
15
+ };
16
+ }
17
+ //#endregion
18
+ export { resolveServerCaptureRuntime };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.mjs","names":[],"sources":["../../../src/internal/server/runtime.ts"],"sourcesContent":["import { API_PATHS } from \"@interfere/constants/api\";\nimport type { Env, Runtime } from \"@interfere/types/sdk/runtime\";\nimport { inferRuntime } from \"@interfere/types/sdk/runtime\";\n\nimport { readInterfereEnv } from \"../env.js\";\n\nexport interface ServerCaptureRuntime {\n readonly apiKey: string | null;\n readonly buildId: string;\n readonly environment: Env;\n readonly ingestUrl: string;\n readonly releaseId: string | null;\n readonly runtime: Runtime;\n}\n\nexport function resolveServerCaptureRuntime(): ServerCaptureRuntime {\n const env = readInterfereEnv();\n\n if (env.release.sourceId === null) {\n throw new Error(\n \"[interfere] Missing NEXT_PUBLIC_INTERFERE_BUILD_ID at runtime. \" +\n \"Ensure withInterfere() wraps your Next.js config.\"\n );\n }\n\n return {\n apiKey: env.apiKey,\n ingestUrl: `${env.apiUrl}${API_PATHS.INGEST}`,\n environment: env.nodeEnvironment,\n runtime: inferRuntime({ nextRuntime: process.env.NEXT_RUNTIME }),\n buildId: env.release.sourceId,\n releaseId: env.release.destinationId,\n };\n}\n"],"mappings":";;;;AAeA,SAAgB,8BAAoD;CAClE,MAAM,MAAM,kBAAkB;AAE9B,KAAI,IAAI,QAAQ,aAAa,KAC3B,OAAM,IAAI,MACR,mHAED;AAGH,QAAO;EACL,QAAQ,IAAI;EACZ,WAAW,GAAG,IAAI,SAAS,UAAU;EACrC,aAAa,IAAI;EACjB,SAAS,aAAa,EAAE,aAAa,QAAQ,IAAI,cAAc,CAAC;EAChE,SAAS,IAAI,QAAQ;EACrB,WAAW,IAAI,QAAQ;EACxB"}
@@ -0,0 +1,11 @@
1
+ import { SessionId } from "@interfere/types/data/session";
2
+ import { SessionSource } from "@interfere/types/sdk/envelope";
3
+
4
+ //#region src/internal/server/session.d.ts
5
+ declare const SESSION_HEADER = "x-interfere-session";
6
+ declare function resolveSession(headers: Headers): {
7
+ readonly id: SessionId | null;
8
+ readonly source?: SessionSource;
9
+ };
10
+ //#endregion
11
+ export { SESSION_HEADER, resolveSession };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.mts","names":[],"sources":["../../../src/internal/server/session.ts"],"mappings":";;;;cAIa,cAAA;AAAA,iBAEG,cAAA,CAAe,OAAA,EAAS,OAAA;EAAA,SAC7B,EAAA,EAAI,SAAA;EAAA,SACJ,MAAA,GAAS,aAAA;AAAA"}
@@ -0,0 +1,15 @@
1
+ import { sessionIdSchema } from "@interfere/types/data/session";
2
+ //#region src/internal/server/session.ts
3
+ const SESSION_HEADER = "x-interfere-session";
4
+ function resolveSession(headers) {
5
+ const sessionId = headers.get(SESSION_HEADER);
6
+ if (sessionId === null) return { id: null };
7
+ const parsed = sessionIdSchema.safeParse(sessionId);
8
+ if (!parsed.success) return { id: null };
9
+ return {
10
+ id: parsed.data,
11
+ source: "header"
12
+ };
13
+ }
14
+ //#endregion
15
+ export { SESSION_HEADER, resolveSession };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.mjs","names":[],"sources":["../../../src/internal/server/session.ts"],"sourcesContent":["import type { SessionId } from \"@interfere/types/data/session\";\nimport { sessionIdSchema } from \"@interfere/types/data/session\";\nimport type { SessionSource } from \"@interfere/types/sdk/envelope\";\n\nexport const SESSION_HEADER = \"x-interfere-session\";\n\nexport function resolveSession(headers: Headers): {\n readonly id: SessionId | null;\n readonly source?: SessionSource;\n} {\n const sessionId = headers.get(SESSION_HEADER);\n if (sessionId === null) {\n return { id: null };\n }\n\n const parsed = sessionIdSchema.safeParse(sessionId);\n if (!parsed.success) {\n return { id: null };\n }\n\n return {\n id: parsed.data,\n source: \"header\",\n };\n}\n"],"mappings":";;AAIA,MAAa,iBAAiB;AAE9B,SAAgB,eAAe,SAG7B;CACA,MAAM,YAAY,QAAQ,IAAI,eAAe;AAC7C,KAAI,cAAc,KAChB,QAAO,EAAE,IAAI,MAAM;CAGrB,MAAM,SAAS,gBAAgB,UAAU,UAAU;AACnD,KAAI,CAAC,OAAO,QACV,QAAO,EAAE,IAAI,MAAM;AAGrB,QAAO;EACL,IAAI,OAAO;EACX,QAAQ;EACT"}