@interfere/nest 0.0.1-canary.0 → 0.0.1-canary.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 (34) hide show
  1. package/README.md +15 -2
  2. package/dist/_virtual/_@oxc-project_runtime@0.132.0/helpers/decorate.cjs +1 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.132.0/helpers/decorate.mjs +1 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateMetadata.cjs +1 -0
  5. package/dist/_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateMetadata.mjs +1 -0
  6. package/dist/_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateParam.cjs +1 -0
  7. package/dist/_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateParam.mjs +1 -0
  8. package/dist/exception-filter.cjs +1 -0
  9. package/dist/exception-filter.d.cts +19 -0
  10. package/dist/exception-filter.d.mts +2 -1
  11. package/dist/exception-filter.mjs +2 -33
  12. package/dist/index.cjs +1 -0
  13. package/dist/index.d.cts +5 -0
  14. package/dist/index.mjs +1 -5
  15. package/dist/init.cjs +1 -0
  16. package/dist/init.d.cts +22 -0
  17. package/dist/init.d.mts +12 -3
  18. package/dist/init.mjs +2 -21
  19. package/dist/module.cjs +1 -0
  20. package/dist/module.d.cts +14 -0
  21. package/dist/module.d.mts +2 -1
  22. package/dist/module.mjs +2 -20
  23. package/dist/package.cjs +1 -0
  24. package/dist/package.mjs +2 -0
  25. package/package.json +26 -14
  26. package/dist/_virtual/_@oxc-project_runtime@0.129.0/helpers/decorate.mjs +0 -9
  27. package/dist/_virtual/_@oxc-project_runtime@0.129.0/helpers/decorateMetadata.mjs +0 -6
  28. package/dist/_virtual/_@oxc-project_runtime@0.129.0/helpers/decorateParam.mjs +0 -8
  29. package/dist/exception-filter.d.mts.map +0 -1
  30. package/dist/exception-filter.mjs.map +0 -1
  31. package/dist/init.d.mts.map +0 -1
  32. package/dist/init.mjs.map +0 -1
  33. package/dist/module.d.mts.map +0 -1
  34. package/dist/module.mjs.map +0 -1
package/README.md CHANGED
@@ -15,7 +15,20 @@ bun add @interfere/nest
15
15
  ```ts
16
16
  // instrument.ts — imported first in main.ts, before any @nestjs/* import
17
17
  import { init } from "@interfere/nest";
18
- await init({ serviceName: "my-api" });
18
+ init({ serviceName: "my-api" });
19
+ ```
20
+
21
+ ```ts
22
+ // main.ts
23
+ import "./instrument";
24
+ import { NestFactory } from "@nestjs/core";
25
+ import { AppModule } from "./app.module";
26
+
27
+ async function bootstrap() {
28
+ const app = await NestFactory.create(AppModule);
29
+ await app.listen(3000);
30
+ }
31
+ bootstrap();
19
32
  ```
20
33
 
21
34
  ```ts
@@ -27,4 +40,4 @@ import { InterfereModule } from "@interfere/nest";
27
40
  export class AppModule {}
28
41
  ```
29
42
 
