@interfere/next 9.0.2 → 10.0.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.
- package/README.md +33 -5
- package/dist/config.d.mts +24 -5
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +38 -28
- package/dist/config.mjs.map +1 -1
- package/dist/instrument-client.d.mts +14 -3
- package/dist/instrument-client.d.mts.map +1 -1
- package/dist/instrument-client.mjs +7 -9
- package/dist/instrument-client.mjs.map +1 -1
- package/dist/instrumentation-client.d.mts +1 -0
- package/dist/instrumentation-client.mjs +22 -0
- package/dist/instrumentation-client.mjs.map +1 -0
- package/dist/instrumentation.d.mts +134 -0
- package/dist/instrumentation.d.mts.map +1 -0
- package/dist/instrumentation.edge.d.mts +35 -0
- package/dist/instrumentation.edge.d.mts.map +1 -0
- package/dist/instrumentation.edge.mjs +34 -0
- package/dist/instrumentation.edge.mjs.map +1 -0
- package/dist/instrumentation.mjs +165 -0
- package/dist/instrumentation.mjs.map +1 -0
- package/dist/internal/build/configure-build.d.mts +1 -2
- package/dist/internal/build/configure-build.d.mts.map +1 -1
- package/dist/internal/build/configure-build.mjs +10 -2
- package/dist/internal/build/configure-build.mjs.map +1 -1
- package/dist/internal/build/detect-bundler.d.mts +6 -0
- package/dist/internal/build/detect-bundler.d.mts.map +1 -0
- package/dist/internal/build/detect-bundler.mjs +9 -0
- package/dist/internal/build/detect-bundler.mjs.map +1 -0
- package/dist/internal/build/pipeline.d.mts +14 -1
- package/dist/internal/build/pipeline.d.mts.map +1 -1
- package/dist/internal/build/pipeline.mjs +26 -10
- package/dist/internal/build/pipeline.mjs.map +1 -1
- package/dist/internal/build/release/destinations/index.d.mts +14 -0
- package/dist/internal/build/release/destinations/index.d.mts.map +1 -0
- package/dist/internal/build/release/destinations/index.mjs +13 -0
- package/dist/internal/build/release/destinations/index.mjs.map +1 -0
- package/dist/internal/build/release/destinations/vercel.mjs.map +1 -1
- package/dist/internal/build/release/git.d.mts +13 -0
- package/dist/internal/build/release/git.d.mts.map +1 -1
- package/dist/internal/build/release/git.mjs +13 -2
- package/dist/internal/build/release/git.mjs.map +1 -1
- package/dist/internal/build/release/index.d.mts +2 -1
- package/dist/internal/build/release/index.d.mts.map +1 -1
- package/dist/internal/build/release/index.mjs +4 -5
- package/dist/internal/build/release/index.mjs.map +1 -1
- package/dist/internal/build/release/sources/github.mjs.map +1 -1
- package/dist/internal/build/release/sources/index.d.mts +21 -0
- package/dist/internal/build/release/sources/index.d.mts.map +1 -0
- package/dist/internal/build/release/sources/index.mjs +20 -0
- package/dist/internal/build/release/sources/index.mjs.map +1 -0
- package/dist/internal/build/source-maps/discover-turbopack.d.mts +32 -0
- package/dist/internal/build/source-maps/discover-turbopack.d.mts.map +1 -0
- package/dist/internal/build/source-maps/discover-turbopack.mjs +68 -0
- package/dist/internal/build/source-maps/discover-turbopack.mjs.map +1 -0
- package/dist/internal/build/source-maps/discover-webpack.d.mts +53 -0
- package/dist/internal/build/source-maps/discover-webpack.d.mts.map +1 -0
- package/dist/internal/build/source-maps/discover-webpack.mjs +112 -0
- package/dist/internal/build/source-maps/discover-webpack.mjs.map +1 -0
- package/dist/internal/build/source-maps/discover.d.mts +28 -10
- package/dist/internal/build/source-maps/discover.d.mts.map +1 -1
- package/dist/internal/build/source-maps/discover.mjs +22 -83
- package/dist/internal/build/source-maps/discover.mjs.map +1 -1
- package/dist/internal/build/source-maps/index.d.mts +2 -24
- package/dist/internal/build/source-maps/index.d.mts.map +1 -1
- package/dist/internal/build/source-maps/index.mjs +13 -23
- package/dist/internal/build/source-maps/index.mjs.map +1 -1
- package/dist/internal/build/source-maps/paths.d.mts +28 -0
- package/dist/internal/build/source-maps/paths.d.mts.map +1 -0
- package/dist/internal/build/source-maps/paths.mjs +49 -0
- package/dist/internal/build/source-maps/paths.mjs.map +1 -0
- package/dist/internal/build/source-maps/upload.d.mts +46 -0
- package/dist/internal/build/source-maps/upload.d.mts.map +1 -0
- package/dist/internal/build/source-maps/upload.mjs +134 -0
- package/dist/internal/build/source-maps/upload.mjs.map +1 -0
- package/dist/internal/build/value-injection-loader.mjs.map +1 -1
- package/dist/internal/env.d.mts +11 -2
- package/dist/internal/env.d.mts.map +1 -1
- package/dist/internal/env.mjs +12 -3
- package/dist/internal/env.mjs.map +1 -1
- package/dist/internal/logger.d.mts +9 -1
- package/dist/internal/logger.d.mts.map +1 -1
- package/dist/internal/logger.mjs +10 -2
- package/dist/internal/logger.mjs.map +1 -1
- package/dist/internal/release-slug.d.mts +25 -0
- package/dist/internal/release-slug.d.mts.map +1 -0
- package/dist/internal/release-slug.mjs +32 -0
- package/dist/internal/release-slug.mjs.map +1 -0
- package/dist/internal/route/handle-get.d.mts +14 -1
- package/dist/internal/route/handle-get.d.mts.map +1 -1
- package/dist/internal/route/handle-get.mjs +35 -14
- package/dist/internal/route/handle-get.mjs.map +1 -1
- package/dist/internal/route/handle-post.d.mts +11 -0
- package/dist/internal/route/handle-post.d.mts.map +1 -1
- package/dist/internal/route/handle-post.mjs +11 -50
- package/dist/internal/route/handle-post.mjs.map +1 -1
- package/dist/internal/route/proxy.d.mts +21 -1
- package/dist/internal/route/proxy.d.mts.map +1 -1
- package/dist/internal/route/proxy.mjs +61 -16
- package/dist/internal/route/proxy.mjs.map +1 -1
- package/dist/internal/server/capture.d.mts +2 -2
- package/dist/internal/server/capture.d.mts.map +1 -1
- package/dist/internal/server/capture.mjs +71 -37
- package/dist/internal/server/capture.mjs.map +1 -1
- package/dist/internal/server/console-bridge.d.mts +19 -0
- package/dist/internal/server/console-bridge.d.mts.map +1 -0
- package/dist/internal/server/console-bridge.mjs +112 -0
- package/dist/internal/server/console-bridge.mjs.map +1 -0
- package/dist/internal/server/id-generator.d.mts +38 -0
- package/dist/internal/server/id-generator.d.mts.map +1 -0
- package/dist/internal/server/id-generator.mjs +68 -0
- package/dist/internal/server/id-generator.mjs.map +1 -0
- package/dist/internal/server/instrumentation-options.d.mts +86 -0
- package/dist/internal/server/instrumentation-options.d.mts.map +1 -0
- package/dist/internal/server/instrumentation-options.mjs +1 -0
- package/dist/internal/server/remote-config.mjs +2 -2
- package/dist/internal/server/remote-config.mjs.map +1 -1
- package/dist/internal/server/trace-meta.d.mts +34 -0
- package/dist/internal/server/trace-meta.d.mts.map +1 -0
- package/dist/internal/server/trace-meta.mjs +41 -0
- package/dist/internal/server/trace-meta.mjs.map +1 -0
- package/dist/internal/server/traceparent.d.mts +16 -0
- package/dist/internal/server/traceparent.d.mts.map +1 -0
- package/dist/internal/server/traceparent.mjs +26 -0
- package/dist/internal/server/traceparent.mjs.map +1 -0
- package/dist/internal/server/types.d.mts +1 -7
- package/dist/internal/server/types.d.mts.map +1 -1
- package/dist/internal/setup-warnings.d.mts +17 -0
- package/dist/internal/setup-warnings.d.mts.map +1 -0
- package/dist/internal/setup-warnings.mjs +45 -0
- package/dist/internal/setup-warnings.mjs.map +1 -0
- package/dist/package.mjs +1 -1
- package/dist/provider.d.mts +23 -2
- package/dist/provider.d.mts.map +1 -0
- package/dist/provider.mjs +23 -1
- package/dist/provider.mjs.map +1 -0
- package/dist/route-handler.d.mts +7 -2
- package/dist/route-handler.d.mts.map +1 -1
- package/dist/route-handler.mjs +11 -9
- package/dist/route-handler.mjs.map +1 -1
- package/dist/server.d.mts +2 -2
- package/dist/server.mjs +2 -2
- package/package.json +73 -20
- package/dist/internal/route/sw-script.d.mts +0 -4
- package/dist/internal/route/sw-script.d.mts.map +0 -1
- package/dist/internal/route/sw-script.mjs +0 -38
- package/dist/internal/route/sw-script.mjs.map +0 -1
- package/dist/internal/server/dedupe.d.mts +0 -5
- package/dist/internal/server/dedupe.d.mts.map +0 -1
- package/dist/internal/server/dedupe.mjs +0 -11
- package/dist/internal/server/dedupe.mjs.map +0 -1
- package/dist/internal/server/envelope.d.mts +0 -14
- package/dist/internal/server/envelope.d.mts.map +0 -1
- package/dist/internal/server/envelope.mjs +0 -59
- package/dist/internal/server/envelope.mjs.map +0 -1
- package/dist/internal/server/normalize-request.d.mts +0 -7
- package/dist/internal/server/normalize-request.d.mts.map +0 -1
- package/dist/internal/server/normalize-request.mjs +0 -50
- package/dist/internal/server/normalize-request.mjs.map +0 -1
- package/dist/internal/server/runtime.d.mts +0 -14
- package/dist/internal/server/runtime.d.mts.map +0 -1
- package/dist/internal/server/runtime.mjs +0 -18
- package/dist/internal/server/runtime.mjs.map +0 -1
- package/dist/internal/server/transport.d.mts +0 -12
- package/dist/internal/server/transport.d.mts.map +0 -1
- package/dist/internal/server/transport.mjs +0 -26
- package/dist/internal/server/transport.mjs.map +0 -1
|
@@ -0,0 +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"}
|
package/dist/provider.mjs
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
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
|
|
3
25
|
export { InterfereProvider, useInterfere, useSession };
|
|
@@ -0,0 +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"}
|
package/dist/route-handler.d.mts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
//#region src/route-handler.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Customers consume this module via `export * from "@interfere/next/route-handler"`
|
|
4
|
+
* so any HTTP method we add later (PATCH, DELETE, …) is picked up
|
|
5
|
+
* without a customer file change. Do NOT add non-method exports here —
|
|
6
|
+
* `route-handler.lint.test.ts` will fail the build if you do.
|
|
7
|
+
*/
|
|
2
8
|
declare function GET(request: Request): Promise<Response>;
|
|
3
9
|
declare function POST(request: Request): Promise<Response>;
|
|
4
|
-
declare function PUT(request: Request): Promise<Response>;
|
|
5
10
|
declare function OPTIONS(): Response;
|
|
6
11
|
//#endregion
|
|
7
|
-
export { GET, OPTIONS, POST
|
|
12
|
+
export { GET, OPTIONS, POST };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-handler.d.mts","names":[],"sources":["../src/route-handler.ts"],"mappings":"
|
|
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"}
|
package/dist/route-handler.mjs
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isEnabledOnServer } from "./internal/env.mjs";
|
|
2
2
|
import { handleGet } from "./internal/route/handle-get.mjs";
|
|
3
3
|
import { handlePost } from "./internal/route/handle-post.mjs";
|
|
4
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
|
+
*/
|
|
5
11
|
const DISABLED = () => new Response(null, { status: 204 });
|
|
6
12
|
async function GET(request) {
|
|
7
|
-
if (!
|
|
13
|
+
if (!isEnabledOnServer()) return DISABLED();
|
|
8
14
|
return await handleGet(request);
|
|
9
15
|
}
|
|
10
16
|
function POST(request) {
|
|
11
|
-
if (!
|
|
12
|
-
return handlePost(request);
|
|
13
|
-
}
|
|
14
|
-
function PUT(request) {
|
|
15
|
-
if (!isEnabledInEnvironment()) return Promise.resolve(DISABLED());
|
|
17
|
+
if (!isEnabledOnServer()) return Promise.resolve(DISABLED());
|
|
16
18
|
return handlePost(request);
|
|
17
19
|
}
|
|
18
20
|
const CORS_HEADERS = {
|
|
19
21
|
"Access-Control-Allow-Origin": "*",
|
|
20
|
-
"Access-Control-Allow-Methods": "GET, POST,
|
|
22
|
+
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
|
|
21
23
|
"Access-Control-Allow-Headers": "Content-Type",
|
|
22
24
|
"Access-Control-Max-Age": "86400"
|
|
23
25
|
};
|
|
@@ -28,4 +30,4 @@ function OPTIONS() {
|
|
|
28
30
|
});
|
|
29
31
|
}
|
|
30
32
|
//#endregion
|
|
31
|
-
export { GET, OPTIONS, POST
|
|
33
|
+
export { GET, OPTIONS, POST };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-handler.mjs","names":[],"sources":["../src/route-handler.ts"],"sourcesContent":["
|
|
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"}
|
package/dist/server.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { CaptureErrorContext, OnRequestErrorContext } from "./internal/server/types.mjs";
|
|
2
2
|
import { captureError, onRequestError } from "./internal/server/capture.mjs";
|
|
3
|
-
import {
|
|
4
|
-
export { type CaptureErrorContext, type OnRequestErrorContext, captureError, onRequestError
|
|
3
|
+
import { TraceMeta } from "./internal/server/trace-meta.mjs";
|
|
4
|
+
export { type CaptureErrorContext, type OnRequestErrorContext, TraceMeta, captureError, onRequestError };
|
package/dist/server.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { fetchAndCacheRemoteConfig } from "./internal/server/remote-config.mjs";
|
|
2
1
|
import { captureError, onRequestError } from "./internal/server/capture.mjs";
|
|
3
|
-
|
|
2
|
+
import { TraceMeta } from "./internal/server/trace-meta.mjs";
|
|
3
|
+
export { TraceMeta, captureError, onRequestError };
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interfere/next",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Build software that never breaks.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"observability",
|
|
8
|
-
"typescript",
|
|
8
|
+
"@typescript/native-preview",
|
|
9
9
|
"react",
|
|
10
10
|
"nextjs",
|
|
11
11
|
"error-tracking"
|
|
@@ -35,6 +35,43 @@
|
|
|
35
35
|
"types": "./dist/instrument-client.d.mts",
|
|
36
36
|
"default": "./dist/instrument-client.mjs"
|
|
37
37
|
},
|
|
38
|
+
"./instrumentation": {
|
|
39
|
+
"edge-light": {
|
|
40
|
+
"@source": "./src/instrumentation.edge.ts",
|
|
41
|
+
"types": "./dist/instrumentation.edge.d.mts",
|
|
42
|
+
"default": "./dist/instrumentation.edge.mjs"
|
|
43
|
+
},
|
|
44
|
+
"workerd": {
|
|
45
|
+
"@source": "./src/instrumentation.edge.ts",
|
|
46
|
+
"types": "./dist/instrumentation.edge.d.mts",
|
|
47
|
+
"default": "./dist/instrumentation.edge.mjs"
|
|
48
|
+
},
|
|
49
|
+
"worker": {
|
|
50
|
+
"@source": "./src/instrumentation.edge.ts",
|
|
51
|
+
"types": "./dist/instrumentation.edge.d.mts",
|
|
52
|
+
"default": "./dist/instrumentation.edge.mjs"
|
|
53
|
+
},
|
|
54
|
+
"node": {
|
|
55
|
+
"@source": "./src/instrumentation.ts",
|
|
56
|
+
"types": "./dist/instrumentation.d.mts",
|
|
57
|
+
"default": "./dist/instrumentation.mjs"
|
|
58
|
+
},
|
|
59
|
+
"import": {
|
|
60
|
+
"@source": "./src/instrumentation.ts",
|
|
61
|
+
"types": "./dist/instrumentation.d.mts",
|
|
62
|
+
"default": "./dist/instrumentation.mjs"
|
|
63
|
+
},
|
|
64
|
+
"default": {
|
|
65
|
+
"@source": "./src/instrumentation.edge.ts",
|
|
66
|
+
"types": "./dist/instrumentation.edge.d.mts",
|
|
67
|
+
"default": "./dist/instrumentation.edge.mjs"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"./instrumentation-client": {
|
|
71
|
+
"@source": "./src/instrumentation-client.ts",
|
|
72
|
+
"types": "./dist/instrumentation-client.d.mts",
|
|
73
|
+
"default": "./dist/instrumentation-client.mjs"
|
|
74
|
+
},
|
|
38
75
|
"./provider": {
|
|
39
76
|
"@source": "./src/provider.tsx",
|
|
40
77
|
"types": "./dist/provider.d.mts",
|
|
@@ -53,26 +90,42 @@
|
|
|
53
90
|
},
|
|
54
91
|
"sideEffects": false,
|
|
55
92
|
"publishConfig": {
|
|
56
|
-
"access": "public"
|
|
93
|
+
"access": "public",
|
|
94
|
+
"tag": "canary"
|
|
57
95
|
},
|
|
58
96
|
"scripts": {
|
|
59
97
|
"build": "tsdown",
|
|
60
|
-
"test": "vitest run
|
|
61
|
-
"typecheck": "
|
|
98
|
+
"test": "vitest run",
|
|
99
|
+
"typecheck": "tsgo --noEmit --incremental"
|
|
62
100
|
},
|
|
63
101
|
"dependencies": {
|
|
64
|
-
"@interfere/constants": "^9.0.
|
|
102
|
+
"@interfere/constants": "^9.0.1",
|
|
65
103
|
"@interfere/helpers": "^9.0.0",
|
|
66
|
-
"@interfere/react": "^
|
|
67
|
-
"@interfere/sdk": "^9.0.
|
|
104
|
+
"@interfere/react": "^10.0.0",
|
|
105
|
+
"@interfere/sdk": "^9.0.3",
|
|
68
106
|
"@interfere/types": "^9.0.0",
|
|
107
|
+
"@opentelemetry/api": "^1.9.1",
|
|
108
|
+
"@opentelemetry/api-logs": "^0.217.0",
|
|
109
|
+
"@opentelemetry/baggage-span-processor": "^0.5.0",
|
|
110
|
+
"@opentelemetry/context-async-hooks": "^2.7.1",
|
|
111
|
+
"@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",
|
|
117
|
+
"@opentelemetry/resources": "^2.7.0",
|
|
118
|
+
"@opentelemetry/sdk-logs": "^0.217.0",
|
|
119
|
+
"@opentelemetry/sdk-metrics": "^2.7.0",
|
|
120
|
+
"@opentelemetry/sdk-trace-base": "^2.7.0",
|
|
121
|
+
"@opentelemetry/sdk-trace-node": "^2.7.1",
|
|
69
122
|
"chalk": "^5.6.2",
|
|
70
123
|
"uuid": "^14.0.0"
|
|
71
124
|
},
|
|
72
125
|
"peerDependencies": {
|
|
73
|
-
"next": "^16.
|
|
74
|
-
"react": "^19.
|
|
75
|
-
"react-dom": "^19.
|
|
126
|
+
"next": "^16.2.4",
|
|
127
|
+
"react": "^19.2.6",
|
|
128
|
+
"react-dom": "^19.2.6"
|
|
76
129
|
},
|
|
77
130
|
"peerDependenciesMeta": {
|
|
78
131
|
"next": {
|
|
@@ -91,16 +144,16 @@
|
|
|
91
144
|
"@types/node": "^24.12.0",
|
|
92
145
|
"@types/react": "19.2.14",
|
|
93
146
|
"@types/react-dom": "19.2.3",
|
|
94
|
-
"@
|
|
95
|
-
"@vitest/browser
|
|
96
|
-
"@vitest/
|
|
147
|
+
"@typescript/native-preview": "7.0.0-dev.20260512.1",
|
|
148
|
+
"@vitest/browser": "4.1.6",
|
|
149
|
+
"@vitest/browser-playwright": "4.1.6",
|
|
150
|
+
"@vitest/coverage-v8": "^4.1.6",
|
|
97
151
|
"next": "^16.2.4",
|
|
98
|
-
"playwright": "^1.
|
|
99
|
-
"react": "^19.2.
|
|
100
|
-
"react-dom": "^19.2.
|
|
101
|
-
"tsdown": "^0.
|
|
102
|
-
"
|
|
103
|
-
"vitest": "^4.1.5",
|
|
152
|
+
"playwright": "^1.60.0",
|
|
153
|
+
"react": "^19.2.6",
|
|
154
|
+
"react-dom": "^19.2.6",
|
|
155
|
+
"tsdown": "^0.22.0",
|
|
156
|
+
"vitest": "^4.1.6",
|
|
104
157
|
"vitest-browser-react": "2.2.0",
|
|
105
158
|
"webpack": "^5.106.2"
|
|
106
159
|
}
|
|
@@ -1,4 +0,0 @@
|
|
|
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\nself.addEventListener('unhandledrejection', function(event) {\n if (event.reason && event.reason.name === 'no-response') {\n event.preventDefault();\n }\n});\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 === 429 || 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 };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sw-script.d.mts","names":[],"sources":["../../../src/internal/route/sw-script.ts"],"mappings":";cAAa,SAAA"}
|
|
@@ -1,38 +0,0 @@
|
|
|
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
|
-
self.addEventListener('unhandledrejection', function(event) {
|
|
9
|
-
if (event.reason && event.reason.name === 'no-response') {
|
|
10
|
-
event.preventDefault();
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
workbox.setConfig({ debug: false });
|
|
15
|
-
|
|
16
|
-
workbox.routing.registerRoute(
|
|
17
|
-
function(ctx) {
|
|
18
|
-
return ctx.request.method === 'POST' && ctx.url.pathname.startsWith('/api/interfere/');
|
|
19
|
-
},
|
|
20
|
-
new workbox.strategies.NetworkOnly({
|
|
21
|
-
plugins: [
|
|
22
|
-
new workbox.backgroundSync.BackgroundSyncPlugin('interfere-queue', {
|
|
23
|
-
maxRetentionTime: 1440,
|
|
24
|
-
}),
|
|
25
|
-
{
|
|
26
|
-
fetchDidSucceed: function(ctx) {
|
|
27
|
-
if (ctx.response.status === 429 || ctx.response.status >= 500) {
|
|
28
|
-
throw new Error(ctx.request.url + ' returned ' + ctx.response.status);
|
|
29
|
-
}
|
|
30
|
-
return ctx.response;
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
],
|
|
34
|
-
}),
|
|
35
|
-
'POST'
|
|
36
|
-
);`;
|
|
37
|
-
//#endregion
|
|
38
|
-
export { SW_SCRIPT };
|
|
@@ -1 +0,0 @@
|
|
|
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\nself.addEventListener('unhandledrejection', function(event) {\n if (event.reason && event.reason.name === 'no-response') {\n event.preventDefault();\n }\n});\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 === 429 || 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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dedupe.d.mts","names":[],"sources":["../../../src/internal/server/dedupe.ts"],"mappings":";iBAEgB,eAAA,CAAgB,KAAA;AAAA,iBAIhB,iBAAA,CAAkB,KAAA"}
|
|
@@ -1,11 +0,0 @@
|
|
|
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 };
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
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 | undefined;
|
|
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 };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.d.mts","names":[],"sources":["../../../src/internal/server/envelope.ts"],"mappings":";;;;;UAyBU,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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { PRODUCER_VERSION as PRODUCER_VERSION$1 } from "../version.mjs";
|
|
2
|
-
import { MECHANISM_TYPE, toError, toExceptions } from "@interfere/types/sdk/errors";
|
|
3
|
-
import { PRODUCER_VERSION } from "@interfere/react/internal/version";
|
|
4
|
-
import { sessionIdSchema } from "@interfere/types/data/session";
|
|
5
|
-
import { v7 } from "uuid";
|
|
6
|
-
//#region src/internal/server/envelope.ts
|
|
7
|
-
const SESSION_HEADER = "x-interfere-session";
|
|
8
|
-
const DEFAULT_ERROR_MECHANISM = {
|
|
9
|
-
type: MECHANISM_TYPE.nextjs.captureError,
|
|
10
|
-
handled: true
|
|
11
|
-
};
|
|
12
|
-
function buildErrorEnvelope(params) {
|
|
13
|
-
const { error, request, context, runtime } = params;
|
|
14
|
-
const session = resolveSession(request?.headers ?? new Headers());
|
|
15
|
-
let nextjsContext;
|
|
16
|
-
if (context?.nextjs) nextjsContext = toNextjsContext(context.nextjs);
|
|
17
|
-
else if (request) nextjsContext = toNextjsRequestContext(request);
|
|
18
|
-
return {
|
|
19
|
-
uuid: v7(),
|
|
20
|
-
v: 0,
|
|
21
|
-
type: "error",
|
|
22
|
-
payload: { exceptions: toExceptions(toError(error), context?.mechanism ?? DEFAULT_ERROR_MECHANISM) },
|
|
23
|
-
clientTs: Date.now(),
|
|
24
|
-
runtime: runtime.runtime,
|
|
25
|
-
environment: runtime.environment,
|
|
26
|
-
buildId: runtime.buildId,
|
|
27
|
-
releaseId: runtime.releaseId,
|
|
28
|
-
producerVersion: PRODUCER_VERSION$1,
|
|
29
|
-
sdkStack: [PRODUCER_VERSION$1, PRODUCER_VERSION],
|
|
30
|
-
sessionId: session.id,
|
|
31
|
-
...session.source ? { sessionSource: session.source } : {},
|
|
32
|
-
...nextjsContext ? { context: nextjsContext } : {}
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function toNextjsRequestContext(request) {
|
|
36
|
-
return {
|
|
37
|
-
runtime: "nextjs",
|
|
38
|
-
requestMethod: request.method,
|
|
39
|
-
requestPath: request.path
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function toNextjsContext(context) {
|
|
43
|
-
return {
|
|
44
|
-
runtime: "nextjs",
|
|
45
|
-
...context
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function resolveSession(headers) {
|
|
49
|
-
const sessionId = headers.get(SESSION_HEADER);
|
|
50
|
-
if (sessionId === null) return { id: null };
|
|
51
|
-
const parsed = sessionIdSchema.safeParse(sessionId);
|
|
52
|
-
if (!parsed.success) return { id: null };
|
|
53
|
-
return {
|
|
54
|
-
id: parsed.data,
|
|
55
|
-
source: "header"
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
//#endregion
|
|
59
|
-
export { buildErrorEnvelope };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.mjs","names":["uuidv7","PRODUCER_VERSION","REACT_VERSION"],"sources":["../../../src/internal/server/envelope.ts"],"sourcesContent":["import { PRODUCER_VERSION as REACT_VERSION } from \"@interfere/react/internal/version\";\nimport type { SessionId } from \"@interfere/types/data/session\";\nimport { sessionIdSchema } from \"@interfere/types/data/session\";\nimport type { Envelope, SessionSource } from \"@interfere/types/sdk/envelope\";\nimport {\n MECHANISM_TYPE,\n toError,\n toExceptions,\n} from \"@interfere/types/sdk/errors\";\nimport type { NextjsContext } from \"@interfere/types/sdk/plugins/context/next\";\nimport type { ErrorMechanism } from \"@interfere/types/sdk/plugins/payload/errors\";\n\nimport { v7 as uuidv7 } from \"uuid\";\n\nimport { PRODUCER_VERSION } from \"../version.js\";\nimport type { ServerCaptureRuntime } from \"./runtime.js\";\nimport type { CaptureErrorContext, NormalizedRequest } from \"./types.js\";\n\nconst SESSION_HEADER = \"x-interfere-session\";\n\nconst DEFAULT_ERROR_MECHANISM: ErrorMechanism = {\n type: MECHANISM_TYPE.nextjs.captureError,\n handled: true,\n};\n\ninterface BuildErrorEnvelopeParams {\n readonly context?: CaptureErrorContext | undefined;\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 producerVersion: PRODUCER_VERSION,\n sdkStack: [PRODUCER_VERSION, REACT_VERSION],\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\nfunction 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":";;;;;;AAkBA,MAAM,iBAAiB;AAEvB,MAAM,0BAA0C;CAC9C,MAAM,eAAe,OAAO;CAC5B,SAAS;CACV;AASD,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,iBAAiBC;EACjB,UAAU,CAACA,oBAAkBC,iBAAc;EAC3C,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;;AAGH,SAAS,eAAe,SAGtB;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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
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 };
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
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 };
|
|
@@ -1 +0,0 @@
|
|
|
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,SAAO,IADY,IAAI,OAAO,mBACjB,CAAC,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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
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 };
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
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: env.nextRuntime }),
|
|
13
|
-
buildId: env.release.sourceId,
|
|
14
|
-
releaseId: env.release.destinationId
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
//#endregion
|
|
18
|
-
export { resolveServerCaptureRuntime };
|
|
@@ -1 +0,0 @@
|
|
|
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: env.nextRuntime }),\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,IAAI,aAAa,CAAC;EACvD,SAAS,IAAI,QAAQ;EACrB,WAAW,IAAI,QAAQ;EACxB"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ServerCaptureRuntime } from "./runtime.mjs";
|
|
2
|
-
import { Envelope } from "@interfere/types/sdk/envelope";
|
|
3
|
-
|
|
4
|
-
//#region src/internal/server/transport.d.ts
|
|
5
|
-
interface SendEnvelopeInput {
|
|
6
|
-
readonly envelope: Envelope<"error">;
|
|
7
|
-
readonly runtime: ServerCaptureRuntime;
|
|
8
|
-
readonly traceparent?: string | undefined;
|
|
9
|
-
}
|
|
10
|
-
declare function sendEnvelope(input: SendEnvelopeInput): Promise<void>;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { SendEnvelopeInput, sendEnvelope };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.mts","names":[],"sources":["../../../src/internal/server/transport.ts"],"mappings":";;;;UAIiB,iBAAA;EAAA,SACN,QAAA,EAAU,QAAA;EAAA,SACV,OAAA,EAAS,oBAAA;EAAA,SACT,WAAA;AAAA;AAAA,iBAMW,YAAA,CAAa,KAAA,EAAO,iBAAA,GAAoB,OAAA"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
//#region src/internal/server/transport.ts
|
|
2
|
-
const LOG_DEDUPE_WINDOW_MS = 6e4;
|
|
3
|
-
let last5xxLogAt = 0;
|
|
4
|
-
async function sendEnvelope(input) {
|
|
5
|
-
const { envelope, runtime, traceparent } = input;
|
|
6
|
-
if (runtime.apiKey === null) return;
|
|
7
|
-
const response = await fetch(runtime.ingestUrl, {
|
|
8
|
-
method: "POST",
|
|
9
|
-
headers: {
|
|
10
|
-
"content-type": "application/json",
|
|
11
|
-
"x-api-key": runtime.apiKey,
|
|
12
|
-
...traceparent ? { traceparent } : {}
|
|
13
|
-
},
|
|
14
|
-
body: JSON.stringify([envelope]),
|
|
15
|
-
keepalive: true
|
|
16
|
-
});
|
|
17
|
-
if (response.ok) return;
|
|
18
|
-
if (response.status >= 400 && response.status < 500) return;
|
|
19
|
-
const now = Date.now();
|
|
20
|
-
if (now - last5xxLogAt > LOG_DEDUPE_WINDOW_MS) {
|
|
21
|
-
last5xxLogAt = now;
|
|
22
|
-
console.warn(`[interfere] collector returned ${response.status}; server-side events for this process may be dropped until recovery.`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//#endregion
|
|
26
|
-
export { sendEnvelope };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.mjs","names":[],"sources":["../../../src/internal/server/transport.ts"],"sourcesContent":["import type { Envelope } from \"@interfere/types/sdk/envelope\";\n\nimport type { ServerCaptureRuntime } from \"./runtime.js\";\n\nexport interface SendEnvelopeInput {\n readonly envelope: Envelope<\"error\">;\n readonly runtime: ServerCaptureRuntime;\n readonly traceparent?: string | undefined;\n}\n\nconst LOG_DEDUPE_WINDOW_MS = 60_000;\nlet last5xxLogAt = 0;\n\nexport async function sendEnvelope(input: SendEnvelopeInput): Promise<void> {\n const { envelope, runtime, traceparent } = input;\n\n if (runtime.apiKey === null) {\n return;\n }\n\n const response = await fetch(runtime.ingestUrl, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"x-api-key\": runtime.apiKey,\n ...(traceparent ? { traceparent } : {}),\n },\n body: JSON.stringify([envelope]),\n keepalive: true,\n });\n\n if (response.ok) {\n return;\n }\n\n if (response.status >= 400 && response.status < 500) {\n return;\n }\n\n // 5xx: log once per window so a collector outage doesn't spam logs.\n const now = Date.now();\n if (now - last5xxLogAt > LOG_DEDUPE_WINDOW_MS) {\n last5xxLogAt = now;\n console.warn(\n `[interfere] collector returned ${response.status}; server-side events for this process may be dropped until recovery.`\n );\n }\n}\n"],"mappings":";AAUA,MAAM,uBAAuB;AAC7B,IAAI,eAAe;AAEnB,eAAsB,aAAa,OAAyC;CAC1E,MAAM,EAAE,UAAU,SAAS,gBAAgB;AAE3C,KAAI,QAAQ,WAAW,KACrB;CAGF,MAAM,WAAW,MAAM,MAAM,QAAQ,WAAW;EAC9C,QAAQ;EACR,SAAS;GACP,gBAAgB;GAChB,aAAa,QAAQ;GACrB,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;GACvC;EACD,MAAM,KAAK,UAAU,CAAC,SAAS,CAAC;EAChC,WAAW;EACZ,CAAC;AAEF,KAAI,SAAS,GACX;AAGF,KAAI,SAAS,UAAU,OAAO,SAAS,SAAS,IAC9C;CAIF,MAAM,MAAM,KAAK,KAAK;AACtB,KAAI,MAAM,eAAe,sBAAsB;AAC7C,iBAAe;AACf,UAAQ,KACN,kCAAkC,SAAS,OAAO,sEACnD"}
|