@interfere/node 0.0.1-canary.5 → 0.1.0-canary.7

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.
@@ -30,5 +30,4 @@ declare function captureMessage(message: string, request?: unknown, errorContext
30
30
  */
31
31
  declare function withSpan<T>(name: string, fn: () => Promise<T> | T): Promise<T>;
32
32
  //#endregion
33
- export { type CaptureErrorContext, captureError, captureMessage, withSpan };
34
- //# sourceMappingURL=capture.d.cts.map
33
+ export { type CaptureErrorContext, captureError, captureMessage, withSpan };
@@ -30,5 +30,4 @@ declare function captureMessage(message: string, request?: unknown, errorContext
30
30
  */
31
31
  declare function withSpan<T>(name: string, fn: () => Promise<T> | T): Promise<T>;
32
32
  //#endregion
33
- export { type CaptureErrorContext, captureError, captureMessage, withSpan };
34
- //# sourceMappingURL=capture.d.mts.map
33
+ export { type CaptureErrorContext, captureError, captureMessage, withSpan };
package/dist/capture.mjs CHANGED
@@ -1,2 +1 @@
1
- import{isErrorCaptured,markErrorCaptured}from"./internal/dedupe.mjs";import{isEnabledInEnvironment}from"./internal/env.mjs";import{normalizeRequest}from"./internal/normalize-request.mjs";import{MECHANISM_TYPE,toError}from"@interfere/types/sdk/errors";import{SpanKind,SpanStatusCode,context,trace}from"@opentelemetry/api";const TRACER_NAME=`@interfere/node`,DEFAULT_ERROR_MECHANISM={type:MECHANISM_TYPE.node.captureError,handled:!0};function captureError(error,request,errorContext){if(!isEnabledInEnvironment()||isErrorCaptured(error))return;markErrorCaptured(error);let err=toError(error),normalizedRequest=normalizeRequest(request),mechanism=errorContext?.mechanism??DEFAULT_ERROR_MECHANISM,span=trace.getTracer(TRACER_NAME).startSpan(`interfere.error.captured`,{kind:SpanKind.INTERNAL},context.active()),requestMethod=errorContext?.node?.requestMethod??normalizedRequest?.method??null;requestMethod&&span.setAttribute(`http.request.method`,requestMethod);let requestPath=errorContext?.node?.requestPath??normalizedRequest?.path??null;requestPath&&span.setAttribute(`url.path`,requestPath);let sessionId=normalizedRequest?.headers.get(`x-interfere-session`);sessionId&&span.setAttribute(`interfere.session.id`,sessionId);let eventAttrs={"exception.type":err.name,"exception.message":err.message,"interfere.exception.mechanism":mechanism.type,"interfere.exception.handled":mechanism.handled};err.stack&&(eventAttrs[`exception.stacktrace`]=err.stack);let digest=errorContext?.node?.errorDigest;digest&&(eventAttrs[`interfere.error.digest`]=digest),span.addEvent(`exception`,eventAttrs),span.setStatus({code:SpanStatusCode.ERROR}),span.end()}function captureMessage(message,request,errorContext){captureError(Error(message),request,errorContext)}async function withSpan(name,fn){let span=trace.getTracer(TRACER_NAME).startSpan(name);try{return await context.with(trace.setSpan(context.active(),span),fn)}catch(error){throw span.recordException(error),span.setStatus({code:SpanStatusCode.ERROR}),error}finally{span.end()}}export{captureError,captureMessage,withSpan};
2
- //# sourceMappingURL=capture.mjs.map
1
+ import{isErrorCaptured,markErrorCaptured}from"./internal/dedupe.mjs";import{isEnabledInEnvironment}from"./internal/env.mjs";import{normalizeRequest}from"./internal/normalize-request.mjs";import{MECHANISM_TYPE,toError}from"@interfere/types/sdk/errors";import{SpanKind,SpanStatusCode,context,trace}from"@opentelemetry/api";const TRACER_NAME=`@interfere/node`,DEFAULT_ERROR_MECHANISM={type:MECHANISM_TYPE.node.captureError,handled:!0};function captureError(error,request,errorContext){if(!isEnabledInEnvironment()||isErrorCaptured(error))return;markErrorCaptured(error);let err=toError(error),normalizedRequest=normalizeRequest(request),mechanism=errorContext?.mechanism??DEFAULT_ERROR_MECHANISM,span=trace.getTracer(TRACER_NAME).startSpan(`interfere.error.captured`,{kind:SpanKind.INTERNAL},context.active()),requestMethod=errorContext?.node?.requestMethod??normalizedRequest?.method??null;requestMethod&&span.setAttribute(`http.request.method`,requestMethod);let requestPath=errorContext?.node?.requestPath??normalizedRequest?.path??null;requestPath&&span.setAttribute(`url.path`,requestPath);let sessionId=normalizedRequest?.headers.get(`x-interfere-session`);sessionId&&span.setAttribute(`interfere.session.id`,sessionId);let eventAttrs={"exception.type":err.name,"exception.message":err.message,"interfere.exception.mechanism":mechanism.type,"interfere.exception.handled":mechanism.handled};err.stack&&(eventAttrs[`exception.stacktrace`]=err.stack);let digest=errorContext?.node?.errorDigest;digest&&(eventAttrs[`interfere.error.digest`]=digest),span.addEvent(`exception`,eventAttrs),span.setStatus({code:SpanStatusCode.ERROR}),span.end()}function captureMessage(message,request,errorContext){captureError(Error(message),request,errorContext)}async function withSpan(name,fn){let span=trace.getTracer(TRACER_NAME).startSpan(name);try{return await context.with(trace.setSpan(context.active(),span),fn)}catch(error){throw span.recordException(error),span.setStatus({code:SpanStatusCode.ERROR}),error}finally{span.end()}}export{captureError,captureMessage,withSpan};
package/dist/init.cjs CHANGED
@@ -1,3 +1,3 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_internal_env=require("./internal/env.cjs"),require_internal_global_handlers=require("./internal/global-handlers.cjs"),require_internal_release_slug=require("./internal/release-slug.cjs"),require_internal_url=require("./internal/url.cjs"),require_internal_version=require("./internal/version.cjs");let _interfere_constants_api=require("@interfere/constants/api"),_interfere_types_releases_slug=require("@interfere/types/releases/slug"),_opentelemetry_context_async_hooks=require("@opentelemetry/context-async-hooks"),_opentelemetry_exporter_trace_otlp_http=require("@opentelemetry/exporter-trace-otlp-http"),_opentelemetry_resources=require("@opentelemetry/resources"),_opentelemetry_sdk_trace_base=require("@opentelemetry/sdk-trace-base"),_opentelemetry_sdk_trace_node=require("@opentelemetry/sdk-trace-node"),provider=null;function init(options={}){if(provider)return;let debug=options.debug??process.env.INTERFERE_DEBUG===`1`,env=require_internal_env.readInterfereEnv();if(!env.publicKey){console.warn(`[interfere] INTERFERE_PUBLIC_KEY not set; SDK disabled`);return}let releaseSlug=env.forceEnable?_interfere_types_releases_slug.LOCAL_DEV_RELEASE_SLUG:require_internal_release_slug.resolveReleaseSlug().slug;releaseSlug||console.warn(`[interfere] No release slug resolved — the collector will reject spans. Add a postbuild script to your package.json:
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_internal_env=require("./internal/env.cjs"),require_internal_global_handlers=require("./internal/global-handlers.cjs"),require_internal_release_slug=require("./internal/release-slug.cjs"),require_internal_url=require("./internal/url.cjs"),require_internal_version=require("./internal/version.cjs");let _interfere_constants_api=require("@interfere/constants/api"),_interfere_types_releases_slug=require("@interfere/types/releases/slug"),_interfere_types_sdk_runtime=require("@interfere/types/sdk/runtime"),_opentelemetry_context_async_hooks=require("@opentelemetry/context-async-hooks"),_opentelemetry_exporter_trace_otlp_http=require("@opentelemetry/exporter-trace-otlp-http"),_opentelemetry_resources=require("@opentelemetry/resources"),_opentelemetry_sdk_trace_base=require("@opentelemetry/sdk-trace-base"),_opentelemetry_sdk_trace_node=require("@opentelemetry/sdk-trace-node"),provider=null;function init(options={}){if(provider)return;let debug=options.debug??process.env.INTERFERE_DEBUG===`1`,env=require_internal_env.readInterfereEnv();if(!env.publicKey){console.warn(`[interfere] INTERFERE_PUBLIC_KEY not set; SDK disabled`);return}let environment=(0,_interfere_types_sdk_runtime.resolveEnvironment)({explicit:options.environment,env:process.env}),releaseSlug=env.forceEnable?_interfere_types_releases_slug.LOCAL_DEV_RELEASE_SLUG:require_internal_release_slug.resolveReleaseSlug().slug;releaseSlug||console.warn(`[interfere] No release slug resolved — the collector will reject spans. Add a postbuild script to your package.json:
2
2
  "postbuild": "interfere sourcemaps upload ./dist"
3
- and set INTERFERE_API_KEY in your CI environment. See https://interfere.com/docs/nest#releases`);let serviceName=options.serviceName??process.env.OTEL_SERVICE_NAME??`node-app`,resource=(0,_opentelemetry_resources.resourceFromAttributes)({"service.name":serviceName,...options.serviceNamespace?{"service.namespace":options.serviceNamespace}:{},"deployment.environment.name":env.nodeEnvironment??`unknown`,"telemetry.sdk.language":`nodejs`,"interfere.sdk.name":`@interfere/node`,"interfere.sdk.version":require_internal_version.PRODUCER_VERSION,...releaseSlug?{"release.slug":releaseSlug}:{}}),exporter=new _opentelemetry_exporter_trace_otlp_http.OTLPTraceExporter({url:require_internal_url.withPublicKey(`${env.apiUrl}${_interfere_constants_api.API_PATHS.SINK}`,env.publicKey),headers:{"user-agent":require_internal_version.PRODUCER_VERSION,"x-interfere-producer-version":require_internal_version.PRODUCER_VERSION,...env.forceEnable?{"x-interfere-force-enable":`1`}:{}}});if(debug){let orig=exporter.export.bind(exporter);exporter.export=(spans,cb)=>{let t=Date.now();orig(spans,result=>{let ms=Date.now()-t;if(result.code===0)console.log(`[interfere] export: ${spans.length} spans (${ms}ms)`);else{let err=result.error,status=err?.code?` ${err.code}`:``,body=err?.data??err?.message??`unknown error`;console.warn(`[interfere] export failed:${status} ${body} (${ms}ms, ${spans.length} spans dropped)`)}cb(result)})}}if(provider=new _opentelemetry_sdk_trace_node.NodeTracerProvider({resource,spanProcessors:[new _opentelemetry_sdk_trace_base.BatchSpanProcessor(exporter)]}),provider.register({contextManager:new _opentelemetry_context_async_hooks.AsyncLocalStorageContextManager().enable()}),require_internal_global_handlers.installGlobalHandlers({captureUncaughtException:options.captureUncaughtException??!0,captureUnhandledRejection:options.captureUnhandledRejection??!0,flush}),debug){let endpoint=require_internal_url.withPublicKey(`${env.apiUrl}${_interfere_constants_api.API_PATHS.SINK}`,env.publicKey);console.log(`[interfere] init: service=${serviceName}, env=${env.nodeEnvironment??`unknown`}, endpoint=${endpoint}`),releaseSlug&&console.log(`[interfere] release.slug=${releaseSlug}`)}}async function close(){provider&&=(require_internal_global_handlers.uninstallGlobalHandlers(),await provider.shutdown(),null)}async function flush(){provider&&await provider.forceFlush()}exports.close=close,exports.flush=flush,exports.init=init;
3
+ and set INTERFERE_API_KEY in your CI environment. See https://interfere.com/docs/nest#releases`);let serviceName=options.serviceName??process.env.OTEL_SERVICE_NAME??`node-app`,resource=(0,_opentelemetry_resources.resourceFromAttributes)({"service.name":serviceName,...options.serviceNamespace?{"service.namespace":options.serviceNamespace}:{},"deployment.environment.name":environment,"telemetry.sdk.language":`nodejs`,"interfere.sdk.name":`@interfere/node`,"interfere.sdk.version":require_internal_version.PRODUCER_VERSION,...releaseSlug?{"release.slug":releaseSlug}:{}}),exporter=new _opentelemetry_exporter_trace_otlp_http.OTLPTraceExporter({url:require_internal_url.withPublicKey(`${env.apiUrl}${_interfere_constants_api.API_PATHS.SINK}`,env.publicKey),headers:{"user-agent":require_internal_version.PRODUCER_VERSION,"x-interfere-producer-version":require_internal_version.PRODUCER_VERSION,...env.forceEnable?{"x-interfere-force-enable":`1`}:{}}});if(debug){let orig=exporter.export.bind(exporter);exporter.export=(spans,cb)=>{let t=Date.now();orig(spans,result=>{let ms=Date.now()-t;if(result.code===0)console.log(`[interfere] export: ${spans.length} spans (${ms}ms)`);else{let err=result.error,status=err?.code?` ${err.code}`:``,body=err?.data??err?.message??`unknown error`;console.warn(`[interfere] export failed:${status} ${body} (${ms}ms, ${spans.length} spans dropped)`)}cb(result)})}}if(provider=new _opentelemetry_sdk_trace_node.NodeTracerProvider({resource,spanProcessors:[new _opentelemetry_sdk_trace_base.BatchSpanProcessor(exporter)]}),provider.register({contextManager:new _opentelemetry_context_async_hooks.AsyncLocalStorageContextManager().enable()}),require_internal_global_handlers.installGlobalHandlers({captureUncaughtException:options.captureUncaughtException??!0,captureUnhandledRejection:options.captureUnhandledRejection??!0,flush}),debug){let endpoint=require_internal_url.withPublicKey(`${env.apiUrl}${_interfere_constants_api.API_PATHS.SINK}`,env.publicKey);console.log(`[interfere] init: service=${serviceName}, env=${environment}, endpoint=${endpoint}`),releaseSlug&&console.log(`[interfere] release.slug=${releaseSlug}`)}}async function close(){provider&&=(require_internal_global_handlers.uninstallGlobalHandlers(),await provider.shutdown(),null)}async function flush(){provider&&await provider.forceFlush()}exports.close=close,exports.flush=flush,exports.init=init;
package/dist/init.d.cts CHANGED
@@ -18,6 +18,14 @@ interface InitOptions {
18
18
  * errors). Also activatable via `INTERFERE_DEBUG=1`. Default `false`.
19
19
  */
20
20
  readonly debug?: boolean;
21
+ /**
22
+ * Deployment environment label (e.g. `production`, `staging`, `preview`).
23
+ * Highest-precedence source; falls back to `INTERFERE_ENVIRONMENT`, then
24
+ * `VERCEL_ENV`, then `NODE_ENV`, then `development`. Free-form — the
25
+ * collector accepts any label and only filters known-local ones
26
+ * (`development`/`local`/`test`) per surface config.
27
+ */
28
+ readonly environment?: string;
21
29
  /**
22
30
  * Sets the OTel `service.name` resource attribute — the identity spans
23
31
  * are grouped by in the dashboard. Defaults to `OTEL_SERVICE_NAME` env
@@ -63,5 +71,4 @@ declare function close(): Promise<void>;
63
71
  */
64
72
  declare function flush(): Promise<void>;
65
73
  //#endregion
66
- export { InitOptions, close, flush, init };
67
- //# sourceMappingURL=init.d.cts.map
74
+ export { InitOptions, close, flush, init };
package/dist/init.d.mts CHANGED
@@ -18,6 +18,14 @@ interface InitOptions {
18
18
  * errors). Also activatable via `INTERFERE_DEBUG=1`. Default `false`.
19
19
  */
20
20
  readonly debug?: boolean;
21
+ /**
22
+ * Deployment environment label (e.g. `production`, `staging`, `preview`).
23
+ * Highest-precedence source; falls back to `INTERFERE_ENVIRONMENT`, then
24
+ * `VERCEL_ENV`, then `NODE_ENV`, then `development`. Free-form — the
25
+ * collector accepts any label and only filters known-local ones
26
+ * (`development`/`local`/`test`) per surface config.
27
+ */
28
+ readonly environment?: string;
21
29
  /**
22
30
  * Sets the OTel `service.name` resource attribute — the identity spans
23
31
  * are grouped by in the dashboard. Defaults to `OTEL_SERVICE_NAME` env
@@ -63,5 +71,4 @@ declare function close(): Promise<void>;
63
71
  */
64
72
  declare function flush(): Promise<void>;
65
73
  //#endregion
66
- export { InitOptions, close, flush, init };
67
- //# sourceMappingURL=init.d.mts.map
74
+ export { InitOptions, close, flush, init };
package/dist/init.mjs CHANGED
@@ -1,4 +1,3 @@
1
- import{readInterfereEnv}from"./internal/env.mjs";import{installGlobalHandlers,uninstallGlobalHandlers}from"./internal/global-handlers.mjs";import{resolveReleaseSlug}from"./internal/release-slug.mjs";import{withPublicKey}from"./internal/url.mjs";import{PRODUCER_VERSION}from"./internal/version.mjs";import{API_PATHS}from"@interfere/constants/api";import{LOCAL_DEV_RELEASE_SLUG}from"@interfere/types/releases/slug";import{AsyncLocalStorageContextManager}from"@opentelemetry/context-async-hooks";import{OTLPTraceExporter}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes}from"@opentelemetry/resources";import{BatchSpanProcessor}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider}from"@opentelemetry/sdk-trace-node";let provider=null;function init(options={}){if(provider)return;let debug=options.debug??process.env.INTERFERE_DEBUG===`1`,env=readInterfereEnv();if(!env.publicKey){console.warn(`[interfere] INTERFERE_PUBLIC_KEY not set; SDK disabled`);return}let releaseSlug=env.forceEnable?LOCAL_DEV_RELEASE_SLUG:resolveReleaseSlug().slug;releaseSlug||console.warn(`[interfere] No release slug resolved — the collector will reject spans. Add a postbuild script to your package.json:
1
+ import{readInterfereEnv}from"./internal/env.mjs";import{installGlobalHandlers,uninstallGlobalHandlers}from"./internal/global-handlers.mjs";import{resolveReleaseSlug}from"./internal/release-slug.mjs";import{withPublicKey}from"./internal/url.mjs";import{PRODUCER_VERSION}from"./internal/version.mjs";import{API_PATHS}from"@interfere/constants/api";import{LOCAL_DEV_RELEASE_SLUG}from"@interfere/types/releases/slug";import{resolveEnvironment}from"@interfere/types/sdk/runtime";import{AsyncLocalStorageContextManager}from"@opentelemetry/context-async-hooks";import{OTLPTraceExporter}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes}from"@opentelemetry/resources";import{BatchSpanProcessor}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider}from"@opentelemetry/sdk-trace-node";let provider=null;function init(options={}){if(provider)return;let debug=options.debug??process.env.INTERFERE_DEBUG===`1`,env=readInterfereEnv();if(!env.publicKey){console.warn(`[interfere] INTERFERE_PUBLIC_KEY not set; SDK disabled`);return}let environment=resolveEnvironment({explicit:options.environment,env:process.env}),releaseSlug=env.forceEnable?LOCAL_DEV_RELEASE_SLUG:resolveReleaseSlug().slug;releaseSlug||console.warn(`[interfere] No release slug resolved — the collector will reject spans. Add a postbuild script to your package.json:
2
2
  "postbuild": "interfere sourcemaps upload ./dist"
3
- and set INTERFERE_API_KEY in your CI environment. See https://interfere.com/docs/nest#releases`);let serviceName=options.serviceName??process.env.OTEL_SERVICE_NAME??`node-app`,resource=resourceFromAttributes({"service.name":serviceName,...options.serviceNamespace?{"service.namespace":options.serviceNamespace}:{},"deployment.environment.name":env.nodeEnvironment??`unknown`,"telemetry.sdk.language":`nodejs`,"interfere.sdk.name":`@interfere/node`,"interfere.sdk.version":PRODUCER_VERSION,...releaseSlug?{"release.slug":releaseSlug}:{}}),exporter=new OTLPTraceExporter({url:withPublicKey(`${env.apiUrl}${API_PATHS.SINK}`,env.publicKey),headers:{"user-agent":PRODUCER_VERSION,"x-interfere-producer-version":PRODUCER_VERSION,...env.forceEnable?{"x-interfere-force-enable":`1`}:{}}});if(debug){let orig=exporter.export.bind(exporter);exporter.export=(spans,cb)=>{let t=Date.now();orig(spans,result=>{let ms=Date.now()-t;if(result.code===0)console.log(`[interfere] export: ${spans.length} spans (${ms}ms)`);else{let err=result.error,status=err?.code?` ${err.code}`:``,body=err?.data??err?.message??`unknown error`;console.warn(`[interfere] export failed:${status} ${body} (${ms}ms, ${spans.length} spans dropped)`)}cb(result)})}}if(provider=new NodeTracerProvider({resource,spanProcessors:[new BatchSpanProcessor(exporter)]}),provider.register({contextManager:new AsyncLocalStorageContextManager().enable()}),installGlobalHandlers({captureUncaughtException:options.captureUncaughtException??!0,captureUnhandledRejection:options.captureUnhandledRejection??!0,flush}),debug){let endpoint=withPublicKey(`${env.apiUrl}${API_PATHS.SINK}`,env.publicKey);console.log(`[interfere] init: service=${serviceName}, env=${env.nodeEnvironment??`unknown`}, endpoint=${endpoint}`),releaseSlug&&console.log(`[interfere] release.slug=${releaseSlug}`)}}async function close(){provider&&=(uninstallGlobalHandlers(),await provider.shutdown(),null)}async function flush(){provider&&await provider.forceFlush()}export{close,flush,init};
4
- //# sourceMappingURL=init.mjs.map
3
+ and set INTERFERE_API_KEY in your CI environment. See https://interfere.com/docs/nest#releases`);let serviceName=options.serviceName??process.env.OTEL_SERVICE_NAME??`node-app`,resource=resourceFromAttributes({"service.name":serviceName,...options.serviceNamespace?{"service.namespace":options.serviceNamespace}:{},"deployment.environment.name":environment,"telemetry.sdk.language":`nodejs`,"interfere.sdk.name":`@interfere/node`,"interfere.sdk.version":PRODUCER_VERSION,...releaseSlug?{"release.slug":releaseSlug}:{}}),exporter=new OTLPTraceExporter({url:withPublicKey(`${env.apiUrl}${API_PATHS.SINK}`,env.publicKey),headers:{"user-agent":PRODUCER_VERSION,"x-interfere-producer-version":PRODUCER_VERSION,...env.forceEnable?{"x-interfere-force-enable":`1`}:{}}});if(debug){let orig=exporter.export.bind(exporter);exporter.export=(spans,cb)=>{let t=Date.now();orig(spans,result=>{let ms=Date.now()-t;if(result.code===0)console.log(`[interfere] export: ${spans.length} spans (${ms}ms)`);else{let err=result.error,status=err?.code?` ${err.code}`:``,body=err?.data??err?.message??`unknown error`;console.warn(`[interfere] export failed:${status} ${body} (${ms}ms, ${spans.length} spans dropped)`)}cb(result)})}}if(provider=new NodeTracerProvider({resource,spanProcessors:[new BatchSpanProcessor(exporter)]}),provider.register({contextManager:new AsyncLocalStorageContextManager().enable()}),installGlobalHandlers({captureUncaughtException:options.captureUncaughtException??!0,captureUnhandledRejection:options.captureUnhandledRejection??!0,flush}),debug){let endpoint=withPublicKey(`${env.apiUrl}${API_PATHS.SINK}`,env.publicKey);console.log(`[interfere] init: service=${serviceName}, env=${environment}, endpoint=${endpoint}`),releaseSlug&&console.log(`[interfere] release.slug=${releaseSlug}`)}}async function close(){provider&&=(uninstallGlobalHandlers(),await provider.shutdown(),null)}async function flush(){provider&&await provider.forceFlush()}export{close,flush,init};
@@ -2,5 +2,4 @@
2
2
  declare function isErrorCaptured(error: unknown): boolean;
3
3
  declare function markErrorCaptured(error: unknown): void;
4
4
  //#endregion
5
- export { isErrorCaptured, markErrorCaptured };
6
- //# sourceMappingURL=dedupe.d.cts.map
5
+ export { isErrorCaptured, markErrorCaptured };
@@ -2,5 +2,4 @@
2
2
  declare function isErrorCaptured(error: unknown): boolean;
3
3
  declare function markErrorCaptured(error: unknown): void;
4
4
  //#endregion
5
- export { isErrorCaptured, markErrorCaptured };
6
- //# sourceMappingURL=dedupe.d.mts.map
5
+ export { isErrorCaptured, markErrorCaptured };
@@ -1,2 +1 @@
1
- const seenErrors=new WeakSet;function isErrorCaptured(error){return error instanceof Error&&seenErrors.has(error)}function markErrorCaptured(error){error instanceof Error&&seenErrors.add(error)}export{isErrorCaptured,markErrorCaptured};
2
- //# sourceMappingURL=dedupe.mjs.map
1
+ const seenErrors=new WeakSet;function isErrorCaptured(error){return error instanceof Error&&seenErrors.has(error)}function markErrorCaptured(error){error instanceof Error&&seenErrors.add(error)}export{isErrorCaptured,markErrorCaptured};
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let _interfere_constants_api=require("@interfere/constants/api"),_interfere_types_sdk_env=require("@interfere/types/sdk/env"),_interfere_types_sdk_runtime=require("@interfere/types/sdk/runtime");function isEnabledInEnvironment(){return!0}function readInterfereEnv(){let nodeEnvironment=(0,_interfere_types_sdk_runtime.normalizeEnv)(process.env.NODE_ENV);return{apiUrl:(0,_interfere_types_sdk_env.parseEnvValue)(process.env.INTERFERE_API_URL)??_interfere_constants_api.API_URL,forceEnable:process.env.INTERFERE_FORCE_ENABLE===`1`,nodeEnvironment,publicKey:(0,_interfere_types_sdk_env.parseEnvValue)(process.env.INTERFERE_PUBLIC_KEY)}}exports.isEnabledInEnvironment=isEnabledInEnvironment,exports.readInterfereEnv=readInterfereEnv;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let _interfere_constants_api=require("@interfere/constants/api"),_interfere_types_sdk_env=require("@interfere/types/sdk/env");function isEnabledInEnvironment(){return!0}function readInterfereEnv(){return{apiUrl:(0,_interfere_types_sdk_env.parseEnvValue)(process.env.INTERFERE_API_URL)??_interfere_constants_api.API_URL,forceEnable:process.env.INTERFERE_FORCE_ENABLE===`1`,publicKey:(0,_interfere_types_sdk_env.parseEnvValue)(process.env.INTERFERE_PUBLIC_KEY)}}exports.isEnabledInEnvironment=isEnabledInEnvironment,exports.readInterfereEnv=readInterfereEnv;
@@ -1,10 +1,7 @@
1
- import { Env } from "@interfere/types/sdk/runtime";
2
-
3
1
  //#region src/internal/env.d.ts
4
2
  interface InterfereEnv {
5
3
  readonly apiUrl: string;
6
4
  readonly forceEnable: boolean;
7
- readonly nodeEnvironment: Env;
8
5
  readonly publicKey: string | null;
9
6
  }
10
7
  /**
@@ -17,5 +14,4 @@ interface InterfereEnv {
17
14
  declare function isEnabledInEnvironment(): boolean;
18
15
  declare function readInterfereEnv(): InterfereEnv;
19
16
  //#endregion
20
- export { InterfereEnv, isEnabledInEnvironment, readInterfereEnv };
21
- //# sourceMappingURL=env.d.cts.map
17
+ export { InterfereEnv, isEnabledInEnvironment, readInterfereEnv };
@@ -1,10 +1,7 @@
1
- import { Env } from "@interfere/types/sdk/runtime";
2
-
3
1
  //#region src/internal/env.d.ts
4
2
  interface InterfereEnv {
5
3
  readonly apiUrl: string;
6
4
  readonly forceEnable: boolean;
7
- readonly nodeEnvironment: Env;
8
5
  readonly publicKey: string | null;
9
6
  }
10
7
  /**
@@ -17,5 +14,4 @@ interface InterfereEnv {
17
14
  declare function isEnabledInEnvironment(): boolean;
18
15
  declare function readInterfereEnv(): InterfereEnv;
19
16
  //#endregion
20
- export { InterfereEnv, isEnabledInEnvironment, readInterfereEnv };
21
- //# sourceMappingURL=env.d.mts.map
17
+ export { InterfereEnv, isEnabledInEnvironment, readInterfereEnv };
@@ -1,2 +1 @@
1
- import{API_URL}from"@interfere/constants/api";import{parseEnvValue}from"@interfere/types/sdk/env";import{normalizeEnv}from"@interfere/types/sdk/runtime";function isEnabledInEnvironment(){return!0}function readInterfereEnv(){let nodeEnvironment=normalizeEnv(process.env.NODE_ENV);return{apiUrl:parseEnvValue(process.env.INTERFERE_API_URL)??API_URL,forceEnable:process.env.INTERFERE_FORCE_ENABLE===`1`,nodeEnvironment,publicKey:parseEnvValue(process.env.INTERFERE_PUBLIC_KEY)}}export{isEnabledInEnvironment,readInterfereEnv};
2
- //# sourceMappingURL=env.mjs.map
1
+ import{API_URL}from"@interfere/constants/api";import{parseEnvValue}from"@interfere/types/sdk/env";function isEnabledInEnvironment(){return!0}function readInterfereEnv(){return{apiUrl:parseEnvValue(process.env.INTERFERE_API_URL)??API_URL,forceEnable:process.env.INTERFERE_FORCE_ENABLE===`1`,publicKey:parseEnvValue(process.env.INTERFERE_PUBLIC_KEY)}}export{isEnabledInEnvironment,readInterfereEnv};
@@ -22,5 +22,4 @@ declare function installGlobalHandlers(options: {
22
22
  }): void;
23
23
  declare function uninstallGlobalHandlers(): void;
24
24
  //#endregion
25
- export { installGlobalHandlers, uninstallGlobalHandlers };
26
- //# sourceMappingURL=global-handlers.d.cts.map
25
+ export { installGlobalHandlers, uninstallGlobalHandlers };
@@ -22,5 +22,4 @@ declare function installGlobalHandlers(options: {
22
22
  }): void;
23
23
  declare function uninstallGlobalHandlers(): void;
24
24
  //#endregion
25
- export { installGlobalHandlers, uninstallGlobalHandlers };
26
- //# sourceMappingURL=global-handlers.d.mts.map
25
+ export { installGlobalHandlers, uninstallGlobalHandlers };
@@ -1,2 +1 @@
1
- import{captureError}from"../capture.mjs";import{MECHANISM_TYPE}from"@interfere/types/sdk/errors";let uncaughtHandler=null,unhandledHandler=null;function installGlobalHandlers(options){options.captureUncaughtException&&uncaughtHandler===null&&(uncaughtHandler=error=>{handleUncaughtException(error,options.flush).catch(()=>void 0)},process.on(`uncaughtException`,uncaughtHandler)),options.captureUnhandledRejection&&unhandledHandler===null&&(unhandledHandler=reason=>{handleUnhandledRejection(reason,options.flush).catch(()=>void 0)},process.on(`unhandledRejection`,unhandledHandler))}function uninstallGlobalHandlers(){uncaughtHandler!==null&&(process.off(`uncaughtException`,uncaughtHandler),uncaughtHandler=null),unhandledHandler!==null&&(process.off(`unhandledRejection`,unhandledHandler),unhandledHandler=null)}async function handleUncaughtException(error,flush){await captureError(error,void 0,{mechanism:{type:MECHANISM_TYPE.node.uncaughtException,handled:!1}}),await flushWithTimeout(flush),process.exit(1)}async function handleUnhandledRejection(reason,flush){await captureError(reason,void 0,{mechanism:{type:MECHANISM_TYPE.node.unhandledRejection,handled:!1}}),await flushWithTimeout(flush)}function flushWithTimeout(flush){return Promise.race([flush(),new Promise(resolve=>{setTimeout(resolve,2e3)})])}export{installGlobalHandlers,uninstallGlobalHandlers};
2
- //# sourceMappingURL=global-handlers.mjs.map
1
+ import{captureError}from"../capture.mjs";import{MECHANISM_TYPE}from"@interfere/types/sdk/errors";let uncaughtHandler=null,unhandledHandler=null;function installGlobalHandlers(options){options.captureUncaughtException&&uncaughtHandler===null&&(uncaughtHandler=error=>{handleUncaughtException(error,options.flush).catch(()=>void 0)},process.on(`uncaughtException`,uncaughtHandler)),options.captureUnhandledRejection&&unhandledHandler===null&&(unhandledHandler=reason=>{handleUnhandledRejection(reason,options.flush).catch(()=>void 0)},process.on(`unhandledRejection`,unhandledHandler))}function uninstallGlobalHandlers(){uncaughtHandler!==null&&(process.off(`uncaughtException`,uncaughtHandler),uncaughtHandler=null),unhandledHandler!==null&&(process.off(`unhandledRejection`,unhandledHandler),unhandledHandler=null)}async function handleUncaughtException(error,flush){await captureError(error,void 0,{mechanism:{type:MECHANISM_TYPE.node.uncaughtException,handled:!1}}),await flushWithTimeout(flush),process.exit(1)}async function handleUnhandledRejection(reason,flush){await captureError(reason,void 0,{mechanism:{type:MECHANISM_TYPE.node.unhandledRejection,handled:!1}}),await flushWithTimeout(flush)}function flushWithTimeout(flush){return Promise.race([flush(),new Promise(resolve=>{setTimeout(resolve,2e3)})])}export{installGlobalHandlers,uninstallGlobalHandlers};
@@ -12,5 +12,4 @@ declare const TRACEPARENT_HEADER = "traceparent";
12
12
  */
13
13
  declare function normalizeRequest(request: unknown): NormalizedRequest | null;
14
14
  //#endregion
15
- export { TRACEPARENT_HEADER, normalizeRequest };
16
- //# sourceMappingURL=normalize-request.d.cts.map
15
+ export { TRACEPARENT_HEADER, normalizeRequest };
@@ -12,5 +12,4 @@ declare const TRACEPARENT_HEADER = "traceparent";
12
12
  */
13
13
  declare function normalizeRequest(request: unknown): NormalizedRequest | null;
14
14
  //#endregion
15
- export { TRACEPARENT_HEADER, normalizeRequest };
16
- //# sourceMappingURL=normalize-request.d.mts.map
15
+ export { TRACEPARENT_HEADER, normalizeRequest };
@@ -1,2 +1 @@
1
- const TRACEPARENT_HEADER=`traceparent`;function normalizeRequest(request){if(request instanceof Request)return{method:normalizeMethod(request.method),path:normalizePath(request.url),headers:request.headers};if(typeof request!=`object`||!request)return null;let value=request;return{method:normalizeMethod(value.method),path:normalizePath(typeof value.path==`string`?value.path:toStringOrDefault(value.url)),headers:normalizeHeaders(value.headers)}}function normalizeMethod(value){if(typeof value!=`string`)return`GET`;let method=value.trim();return method.length>0?method.toUpperCase():`GET`}function normalizePath(value){if(value.length===0)return`/`;try{return new URL(value,`http://localhost`).pathname||`/`}catch{return value.startsWith(`/`)?value:`/${value}`}}function toStringOrDefault(value,fallback=`/`){if(typeof value!=`string`)return fallback;let trimmed=value.trim();return trimmed.length>0?trimmed:fallback}function normalizeHeaders(value){if(value instanceof Headers)return new Headers(value);if(typeof value!=`object`||!value)return new Headers;let headers=new Headers;for(let[key,headerValue]of Object.entries(value))if(headerValue!==void 0){if(Array.isArray(headerValue)){headers.set(key,headerValue.join(`, `));continue}headers.set(key,String(headerValue))}return headers}export{TRACEPARENT_HEADER,normalizeRequest};
2
- //# sourceMappingURL=normalize-request.mjs.map
1
+ const TRACEPARENT_HEADER=`traceparent`;function normalizeRequest(request){if(request instanceof Request)return{method:normalizeMethod(request.method),path:normalizePath(request.url),headers:request.headers};if(typeof request!=`object`||!request)return null;let value=request;return{method:normalizeMethod(value.method),path:normalizePath(typeof value.path==`string`?value.path:toStringOrDefault(value.url)),headers:normalizeHeaders(value.headers)}}function normalizeMethod(value){if(typeof value!=`string`)return`GET`;let method=value.trim();return method.length>0?method.toUpperCase():`GET`}function normalizePath(value){if(value.length===0)return`/`;try{return new URL(value,`http://localhost`).pathname||`/`}catch{return value.startsWith(`/`)?value:`/${value}`}}function toStringOrDefault(value,fallback=`/`){if(typeof value!=`string`)return fallback;let trimmed=value.trim();return trimmed.length>0?trimmed:fallback}function normalizeHeaders(value){if(value instanceof Headers)return new Headers(value);if(typeof value!=`object`||!value)return new Headers;let headers=new Headers;for(let[key,headerValue]of Object.entries(value))if(headerValue!==void 0){if(Array.isArray(headerValue)){headers.set(key,headerValue.join(`, `));continue}headers.set(key,String(headerValue))}return headers}export{TRACEPARENT_HEADER,normalizeRequest};
@@ -5,5 +5,4 @@ declare function resolveReleaseSlug(): {
5
5
  slug: string | null;
6
6
  };
7
7
  //#endregion
8
- export { resolveCommitSha, resolveReleaseSlug };
9
- //# sourceMappingURL=release-slug.d.cts.map
8
+ export { resolveCommitSha, resolveReleaseSlug };
@@ -5,5 +5,4 @@ declare function resolveReleaseSlug(): {
5
5
  slug: string | null;
6
6
  };
7
7
  //#endregion
8
- export { resolveCommitSha, resolveReleaseSlug };
9
- //# sourceMappingURL=release-slug.d.mts.map
8
+ export { resolveCommitSha, resolveReleaseSlug };
@@ -1,2 +1 @@
1
- import{readFirstEnvValue}from"@interfere/types/sdk/env";import{deriveReleaseSlug}from"@interfere/types/releases/slug";import{releaseSourceIdEnvKeys}from"@interfere/types/integrations";import{execSync}from"node:child_process";function runGitCommand(command){try{let output=execSync(command,{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim();return output.length>0?output:null}catch{return null}}function resolveCommitSha(){return readFirstEnvValue(process.env,releaseSourceIdEnvKeys)??runGitCommand(`git rev-parse HEAD`)}function resolveReleaseSlug(){let commitSha=resolveCommitSha();return{commitSha,slug:commitSha?deriveReleaseSlug(commitSha):null}}export{resolveCommitSha,resolveReleaseSlug};
2
- //# sourceMappingURL=release-slug.mjs.map
1
+ import{readFirstEnvValue}from"@interfere/types/sdk/env";import{deriveReleaseSlug}from"@interfere/types/releases/slug";import{releaseSourceIdEnvKeys}from"@interfere/types/integrations";import{execSync}from"node:child_process";function runGitCommand(command){try{let output=execSync(command,{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim();return output.length>0?output:null}catch{return null}}function resolveCommitSha(){return readFirstEnvValue(process.env,releaseSourceIdEnvKeys)??runGitCommand(`git rev-parse HEAD`)}function resolveReleaseSlug(){let commitSha=resolveCommitSha();return{commitSha,slug:commitSha?deriveReleaseSlug(commitSha):null}}export{resolveCommitSha,resolveReleaseSlug};
@@ -13,5 +13,4 @@ interface NormalizedRequest {
13
13
  readonly path: string;
14
14
  }
15
15
  //#endregion
16
- export { CaptureErrorContext, NormalizedRequest };
17
- //# sourceMappingURL=types.d.cts.map
16
+ export { CaptureErrorContext, NormalizedRequest };
@@ -13,5 +13,4 @@ interface NormalizedRequest {
13
13
  readonly path: string;
14
14
  }
15
15
  //#endregion
16
- export { CaptureErrorContext, NormalizedRequest };
17
- //# sourceMappingURL=types.d.mts.map
16
+ export { CaptureErrorContext, NormalizedRequest };
@@ -1,5 +1,4 @@
1
1
  //#region src/internal/url.d.ts
2
2
  declare function withPublicKey(url: string, publicKey: string): string;
3
3
  //#endregion
4
- export { withPublicKey };
5
- //# sourceMappingURL=url.d.cts.map
4
+ export { withPublicKey };
@@ -1,5 +1,4 @@
1
1
  //#region src/internal/url.d.ts
2
2
  declare function withPublicKey(url: string, publicKey: string): string;
3
3
  //#endregion
4
- export { withPublicKey };
5
- //# sourceMappingURL=url.d.mts.map
4
+ export { withPublicKey };
@@ -1,2 +1 @@
1
- function withPublicKey(url,publicKey){let next=new URL(url);return next.searchParams.set(`pk`,publicKey),next.toString()}export{withPublicKey};
2
- //# sourceMappingURL=url.mjs.map
1
+ function withPublicKey(url,publicKey){let next=new URL(url);return next.searchParams.set(`pk`,publicKey),next.toString()}export{withPublicKey};
@@ -1,5 +1,4 @@
1
1
  //#region src/internal/version.d.ts
2
2
  declare const PRODUCER_VERSION: string;
3
3
  //#endregion
4
- export { PRODUCER_VERSION };
5
- //# sourceMappingURL=version.d.cts.map
4
+ export { PRODUCER_VERSION };
@@ -1,5 +1,4 @@
1
1
  //#region src/internal/version.d.ts
2
2
  declare const PRODUCER_VERSION: string;
3
3
  //#endregion
4
- export { PRODUCER_VERSION };
5
- //# sourceMappingURL=version.d.mts.map
4
+ export { PRODUCER_VERSION };
@@ -1,2 +1 @@
1
- import{name,version}from"../package.mjs";const PRODUCER_VERSION=`${name}@${version}`;export{PRODUCER_VERSION};
2
- //# sourceMappingURL=version.mjs.map
1
+ import{name,version}from"../package.mjs";const PRODUCER_VERSION=`${name}@${version}`;export{PRODUCER_VERSION};
package/dist/package.cjs CHANGED
@@ -1 +1 @@
1
- var name=`@interfere/node`,version=`0.0.1-canary.5`;Object.defineProperty(exports,"name",{enumerable:!0,get:function(){return name}}),Object.defineProperty(exports,"version",{enumerable:!0,get:function(){return version}});
1
+ Object.defineProperty(exports,"name",{enumerable:!0,get:function(){return`@interfere/node`}}),Object.defineProperty(exports,"version",{enumerable:!0,get:function(){return`0.1.0-canary.7`}});
package/dist/package.mjs CHANGED
@@ -1,2 +1 @@
1
- var name=`@interfere/node`,version=`0.0.1-canary.5`;export{name,version};
2
- //# sourceMappingURL=package.mjs.map
1
+ var name=`@interfere/node`,version=`0.1.0-canary.7`;export{name,version};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interfere/node",
3
- "version": "0.0.1-canary.5",
3
+ "version": "0.1.0-canary.7",
4
4
  "license": "MIT",
5
5
  "description": "Node.js SDK for Interfere. Error tracking and OTel instrumentation for any Node server.",
6
6
  "keywords": [
@@ -17,7 +17,7 @@
17
17
  "author": "Interfere <support@interfere.com> (https://interfere.com)",
18
18
  "repository": {
19
19
  "type": "git",
20
- "url": "git+https://github.com/interfere-inc/interfere.git",
20
+ "url": "git+https://interfere.ghe.com/interfere/interfere.git",
21
21
  "directory": "src/packages/public/node"
22
22
  },
23
23
  "files": [
@@ -73,26 +73,25 @@
73
73
  "scripts": {
74
74
  "build": "tsdown",
75
75
  "test": "vitest run --passWithNoTests",
76
- "typecheck": "tsc --noEmit --incremental"
76
+ "typecheck": "tsc --noEmit"
77
77
  },
78
78
  "dependencies": {
79
79
  "@interfere/constants": "^9.0.2-canary.0",
80
- "@interfere/types": "^9.0.3-canary.0",
80
+ "@interfere/types": "^9.0.3-canary.2",
81
81
  "@opentelemetry/api": "^1.9.1",
82
82
  "@opentelemetry/context-async-hooks": "^2.7.1",
83
- "@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
83
+ "@opentelemetry/exporter-trace-otlp-http": "^0.219.0",
84
84
  "@opentelemetry/resources": "^2.7.0",
85
85
  "@opentelemetry/sdk-trace-base": "^2.7.0",
86
- "@opentelemetry/sdk-trace-node": "^2.7.1",
87
- "uuid": "^14.0.0"
86
+ "@opentelemetry/sdk-trace-node": "^2.7.1"
88
87
  },
89
88
  "devDependencies": {
90
89
  "@interfere/test-utils": "^9.0.0",
91
90
  "@interfere/typescript-config": "^9.0.0",
92
- "@types/node": "^24.12.0",
93
- "@vitest/coverage-v8": "^4.1.6",
94
- "tsdown": "^0.22.0",
91
+ "@types/node": "^26.0.0",
92
+ "@vitest/coverage-v8": "4.1.9",
93
+ "tsdown": "^0.22.2",
95
94
  "typescript": "^6.0.3",
96
- "vitest": "^4.1.6"
95
+ "vitest": "4.1.9"
97
96
  }
98
97
  }