30
- Set `INTERFERE_API_KEY` in the environment. Full docs at <https://interfere.com/docs>.
43
+ Set `INTERFERE_PUBLIC_KEY` to your surface's `interfere_pk_*` public key. Full docs at <https://interfere.com/docs>.
@@ -0,0 +1 @@
1
+ function __decorate(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}exports.__decorate=__decorate;
@@ -0,0 +1 @@
1
+ function __decorate(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}export{__decorate};
@@ -0,0 +1 @@
1
+ function __decorateMetadata(k,v){if(typeof Reflect==`object`&&typeof Reflect.metadata==`function`)return Reflect.metadata(k,v)}exports.__decorateMetadata=__decorateMetadata;
@@ -0,0 +1 @@
1
+ function __decorateMetadata(k,v){if(typeof Reflect==`object`&&typeof Reflect.metadata==`function`)return Reflect.metadata(k,v)}export{__decorateMetadata};
@@ -0,0 +1 @@
1
+ function __decorateParam(paramIndex,decorator){return function(target,key){decorator(target,key,paramIndex)}}exports.__decorateParam=__decorateParam;
@@ -0,0 +1 @@
1
+ function __decorateParam(paramIndex,decorator){return function(target,key){decorator(target,key,paramIndex)}}export{__decorateParam};
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_decorateMetadata=require("./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateMetadata.cjs"),require_decorateParam=require("./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateParam.cjs"),require_decorate=require("./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorate.cjs");let _interfere_node=require("@interfere/node"),_nestjs_common=require("@nestjs/common"),_nestjs_core=require("@nestjs/core");var _ref;let InterfereExceptionFilter=class extends _nestjs_core.BaseExceptionFilter{constructor(adapterHost){super(adapterHost?.httpAdapter)}catch(exception,host){this.shouldReport(exception)&&(0,_interfere_node.captureError)(exception,this.extractRequest(host)),super.catch(exception,host)}shouldReport(exception){return exception instanceof _nestjs_common.HttpException?exception.getStatus()>=500:!0}extractRequest(host){if(host.getType()===`http`)return host.switchToHttp().getRequest()}};InterfereExceptionFilter=require_decorate.__decorate([(0,_nestjs_common.Catch)(),require_decorateParam.__decorateParam(0,(0,_nestjs_common.Optional)()),require_decorateParam.__decorateParam(0,(0,_nestjs_common.Inject)(_nestjs_core.HttpAdapterHost)),require_decorateMetadata.__decorateMetadata(`design:paramtypes`,[typeof(_ref=_nestjs_core.HttpAdapterHost!==void 0&&_nestjs_core.HttpAdapterHost)==`function`?_ref:Object])],InterfereExceptionFilter),Object.defineProperty(exports,"InterfereExceptionFilter",{enumerable:!0,get:function(){return InterfereExceptionFilter}});
@@ -0,0 +1,19 @@
1
+ import { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
2
+ import { BaseExceptionFilter, HttpAdapterHost } from "@nestjs/core";
3
+
4
+ //#region src/exception-filter.d.ts
5
+ /**
6
+ * Forwards uncaught exceptions to Interfere, then delegates to Nest's
7
+ * default response shaping. Skips `HttpException` with status 4xx —
8
+ * client-fault errors are framework-handled and shouldn't bill against
9
+ * crash dashboards.
10
+ */
11
+ declare class InterfereExceptionFilter extends BaseExceptionFilter implements ExceptionFilter {
12
+ constructor(adapterHost?: HttpAdapterHost);
13
+ catch(exception: unknown, host: ArgumentsHost): void;
14
+ private shouldReport;
15
+ private extractRequest;
16
+ }
17
+ //#endregion
18
+ export { InterfereExceptionFilter };
19
+ //# sourceMappingURL=exception-filter.d.cts.map
@@ -15,4 +15,5 @@ declare class InterfereExceptionFilter extends BaseExceptionFilter implements Ex
15
15
  private extractRequest;
16
16
  }
17
17
  //#endregion
