@tsdevstack/nest-common 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/auth/auth-user.interface.d.ts +62 -0
  4. package/dist/auth/auth.guard.d.ts +181 -0
  5. package/dist/auth/auth.guard.test.d.ts +1 -0
  6. package/dist/auth/auth.module.d.ts +45 -0
  7. package/dist/auth/index.d.ts +17 -0
  8. package/dist/auth/partner-api.decorator.d.ts +42 -0
  9. package/dist/auth/partner.decorator.d.ts +60 -0
  10. package/dist/auth/partner.decorator.test.d.ts +1 -0
  11. package/dist/auth/public.decorator.d.ts +42 -0
  12. package/dist/auth/public.decorator.test.d.ts +1 -0
  13. package/dist/auth/utils/extract-user-from-headers.d.ts +45 -0
  14. package/dist/auth/utils/extract-user-from-headers.test.d.ts +1 -0
  15. package/dist/auth/utils/index.d.ts +8 -0
  16. package/dist/auth/utils/parse-header-value.d.ts +40 -0
  17. package/dist/auth/utils/parse-header-value.test.d.ts +1 -0
  18. package/dist/auth/utils/to-camel-case.d.ts +18 -0
  19. package/dist/auth/utils/to-camel-case.test.d.ts +1 -0
  20. package/dist/bootstrap/create-app.d.ts +31 -0
  21. package/dist/bootstrap/create-app.test.d.ts +1 -0
  22. package/dist/bootstrap/start-worker.d.ts +24 -0
  23. package/dist/bootstrap/start-worker.test.d.ts +1 -0
  24. package/dist/bull/bull-config.module.d.ts +22 -0
  25. package/dist/bull/bull-config.module.test.d.ts +1 -0
  26. package/dist/bull/index.d.ts +1 -0
  27. package/dist/config/load-framework-config.d.ts +32 -0
  28. package/dist/config/load-framework-config.test.d.ts +1 -0
  29. package/dist/database/prisma-connection.d.ts +48 -0
  30. package/dist/database/prisma-connection.test.d.ts +1 -0
  31. package/dist/email-rate-limit/email-rate-limit.decorator.d.ts +8 -0
  32. package/dist/email-rate-limit/email-rate-limit.decorator.test.d.ts +1 -0
  33. package/dist/email-rate-limit/email-rate-limit.guard.d.ts +11 -0
  34. package/dist/email-rate-limit/email-rate-limit.guard.test.d.ts +1 -0
  35. package/dist/email-rate-limit/email-rate-limit.module.d.ts +2 -0
  36. package/dist/health/health.controller.d.ts +11 -0
  37. package/dist/health/health.controller.test.d.ts +1 -0
  38. package/dist/health/health.interface.d.ts +31 -0
  39. package/dist/health/health.module.d.ts +5 -0
  40. package/dist/health/health.service.d.ts +12 -0
  41. package/dist/health/health.service.test.d.ts +1 -0
  42. package/dist/health/index.d.ts +6 -0
  43. package/dist/health/indicators/memory.indicator.d.ts +7 -0
  44. package/dist/health/indicators/memory.indicator.test.d.ts +1 -0
  45. package/dist/health/indicators/redis.indicator.d.ts +7 -0
  46. package/dist/health/indicators/redis.indicator.test.d.ts +1 -0
  47. package/dist/index.d.ts +40 -0
  48. package/dist/index.js +9 -0
  49. package/dist/index.mjs +9 -0
  50. package/dist/logging/index.d.ts +6 -0
  51. package/dist/logging/logger.interface.d.ts +29 -0
  52. package/dist/logging/logger.module.d.ts +14 -0
  53. package/dist/logging/logger.service.d.ts +31 -0
  54. package/dist/logging/logger.service.test.d.ts +1 -0
  55. package/dist/logging/logging.interceptor.d.ts +8 -0
  56. package/dist/logging/logging.interceptor.test.d.ts +1 -0
  57. package/dist/metrics/index.d.ts +5 -0
  58. package/dist/metrics/metrics.controller.d.ts +7 -0
  59. package/dist/metrics/metrics.controller.test.d.ts +1 -0
  60. package/dist/metrics/metrics.interceptor.d.ts +9 -0
  61. package/dist/metrics/metrics.interceptor.test.d.ts +1 -0
  62. package/dist/metrics/metrics.interface.d.ts +17 -0
  63. package/dist/metrics/metrics.module.d.ts +5 -0
  64. package/dist/metrics/metrics.service.d.ts +79 -0
  65. package/dist/metrics/metrics.service.test.d.ts +1 -0
  66. package/dist/notifications/index.d.ts +15 -0
  67. package/dist/notifications/interfaces/email-options.interface.d.ts +23 -0
  68. package/dist/notifications/interfaces/index.d.ts +6 -0
  69. package/dist/notifications/interfaces/push-options.interface.d.ts +16 -0
  70. package/dist/notifications/interfaces/sms-options.interface.d.ts +12 -0
  71. package/dist/notifications/notification.module.d.ts +2 -0
  72. package/dist/notifications/notification.module.test.d.ts +1 -0
  73. package/dist/notifications/notification.service.d.ts +28 -0
  74. package/dist/notifications/notification.service.test.d.ts +1 -0
  75. package/dist/notifications/providers/email/console.provider.d.ts +9 -0
  76. package/dist/notifications/providers/email/console.provider.test.d.ts +1 -0
  77. package/dist/notifications/providers/email/resend.provider.d.ts +24 -0
  78. package/dist/notifications/providers/email/resend.provider.test.d.ts +1 -0
  79. package/dist/notifications/providers/email-provider.interface.d.ts +17 -0
  80. package/dist/observability/index.d.ts +2 -0
  81. package/dist/observability/observability.interface.d.ts +32 -0
  82. package/dist/observability/observability.module.d.ts +24 -0
  83. package/dist/observability/observability.module.test.d.ts +1 -0
  84. package/dist/open-api-docs/create-swagger-document.d.ts +10 -0
  85. package/dist/open-api-docs/create-swagger-document.test.d.ts +1 -0
  86. package/dist/open-api-docs/generate-swagger-docs.d.ts +12 -0
  87. package/dist/open-api-docs/generate-swagger-docs.test.d.ts +1 -0
  88. package/dist/rate-limit/rate-limit-headers.interceptor.d.ts +5 -0
  89. package/dist/rate-limit/rate-limit-headers.interceptor.test.d.ts +1 -0
  90. package/dist/rate-limit/rate-limit.decorator.d.ts +11 -0
  91. package/dist/rate-limit/rate-limit.decorator.test.d.ts +1 -0
  92. package/dist/rate-limit/rate-limit.guard.d.ts +13 -0
  93. package/dist/rate-limit/rate-limit.guard.test.d.ts +1 -0
  94. package/dist/rate-limit/rate-limit.module.d.ts +2 -0
  95. package/dist/redis/redis.module.d.ts +2 -0
  96. package/dist/redis/redis.service.d.ts +17 -0
  97. package/dist/redis/redis.service.test.d.ts +1 -0
  98. package/dist/scheduler/index.d.ts +1 -0
  99. package/dist/scheduler/scheduler.guard.d.ts +73 -0
  100. package/dist/scheduler/scheduler.guard.test.d.ts +1 -0
  101. package/dist/secrets/index.d.ts +10 -0
  102. package/dist/secrets/providers/aws.provider.d.ts +56 -0
  103. package/dist/secrets/providers/aws.provider.test.d.ts +1 -0
  104. package/dist/secrets/providers/azure.provider.d.ts +70 -0
  105. package/dist/secrets/providers/azure.provider.test.d.ts +1 -0
  106. package/dist/secrets/providers/cloud-provider-adapter.d.ts +50 -0
  107. package/dist/secrets/providers/cloud-provider-adapter.test.d.ts +1 -0
  108. package/dist/secrets/providers/cloud-provider.interface.d.ts +86 -0
  109. package/dist/secrets/providers/gcp.provider.d.ts +64 -0
  110. package/dist/secrets/providers/gcp.provider.test.d.ts +1 -0
  111. package/dist/secrets/providers/local.provider.d.ts +82 -0
  112. package/dist/secrets/providers/local.provider.test.d.ts +1 -0
  113. package/dist/secrets/providers/provider-factory.d.ts +39 -0
  114. package/dist/secrets/providers/provider-factory.test.d.ts +1 -0
  115. package/dist/secrets/secrets.interface.d.ts +93 -0
  116. package/dist/secrets/secrets.module.d.ts +24 -0
  117. package/dist/secrets/secrets.service.d.ts +70 -0
  118. package/dist/secrets/secrets.service.test.d.ts +1 -0
  119. package/dist/service-client/base-service-client.d.ts +113 -0
  120. package/dist/service-client/base-service-client.test.d.ts +1 -0
  121. package/dist/service-client/filter-forward-headers.d.ts +11 -0
  122. package/dist/service-client/filter-forward-headers.test.d.ts +1 -0
  123. package/dist/telemetry/index.d.ts +4 -0
  124. package/dist/telemetry/telemetry.interface.d.ts +33 -0
  125. package/dist/telemetry/telemetry.module.d.ts +5 -0
  126. package/dist/telemetry/telemetry.service.d.ts +39 -0
  127. package/dist/telemetry/telemetry.service.test.d.ts +1 -0
  128. package/dist/telemetry/tracing.interceptor.d.ts +11 -0
  129. package/dist/telemetry/tracing.interceptor.test.d.ts +1 -0
  130. package/dist/utils/package-json.d.ts +25 -0
  131. package/package.json +102 -0