18
- export { InterfereExceptionFilter };
18
+ export { InterfereExceptionFilter };
19
+ //# sourceMappingURL=exception-filter.d.mts.map
@@ -1,33 +1,2 @@
1
- import { __decorateMetadata } from "./_virtual/_@oxc-project_runtime@0.129.0/helpers/decorateMetadata.mjs";
2
- import { __decorateParam } from "./_virtual/_@oxc-project_runtime@0.129.0/helpers/decorateParam.mjs";
3
- import { __decorate } from "./_virtual/_@oxc-project_runtime@0.129.0/helpers/decorate.mjs";
4
- import { captureError } from "@interfere/node";
5
- import { Catch, HttpException, Inject, Optional } from "@nestjs/common";
6
- import { BaseExceptionFilter, HttpAdapterHost } from "@nestjs/core";
7
- //#region src/exception-filter.ts
8
- var _ref;
9
- let InterfereExceptionFilter = class InterfereExceptionFilter extends BaseExceptionFilter {
10
- constructor(adapterHost) {
11
- super(adapterHost?.httpAdapter);
12
- }
13
- catch(exception, host) {
14
- if (this.shouldReport(exception)) captureError(exception, this.extractRequest(host));
15
- super.catch(exception, host);
16
- }
17
- shouldReport(exception) {
18
- if (exception instanceof HttpException) return exception.getStatus() >= 500;
19
- return true;
20
- }
21
- extractRequest(host) {
22
- if (host.getType() !== "http") return;
23
- return host.switchToHttp().getRequest();
24
- }
25
- };
26
- InterfereExceptionFilter = __decorate([
27
- Catch(),
28
- __decorateParam(0, Optional()),
29
- __decorateParam(0, Inject(HttpAdapterHost)),
30
- __decorateMetadata("design:paramtypes", [typeof (_ref = typeof HttpAdapterHost !== "undefined" && HttpAdapterHost) === "function" ? _ref : Object])
31
- ], InterfereExceptionFilter);
32
- //#endregion
33
- export { InterfereExceptionFilter };
1
+ import{__decorateMetadata}from"./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateMetadata.mjs";import{__decorateParam}from"./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorateParam.mjs";import{__decorate}from"./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorate.mjs";import{captureError}from"@interfere/node";import{Catch,HttpException,Inject,Optional}from"@nestjs/common";import{BaseExceptionFilter,HttpAdapterHost}from"@nestjs/core";var _ref;let InterfereExceptionFilter=class extends BaseExceptionFilter{constructor(adapterHost){super(adapterHost?.httpAdapter)}catch(exception,host){this.shouldReport(exception)&&captureError(exception,this.extractRequest(host)),super.catch(exception,host)}shouldReport(exception){return exception instanceof HttpException?exception.getStatus()>=500:!0}extractRequest(host){if(host.getType()===`http`)return host.switchToHttp().getRequest()}};InterfereExceptionFilter=__decorate([Catch(),__decorateParam(0,Optional()),__decorateParam(0,Inject(HttpAdapterHost)),__decorateMetadata(`design:paramtypes`,[typeof(_ref=HttpAdapterHost!==void 0&&HttpAdapterHost)==`function`?_ref:Object])],InterfereExceptionFilter);export{InterfereExceptionFilter};
2
+ //# sourceMappingURL=exception-filter.mjs.map
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_exception_filter=require("./exception-filter.cjs"),require_init=require("./init.cjs"),require_module=require("./module.cjs");let _interfere_node=require("@interfere/node");Object.defineProperty(exports,"InterfereExceptionFilter",{enumerable:!0,get:function(){return require_exception_filter.InterfereExceptionFilter}}),Object.defineProperty(exports,"InterfereModule",{enumerable:!0,get:function(){return require_module.InterfereModule}}),Object.defineProperty(exports,"captureError",{enumerable:!0,get:function(){return _interfere_node.captureError}}),Object.defineProperty(exports,"captureMessage",{enumerable:!0,get:function(){return _interfere_node.captureMessage}}),Object.defineProperty(exports,"close",{enumerable:!0,get:function(){return _interfere_node.close}}),Object.defineProperty(exports,"flush",{enumerable:!0,get:function(){return _interfere_node.flush}}),exports.init=require_init.init,Object.defineProperty(exports,"withSpan",{enumerable:!0,get:function(){return _interfere_node.withSpan}});
@@ -0,0 +1,5 @@
1
+ import { InterfereExceptionFilter } from "./exception-filter.cjs";
2
+ import { InitOptions, init } from "./init.cjs";
3
+ import { InterfereModule } from "./module.cjs";
4
+ import { CaptureErrorContext, captureError, captureMessage, close, flush, withSpan } from "@interfere/node";
5
+ export { type CaptureErrorContext, type InitOptions, InterfereExceptionFilter, InterfereModule, captureError, captureMessage, close, flush, init, withSpan };
package/dist/index.mjs CHANGED
@@ -1,5 +1 @@
1
- import { InterfereExceptionFilter } from "./exception-filter.mjs";
2
- import { init } from "./init.mjs";
3
- import { InterfereModule } from "./module.mjs";
4
- import { captureError, captureMessage, close, flush, withSpan } from "@interfere/node";
5
- export { InterfereExceptionFilter, InterfereModule, captureError, captureMessage, close, flush, init, withSpan };
1
+ import{InterfereExceptionFilter}from"./exception-filter.mjs";import{init}from"./init.mjs";import{InterfereModule}from"./module.mjs";import{captureError,captureMessage,close,flush,withSpan}from"@interfere/node";export{InterfereExceptionFilter,InterfereModule,captureError,captureMessage,close,flush,init,withSpan};
package/dist/init.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_package=require("./package.cjs");let _interfere_node=require("@interfere/node"),_opentelemetry_instrumentation=require("@opentelemetry/instrumentation"),_opentelemetry_instrumentation_nestjs_core=require("@opentelemetry/instrumentation-nestjs-core"),instrumented=!1;function init(options={}){instrumented||=((0,_opentelemetry_instrumentation.registerInstrumentations)({instrumentations:[new _opentelemetry_instrumentation_nestjs_core.NestInstrumentation]}),!0),(0,_interfere_node.init)(options),options.debug&&console.log(`[interfere] ${require_package.name}@${require_package.version} initialized`)}exports.init=init;
@@ -0,0 +1,22 @@
1
+ import { InitOptions as InitOptions$1 } from "@interfere/node";
2
+
3
+ //#region src/init.d.ts
4
+ interface InitOptions extends InitOptions$1 {
5
+ /**
6
+ * Log a one-line confirmation to `stdout` on successful init.
7
+ * Useful during integration to verify the SDK is wired up.
8
+ * Default `false`.
9
+ */
10
+ readonly debug?: boolean;
11
+ }
12
+ /**
13
+ * Bootstraps `@interfere/node` and registers
14
+ * `@opentelemetry/instrumentation-nestjs-core` for auto-spans across
15
+ * controllers, guards, pipes, interceptors, and middleware. Must run
16
+ * before `@nestjs/core` is imported — see the README for the
17
+ * `instrument.ts` pattern.
18
+ */
19
+ declare function init(options?: InitOptions): void;
20
+ //#endregion
21
+ export { InitOptions, init };
22
+ //# sourceMappingURL=init.d.cts.map
package/dist/init.d.mts CHANGED
@@ -1,6 +1,14 @@
1
- import { InitOptions, InitOptions as InitOptions$1 } from "@interfere/node";
1
+ import { InitOptions as InitOptions$1 } from "@interfere/node";
2
2
 