@@ -0,0 +1,33 @@
1
+ export interface TelemetryModuleOptions {
2
+ /**
3
+ * Service name for identification in telemetry
4
+ * Default: SERVICE_NAME env var
5
+ */
6
+ serviceName?: string;
7
+ /**
8
+ * Service version
9
+ * Default: '1.0.0'
10
+ */
11
+ serviceVersion?: string;
12
+ /**
13
+ * Enable metrics collection
14
+ * Default: true
15
+ */
16
+ metrics?: boolean;
17
+ /**
18
+ * Enable tracing
19
+ * Default: true
20
+ */
21
+ tracing?: boolean;
22
+ /**
23
+ * OTLP base endpoint (Jaeger, OTEL Collector, etc.)
24
+ * The /v1/traces path is appended automatically.
25
+ * Default: OTEL_EXPORTER_OTLP_ENDPOINT env var or 'http://localhost:4318'
26
+ */
27
+ tracingEndpoint?: string;
28
+ /**
29
+ * Port for Prometheus metrics endpoint (handled by OTEL exporter)
30
+ * Default: uses existing /metrics controller
31
+ */
32
+ prometheusPort?: number;
33
+ }
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import type { TelemetryModuleOptions } from './telemetry.interface';
3
+ export declare class TelemetryModule {
4
+ static forRoot(options?: TelemetryModuleOptions): DynamicModule;
5
+ }
@@ -0,0 +1,39 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
3
+ import { type Meter, type Tracer } from '@opentelemetry/api';
4
+ import type { TelemetryModuleOptions } from './telemetry.interface';
5
+ export declare class TelemetryService implements OnModuleInit, OnModuleDestroy {
6
+ private meterProvider;
7
+ private prometheusExporter;
8
+ private tracerProvider;
9
+ private readonly serviceName;
10
+ private readonly serviceVersion;
11
+ private readonly metricsEnabled;
12
+ private readonly tracingEnabled;
13
+ private readonly tracingEndpoint;
14
+ constructor(options: TelemetryModuleOptions);
15
+ onModuleInit(): void;
16
+ private initializeMetrics;
17
+ private initializeTracing;
18
+ onModuleDestroy(): Promise<void>;
19
+ /**
20
+ * Get a meter for creating metrics
21
+ */
22
+ getMeter(name?: string): Meter;
23
+ /**
24
+ * Get a tracer for creating spans
25
+ */
26
+ getTracer(name?: string): Tracer;
27
+ /**
28
+ * Get the service name
29
+ */
30
+ getServiceName(): string;
31
+ /**
32
+ * Check if tracing is enabled
33
+ */
34
+ isTracingEnabled(): boolean;
35
+ /**
36
+ * Get the Prometheus exporter for custom handling
37
+ */
38
+ getPrometheusExporter(): PrometheusExporter | null;
39
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { TelemetryService } from './telemetry.service';
4
+ export declare class TracingInterceptor implements NestInterceptor {
5
+ private readonly telemetryService;
6
+ constructor(telemetryService: TelemetryService);
7
+ intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
8
+ private isInfrastructureEndpoint;
9
+ private finishSpan;
10
+ private finishSpanWithError;
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ export interface PackageJson {
2
+ name: string;
3
+ version?: string;
4
+ description?: string;
5
+ author?: string | {
6
+ name: string;
7
+ };
8
+ }
9
+ /**
10
+ * Read package.json from current working directory
11
+ * Used by runtime code to get service metadata
12
+ *
13
+ * Note: This function does NOT validate the service name.
14
+ * Validation happens at dev/build time via CLI.
15
+ */
16
+ export declare function readPackageJson(): PackageJson;
17
+ /**
18
+ * Extract author name from package.json author field
19
+ */
20
+ export declare function extractAuthor(packageJson: PackageJson): string;
21
+ /**
22
+ * Convert service name to title case
23
+ * Example: "auth-service" -> "Auth Service"
24
+ */
25
+ export declare function titleCase(str: string): string;
package/package.json ADDED
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "@tsdevstack/nest-common",
3
+ "version": "0.1.4",
4
+ "description": "Shared NestJS modules for tsdevstack microservices — auth, rate limiting, secrets, observability, and more",
5
+ "type": "commonjs",
6
+ "author": "tsdevstack",
7
+ "private": false,
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/tsdevstack/nest-common.git"
12
+ },
13
+ "homepage": "https://github.com/tsdevstack/nest-common",
14
+ "bugs": {
15
+ "url": "https://github.com/tsdevstack/nest-common/issues"
16
+ },
17
+ "keywords": [
18
+ "tsdevstack",
19
+ "nestjs",
20
+ "microservices",
21
+ "auth",
22
+ "rate-limiting",
23
+ "secrets-management",
24
+ "observability",
25
+ "opentelemetry",
26
+ "prisma",
27
+ "redis"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18.0.0"
31
+ },
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.mjs",
36
+ "require": "./dist/index.js"
37
+ }
38
+ },
39
+ "main": "./dist/index.js",
40
+ "types": "./dist/index.d.ts",
41
+ "files": [
42
+ "dist"
43
+ ],
44
+ "scripts": {
45
+ "build": "rslib build",
46
+ "dev": "tsc --noEmit --watch",
47
+ "format": "prettier --write .",
48
+ "lint": "eslint .",
49
+ "test": "rstest run",
50
+ "tsc": "tsc --noEmit"
51
+ },
52
+ "dependencies": {
53
+ "@aws-sdk/client-secrets-manager": "^3.984.0",
54
+ "@azure/identity": "^4.13.0",
55
+ "@azure/keyvault-secrets": "^4.10.0",
56
+ "@google-cloud/secret-manager": "^6.1.1",
57
+ "@nestjs/bullmq": "^11.0.0",
58
+ "@nestjs/common": "^11.0.1",
59
+ "@nestjs/config": "^4.0.0",
60
+ "@nestjs/core": "^11.0.1",
61
+ "@nestjs/jwt": "^11.0.0",
62
+ "@nestjs/swagger": "11.2.0",
63
+ "@opentelemetry/api": "^1.9.0",
64
+ "@opentelemetry/exporter-prometheus": "^0.57.2",
65
+ "@opentelemetry/exporter-trace-otlp-http": "^0.57.2",
66
+ "@opentelemetry/instrumentation-http": "^0.57.2",
67
+ "@opentelemetry/resources": "^1.30.1",
68
+ "@opentelemetry/sdk-metrics": "^1.30.1",
69
+ "@opentelemetry/sdk-node": "^0.57.2",
70
+ "@opentelemetry/sdk-trace-node": "^1.30.1",
71
+ "@opentelemetry/semantic-conventions": "^1.38.0",
72
+ "@prisma/adapter-pg": "^7.4.0",
73
+ "@prisma/client": "^7.4.0",
74
+ "bullmq": "^5.0.0",
75
+ "compression": "^1.8.0",
76
+ "dotenv": "^16.0.0",
77
+ "express": "^5.0.0",
78
+ "google-auth-library": "^9.0.0",
79
+ "helmet": "^8.1.0",
80
+ "ioredis": "^5.6.1",
81
+ "pg": "^8.13.1",
82
+ "pino": "^10.1.0",
83
+ "resend": "^6.6.0",
84
+ "rxjs": "^7.8.1"
85
+ },
86
+ "devDependencies": {
87
+ "@eslint/js": "^9.39.0",
88
+ "@rslib/core": "^0.19.6",
89
+ "@rstest/adapter-rslib": "^0.2.0",
90
+ "@rstest/core": "^0.8.5",
91
+ "@types/compression": "^1.8.1",
92
+ "@types/express": "^5.0.0",
93
+ "@types/node": "^24.10.0",
94
+ "@types/pg": "^8.11.11",
95
+ "eslint": "^9.39.0",
96
+ "globals": "^16.4.0",
97
+ "pino-pretty": "^13.1.2",
98
+ "prettier": "^3.6.2",
99
+ "typescript": "^5.9.3",
100
+ "typescript-eslint": "^8.46.2"
101
+ }
102
+ }