3
3
  //#region src/init.d.ts
4
+ interface InitOptions extends InitOptions$1 {
5
+ /**
6
+ * Log a one-line confirmation to `stdout` on successful init.
7
+ * Useful during integration to verify the SDK is wired up.
8
+ * Default `false`.
9
+ */
10
+ readonly debug?: boolean;
11
+ }
4
12
  /**
5
13
  * Bootstraps `@interfere/node` and registers
6
14
  * `@opentelemetry/instrumentation-nestjs-core` for auto-spans across
@@ -8,6 +16,7 @@ import { InitOptions, InitOptions as InitOptions$1 } from "@interfere/node";
8
16
  * before `@nestjs/core` is imported — see the README for the
9
17
  * `instrument.ts` pattern.
10
18
  */
11
- declare function init(options?: InitOptions$1): Promise<void>;
19
+ declare function init(options?: InitOptions): void;
12
20
  //#endregion
13
- export { type InitOptions, init };
21
+ export { InitOptions, init };
22
+ //# sourceMappingURL=init.d.mts.map
package/dist/init.mjs CHANGED
@@ -1,21 +1,2 @@
1
- import { init as init$1 } from "@interfere/node";
2
- import { registerInstrumentations } from "@opentelemetry/instrumentation";
3
- import { NestInstrumentation } from "@opentelemetry/instrumentation-nestjs-core";
4
- //#region src/init.ts
5
- let instrumented = false;
6
- /**
7
- * Bootstraps `@interfere/node` and registers
8
- * `@opentelemetry/instrumentation-nestjs-core` for auto-spans across
9
- * controllers, guards, pipes, interceptors, and middleware. Must run
10
- * before `@nestjs/core` is imported — see the README for the
11
- * `instrument.ts` pattern.
12
- */
13
- async function init(options = {}) {
14
- if (!instrumented) {
15
- registerInstrumentations({ instrumentations: [new NestInstrumentation()] });
16
- instrumented = true;
17
- }
18
- await init$1(options);
19
- }
20
- //#endregion
21
- export { init };
1
+ import{name,version}from"./package.mjs";import{init as init$1}from"@interfere/node";import{registerInstrumentations}from"@opentelemetry/instrumentation";import{NestInstrumentation}from"@opentelemetry/instrumentation-nestjs-core";let instrumented=!1;function init(options={}){instrumented||=(registerInstrumentations({instrumentations:[new NestInstrumentation]}),!0),init$1(options),options.debug&&console.log(`[interfere] ${name}@${version} initialized`)}export{init};
2
+ //# sourceMappingURL=init.mjs.map
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_decorate=require("./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorate.cjs"),require_exception_filter=require("./exception-filter.cjs");let _nestjs_common=require("@nestjs/common"),_nestjs_core=require("@nestjs/core");var _InterfereModule;let InterfereModule=_InterfereModule=class{static forRoot(){return{module:_InterfereModule,providers:[{provide:_nestjs_core.APP_FILTER,useClass:require_exception_filter.InterfereExceptionFilter}]}}};InterfereModule=_InterfereModule=require_decorate.__decorate([(0,_nestjs_common.Module)({})],InterfereModule),Object.defineProperty(exports,"InterfereModule",{enumerable:!0,get:function(){return InterfereModule}});
@@ -0,0 +1,14 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+
3
+ //#region src/module.d.ts
4
+ /**
5
+ * Registers `InterfereExceptionFilter` as a global filter via
6
+ * `APP_FILTER`. Import once at the app root: `imports:
7
+ * [InterfereModule.forRoot()]`.
8
+ */
9
+ declare class InterfereModule {
10
+ static forRoot(): DynamicModule;
11
+ }
12
+ //#endregion
13
+ export { InterfereModule };
14
+ //# sourceMappingURL=module.d.cts.map
package/dist/module.d.mts CHANGED
@@ -10,4 +10,5 @@ declare class InterfereModule {
10
10
  static forRoot(): DynamicModule;
11
11
  }
12
12
  //#endregion
13
- export { InterfereModule };
13
+ export { InterfereModule };
14
+ //# sourceMappingURL=module.d.mts.map
package/dist/module.mjs CHANGED
@@ -1,20 +1,2 @@
1
- import { __decorate } from "./_virtual/_@oxc-project_runtime@0.129.0/helpers/decorate.mjs";
2
- import { InterfereExceptionFilter } from "./exception-filter.mjs";
3
- import { Module } from "@nestjs/common";
4
- import { APP_FILTER } from "@nestjs/core";
5
- //#region src/module.ts
6
- var _InterfereModule;
7
- let InterfereModule = _InterfereModule = class InterfereModule {
8
- static forRoot() {
9
- return {
10
- module: _InterfereModule,
11
- providers: [{
12
- provide: APP_FILTER,
13
- useClass: InterfereExceptionFilter
14
- }]
15
- };
16
- }
17
- };
18
- InterfereModule = _InterfereModule = __decorate([Module({})], InterfereModule);
19
- //#endregion
20
- export { InterfereModule };
1
+ import{__decorate}from"./_virtual/_@oxc-project_runtime@0.132.0/helpers/decorate.mjs";import{InterfereExceptionFilter}from"./exception-filter.mjs";import{Module}from"@nestjs/common";import{APP_FILTER}from"@nestjs/core";var _InterfereModule;let InterfereModule=_InterfereModule=class{static forRoot(){return{module:_InterfereModule,providers:[{provide:APP_FILTER,useClass:InterfereExceptionFilter}]}}};InterfereModule=_InterfereModule=__decorate([Module({})],InterfereModule);export{InterfereModule};
2
+ //# sourceMappingURL=module.mjs.map
@@ -0,0 +1 @@
1
+ var name=`@interfere/nest`,version=`0.0.1-canary.2`;Object.defineProperty(exports,"name",{enumerable:!0,get:function(){return name}}),Object.defineProperty(exports,"version",{enumerable:!0,get:function(){return version}});
@@ -0,0 +1,2 @@
1
+ var name=`@interfere/nest`,version=`0.0.1-canary.2`;export{name,version};
2
+ //# sourceMappingURL=package.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interfere/nest",
3
- "version": "0.0.1-canary.0",
3
+ "version": "0.0.1-canary.2",
4
4
  "license": "MIT",
5
5
  "description": "NestJS SDK for Interfere. Auto-captures uncaught exceptions from controllers, providers, and middleware via a global ExceptionFilter, plus re-exports the @interfere/node OTel instrumentation.",
6
6
  "keywords": [
@@ -22,20 +22,32 @@
22
22
  "directory": "src/packages/public/nest"
23
23
  },
24
24
  "files": [
25
- "dist"
25
+ "dist/**/*.cjs",
26
+ "dist/**/*.mjs",
27
+ "dist/**/*.d.cts",
28
+ "dist/**/*.d.mts",
29
+ "README.md"
26
30
  ],
27
31
  "type": "module",
32
+ "main": "./dist/index.cjs",
33
+ "module": "./dist/index.mjs",
34
+ "types": "./dist/index.d.cts",
28
35
  "exports": {
29
36
  ".": {
30
- "@source": "./src/index.ts",
31
- "types": "./dist/index.d.mts",
32
- "default": "./dist/index.mjs"
37
+ "monorepo": "./src/index.ts",
38
+ "import": {
39
+ "types": "./dist/index.d.mts",
40
+ "default": "./dist/index.mjs"
41
+ },
42
+ "require": {
43
+ "types": "./dist/index.d.cts",
44
+ "default": "./dist/index.cjs"
45
+ }
33
46
  }
34
47
  },
35
48
  "sideEffects": false,
36
49
  "publishConfig": {
37
- "access": "public",
38
- "tag": "canary"
50
+ "access": "public"
39
51
  },
40
52
  "scripts": {
41
53
  "build": "tsdown",
@@ -43,19 +55,19 @@
43
55
  "typecheck": "tsc --noEmit --incremental"
44
56
  },
45
57
  "dependencies": {
46
- "@interfere/node": "^0.0.1-canary.0",
47
- "@opentelemetry/instrumentation": "^0.217.0",
48
- "@opentelemetry/instrumentation-nestjs-core": "^0.63.0"
58
+ "@interfere/node": "^0.0.1-canary.2",
59
+ "@opentelemetry/instrumentation": "^0.218.0",
60
+ "@opentelemetry/instrumentation-nestjs-core": "^0.64.0"
49
61
  },
50
62
  "peerDependencies": {
51
- "@nestjs/common": "^10 || ^11",
52
- "@nestjs/core": "^10 || ^11"
63
+ "@nestjs/common": "^10.0.0 || ^11.0.0",
64
+ "@nestjs/core": "^10.0.0 || ^11.0.0"
53
65
  },
54
66
  "devDependencies": {
55
67
  "@interfere/test-utils": "^9.0.0",
56
68
  "@interfere/typescript-config": "^9.0.0",
57
- "@nestjs/common": "^11",
58
- "@nestjs/core": "^11",
69
+ "@nestjs/common": "^10.0.0 || ^11.0.0",
70
+ "@nestjs/core": "^10.0.0 || ^11.0.0",
59
71
  "@types/node": "^24.12.0",
60
72
  "@vitest/coverage-v8": "^4.1.6",
61
73
  "reflect-metadata": "^0.2",
@@ -1,9 +0,0 @@
1
- //#region \0@oxc-project+runtime@0.129.0/helpers/decorate.js
2
- function __decorate(decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- }
8
- //#endregion
9
- export { __decorate };
@@ -1,6 +0,0 @@
1
- //#region \0@oxc-project+runtime@0.129.0/helpers/decorateMetadata.js
2
- function __decorateMetadata(k, v) {
3
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4
- }
5
- //#endregion
6
- export { __decorateMetadata };
@@ -1,8 +0,0 @@
1
- //#region \0@oxc-project+runtime@0.129.0/helpers/decorateParam.js
2
- function __decorateParam(paramIndex, decorator) {
3
- return function(target, key) {
4
- decorator(target, key, paramIndex);
5
- };
6
- }
7
- //#endregion
8
- export { __decorateParam };
@@ -1 +0,0 @@
1
- {"version":3,"file":"exception-filter.d.mts","names":[],"sources":["../src/exception-filter.ts"],"mappings":";;;;;;AAkBA;;;;cACa,wBAAA,SACH,mBAAA,YACG,eAAA;cAG4B,WAAA,GAAc,eAAA;EAK5C,KAAA,CAAM,SAAA,WAAoB,IAAA,EAAM,aAAA;EAAA,QAOjC,YAAA;EAAA,QAOA,cAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"exception-filter.mjs","names":[],"sources":["../src/exception-filter.ts"],"sourcesContent":["import { captureError } from \"@interfere/node\";\n\nimport {\n type ArgumentsHost,\n Catch,\n type ExceptionFilter,\n HttpException,\n Inject,\n Optional,\n} from \"@nestjs/common\";\nimport { BaseExceptionFilter, HttpAdapterHost } from \"@nestjs/core\";\n\n/**\n * Forwards uncaught exceptions to Interfere, then delegates to Nest's\n * default response shaping. Skips `HttpException` with status 4xx —\n * client-fault errors are framework-handled and shouldn't bill against\n * crash dashboards.\n */\n@Catch()\nexport class InterfereExceptionFilter\n extends BaseExceptionFilter\n implements ExceptionFilter\n{\n constructor(\n @Optional() @Inject(HttpAdapterHost) adapterHost?: HttpAdapterHost\n ) {\n super(adapterHost?.httpAdapter);\n }\n\n override catch(exception: unknown, host: ArgumentsHost): void {\n if (this.shouldReport(exception)) {\n captureError(exception, this.extractRequest(host));\n }\n super.catch(exception, host);\n }\n\n private shouldReport(exception: unknown): boolean {\n if (exception instanceof HttpException) {\n return exception.getStatus() >= 500;\n }\n return true;\n }\n\n private extractRequest(host: ArgumentsHost): unknown {\n if (host.getType() !== \"http\") {\n return;\n }\n return host.switchToHttp().getRequest();\n }\n}\n"],"mappings":";;;;;;;;AAmBO,IAAA,2BAAA,MAAM,iCACH,oBAEV;CACE,YACE,aACA;EACA,MAAM,aAAa,YAAY;;CAGjC,MAAe,WAAoB,MAA2B;EAC5D,IAAI,KAAK,aAAa,UAAU,EAC9B,aAAa,WAAW,KAAK,eAAe,KAAK,CAAC;EAEpD,MAAM,MAAM,WAAW,KAAK;;CAG9B,aAAqB,WAA6B;EAChD,IAAI,qBAAqB,eACvB,OAAO,UAAU,WAAW,IAAI;EAElC,OAAO;;CAGT,eAAuB,MAA8B;EACnD,IAAI,KAAK,SAAS,KAAK,QACrB;EAEF,OAAO,KAAK,cAAc,CAAC,YAAY;;;;CA7B1C,OAAO;oBAMH,UAAU,CAAA;oBAAE,OAAO,gBAAgB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.mts","names":[],"sources":["../src/init.ts"],"mappings":";;;;;AAcA;;;;;iBAAsB,IAAA,CAAK,OAAA,GAAS,aAAA,GAAmB,OAAA"}
package/dist/init.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.mjs","names":["nodeInit"],"sources":["../src/init.ts"],"sourcesContent":["import { type InitOptions, init as nodeInit } from \"@interfere/node\";\n\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\nimport { NestInstrumentation } from \"@opentelemetry/instrumentation-nestjs-core\";\n\nlet instrumented = false;\n\n/**\n * Bootstraps `@interfere/node` and registers\n * `@opentelemetry/instrumentation-nestjs-core` for auto-spans across\n * controllers, guards, pipes, interceptors, and middleware. Must run\n * before `@nestjs/core` is imported — see the README for the\n * `instrument.ts` pattern.\n */\nexport async function init(options: InitOptions = {}): Promise<void> {\n if (!instrumented) {\n registerInstrumentations({\n instrumentations: [new NestInstrumentation()],\n });\n instrumented = true;\n }\n await nodeInit(options);\n}\n\nexport type { InitOptions } from \"@interfere/node\";\n"],"mappings":";;;;AAKA,IAAI,eAAe;;;;;;;;AASnB,eAAsB,KAAK,UAAuB,EAAE,EAAiB;CACnE,IAAI,CAAC,cAAc;EACjB,yBAAyB,EACvB,kBAAkB,CAAC,IAAI,qBAAqB,CAAC,EAC9C,CAAC;EACF,eAAe;;CAEjB,MAAMA,OAAS,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.d.mts","names":[],"sources":["../src/module.ts"],"mappings":";;;;;AAUA;;;cACa,eAAA;EAAA,OACJ,OAAA,CAAA,GAAW,aAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.mjs","names":[],"sources":["../src/module.ts"],"sourcesContent":["import { type DynamicModule, Module } from \"@nestjs/common\";\nimport { APP_FILTER } from \"@nestjs/core\";\n\nimport { InterfereExceptionFilter } from \"./exception-filter.js\";\n\n/**\n * Registers `InterfereExceptionFilter` as a global filter via\n * `APP_FILTER`. Import once at the app root: `imports:\n * [InterfereModule.forRoot()]`.\n */\n@Module({})\nexport class InterfereModule {\n static forRoot(): DynamicModule {\n return {\n module: InterfereModule,\n providers: [\n {\n provide: APP_FILTER,\n useClass: InterfereExceptionFilter,\n },\n ],\n };\n }\n}\n"],"mappings":";;;;;;AAWO,IAAA,kBAAA,mBAAA,MAAM,gBAAgB;CAC3B,OAAO,UAAyB;EAC9B,OAAO;GACL,QAAA;GACA,WAAW,CACT;IACE,SAAS;IACT,UAAU;IACX,CACF;GACF;;;iDAXJ,OAAO,EAAE,CAAC,CAAA,EAAA,gBAAA"}