@alacard-project/bootstrap-sdk 1.1.7 → 1.1.9

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.
@@ -10,6 +10,7 @@ export interface BootstrapOptions {
10
10
  brokers?: string[];
11
11
  groupId?: string;
12
12
  };
13
+ onCreated?: (app: any) => void | Promise<void>;
13
14
  }
14
15
  export declare class StandardBootstrap {
15
16
  static run(appModule: any, options: BootstrapOptions): Promise<import("@nestjs/common").INestApplication<any>>;
@@ -23,21 +23,47 @@ class StandardBootstrap {
23
23
  const RootModule = {
24
24
  module: class {
25
25
  },
26
- imports: [metrics_sdk_1.StandardMetricsModule, standard_health_module_1.StandardHealthModule, appModule],
26
+ imports: [metrics_sdk_1.StandardMetricsModule, standard_health_module_1.StandardHealthModule.forRoot(), appModule],
27
27
  };
28
+ console.log(`[${options.serviceName}] 🔍 Starting Nest application...`);
28
29
  const app = await core_1.NestFactory.create(RootModule, {
29
30
  bufferLogs: true,
30
31
  });
31
- const remoteLogger = app.get(logging_sdk_1.RemoteLogger);
32
- app.useLogger(remoteLogger);
32
+ console.log(`[${options.serviceName}] ✅ Nest application created.`);
33
+ if (options.onCreated) {
34
+ console.log(`[${options.serviceName}] 🔍 Running onCreated hook...`);
35
+ await options.onCreated(app);
36
+ console.log(`[${options.serviceName}] ✅ onCreated hook finished.`);
37
+ }
38
+ let remoteLogger;
39
+ if (options.enableTelemetry !== false) {
40
+ try {
41
+ console.log(`[${options.serviceName}] 🔍 Resolving RemoteLogger...`);
42
+ remoteLogger = app.get(logging_sdk_1.RemoteLogger, { strict: false });
43
+ if (remoteLogger) {
44
+ app.useLogger(remoteLogger);
45
+ console.log(`[${options.serviceName}] ✅ RemoteLogger integrated.`);
46
+ }
47
+ }
48
+ catch (e) {
49
+ console.warn(`[${options.serviceName}] âš ī¸ RemoteLogger not provided by AppModule, falling back to default logger.`);
50
+ }
51
+ }
52
+ else {
53
+ console.log(`[${options.serviceName}] â„šī¸ Telemetry disabled, using default logger.`);
54
+ }
55
+ console.log(`[${options.serviceName}] 🔍 Setting up standard app components...`);
33
56
  (0, shared_1.setupStandardApp)(app, {
34
57
  apiPrefix: options.apiPrefix,
35
58
  remoteLogger,
36
59
  corsOrigins: options.corsOrigins,
37
60
  enableTelemetry: options.enableTelemetry,
38
61
  });
62
+ console.log(`[${options.serviceName}] ✅ Standard app components set up.`);
63
+ let finalGrpcPort = 50051;
39
64
  if (options.grpcPackage) {
40
- const finalGrpcPort = options.grpcPort || 50051;
65
+ const envGrpcPort = process.env.GRPC_PORT ? parseInt(process.env.GRPC_PORT, 10) : undefined;
66
+ finalGrpcPort = envGrpcPort || options.grpcPort || 50051;
41
67
  app.connectMicroservice({
42
68
  transport: microservices_1.Transport.GRPC,
43
69
  options: {
@@ -63,13 +89,13 @@ class StandardBootstrap {
63
89
  if (options.grpcPackage || options.kafka) {
64
90
  await app.startAllMicroservices();
65
91
  }
66
- const finalPort = options.port || 3000;
92
+ const finalPort = process.env.PORT ? parseInt(process.env.PORT, 10) : (options.port || 3000);
67
93
  await app.listen(finalPort, '0.0.0.0');
68
94
  console.log(`🚀 ${options.serviceName} is running on: http://localhost:${finalPort}`);
69
95
  console.log(`📈 Metrics available at: http://localhost:${finalPort}/metrics`);
70
96
  console.log(`đŸĨ Health available at: http://localhost:${finalPort}/health/live`);
71
97
  if (options.grpcPackage) {
72
- console.log(`📊 gRPC is running on: 0.0.0.0:${options.grpcPort || 50051}`);
98
+ console.log(`📊 gRPC is running on: 0.0.0.0:${finalGrpcPort}`);
73
99
  }
74
100
  return app;
75
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.utils.js","sourceRoot":"","sources":["../../src/utils/bootstrap.utils.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAC3C,yDAAuE;AACvE,4DAA2D;AAC3D,8DAA4D;AAC5D,8DAAqE;AACrE,oDAAsF;AACtF,qEAAgE;AAgBhE,MAAa,iBAAiB;IACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAc,EAAE,OAAyB;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;QAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;QACvF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAEpD,IAAA,oBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,yBAAY,CAAC,UAAU,CAAC;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW;YACX,OAAO,EAAE,gBAAgB;YACzB,WAAW;SACd,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG;YACf,MAAM,EAAE;aAAQ;YAChB,OAAO,EAAE,CAAC,mCAAqB,EAAE,6CAAoB,EAAE,SAAS,CAAC;SACpE,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,UAAU,EAAE;YAC7C,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,0BAAY,CAAC,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAE5B,IAAA,yBAAgB,EAAC,GAAU,EAAE;YACzB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY;YACZ,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;SAC3C,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;YAChD,GAAG,CAAC,mBAAmB,CAAsB;gBACzC,SAAS,EAAE,yBAAS,CAAC,IAAI;gBACzB,OAAO,EAAE;oBACL,OAAO,EAAE,OAAO,CAAC,WAAW;oBAC5B,SAAS,EAAE,IAAA,qBAAY,EAAC,OAAO,CAAC,WAAW,CAAC;oBAC5C,GAAG,EAAE,WAAW,aAAa,EAAE;iBAClC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,mBAAmB,CAAsB;gBACzC,SAAS,EAAE,yBAAS,CAAC,KAAK;gBAC1B,OAAO,EAAE;oBACL,MAAM,EAAE;wBACJ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;qBAC5F;oBACD,QAAQ,EAAE;wBACN,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,OAAO,CAAC,WAAW,WAAW;qBACtE;iBACJ;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QACvC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,oCAAoC,SAAS,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,6CAA6C,SAAS,UAAU,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,cAAc,CAAC,CAAC;QAEjF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AA7ED,8CA6EC"}
1
+ {"version":3,"file":"bootstrap.utils.js","sourceRoot":"","sources":["../../src/utils/bootstrap.utils.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAC3C,yDAAuE;AACvE,4DAA2D;AAC3D,8DAA4D;AAC5D,8DAAqE;AACrE,oDAAsF;AACtF,qEAAgE;AAiBhE,MAAa,iBAAiB;IACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAc,EAAE,OAAyB;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;QAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;QACvF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAEpD,IAAA,oBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,yBAAY,CAAC,UAAU,CAAC;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW;YACX,OAAO,EAAE,gBAAgB;YACzB,WAAW;SACd,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG;YACf,MAAM,EAAE;aAAQ;YAChB,OAAO,EAAE,CAAC,mCAAqB,EAAE,6CAAoB,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;SAC9E,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,mCAAmC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,UAAU,EAAE;YAC7C,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,+BAA+B,CAAC,CAAC;QAGpE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,gCAAgC,CAAC,CAAC;YACrE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,8BAA8B,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,YAAY,CAAC;QAEjB,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,gCAAgC,CAAC,CAAC;gBAErE,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,0BAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,IAAI,YAAY,EAAE,CAAC;oBACf,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,8BAA8B,CAAC,CAAC;gBACvE,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,8EAA8E,CAAC,CAAC;YACxH,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,gDAAgD,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,4CAA4C,CAAC,CAAC;QACjF,IAAA,yBAAgB,EAAC,GAAU,EAAE;YACzB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY;YACZ,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;SAC3C,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,qCAAqC,CAAC,CAAC;QAE1E,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,aAAa,GAAG,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;YACzD,GAAG,CAAC,mBAAmB,CAAsB;gBACzC,SAAS,EAAE,yBAAS,CAAC,IAAI;gBACzB,OAAO,EAAE;oBACL,OAAO,EAAE,OAAO,CAAC,WAAW;oBAC5B,SAAS,EAAE,IAAA,qBAAY,EAAC,OAAO,CAAC,WAAW,CAAC;oBAC5C,GAAG,EAAE,WAAW,aAAa,EAAE;iBAClC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,mBAAmB,CAAsB;gBACzC,SAAS,EAAE,yBAAS,CAAC,KAAK;gBAC1B,OAAO,EAAE;oBACL,MAAM,EAAE;wBACJ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;qBAC5F;oBACD,QAAQ,EAAE;wBACN,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,OAAO,CAAC,WAAW,WAAW;qBACtE;iBACJ;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC7F,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,oCAAoC,SAAS,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,6CAA6C,SAAS,UAAU,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,cAAc,CAAC,CAAC;QAEjF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAzGD,8CAyGC"}
@@ -21,7 +21,7 @@ let StandardHealthController = class StandardHealthController {
21
21
  this.health = health;
22
22
  this.memory = memory;
23
23
  this.options = options;
24
- this.heapThreshold = 150 * 1024 * 1024;
24
+ this.heapThreshold = 300 * 1024 * 1024;
25
25
  this.readinessIndicators = [];
26
26
  if (options.indicators) {
27
27
  this.readinessIndicators = options.indicators;
@@ -65,6 +65,8 @@ let StandardHealthModule = StandardHealthModule_1 = class StandardHealthModule {
65
65
  static forRoot(options = {}) {
66
66
  return {
67
67
  module: StandardHealthModule_1,
68
+ imports: [terminus_1.TerminusModule],
69
+ controllers: [StandardHealthController],
68
70
  providers: [
69
71
  {
70
72
  provide: 'HEALTH_MODULE_OPTIONS',
@@ -79,6 +81,12 @@ exports.StandardHealthModule = StandardHealthModule = StandardHealthModule_1 = _
79
81
  (0, common_1.Module)({
80
82
  imports: [terminus_1.TerminusModule],
81
83
  controllers: [StandardHealthController],
84
+ providers: [
85
+ {
86
+ provide: 'HEALTH_MODULE_OPTIONS',
87
+ useValue: {},
88
+ },
89
+ ],
82
90
  exports: [terminus_1.TerminusModule],
83
91
  })
84
92
  ], StandardHealthModule);
@@ -1 +1 @@
1
- {"version":3,"file":"standard-health.module.js","sourceRoot":"","sources":["../../src/utils/standard-health.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAgF;AAChF,+CAAsJ;AAQ/I,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAIjC,YACY,MAA0B,EAC1B,MAA6B,EACJ,OAAoC;QAF7D,WAAM,GAAN,MAAM,CAAoB;QAC1B,WAAM,GAAN,MAAM,CAAuB;QACI,YAAO,GAAP,OAAO,CAAqB;QANjE,kBAAa,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1C,wBAAmB,GAA8B,EAAE,CAAC;QAOxD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC/C,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC9D,GAAG,IAAI,CAAC,mBAAmB;SAC9B,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA/BY,4DAAwB;AAmB3B;IAFL,IAAA,YAAG,EAAC,MAAM,CAAC;IACX,IAAA,sBAAW,GAAE;;;;6DAGb;AAIK;IAFL,IAAA,YAAG,EAAC,OAAO,CAAC;IACZ,IAAA,sBAAW,GAAE;;;;8DAMb;mCA9BQ,wBAAwB;IADpC,IAAA,mBAAU,EAAC,QAAQ,CAAC;IAQZ,WAAA,IAAA,eAAM,EAAC,uBAAuB,CAAC,CAAA;qCAFhB,6BAAkB;QAClB,gCAAqB;GANhC,wBAAwB,CA+BpC;AAOM,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAC7B,MAAM,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC5C,OAAO;YACH,MAAM,EAAE,sBAAoB;YAC5B,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,OAAO;iBACpB;aACJ;SACJ,CAAC;IACN,CAAC;CACJ,CAAA;AAZY,oDAAoB;+BAApB,oBAAoB;IALhC,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,yBAAc,CAAC;QACzB,WAAW,EAAE,CAAC,wBAAwB,CAAC;QACvC,OAAO,EAAE,CAAC,yBAAc,CAAC;KAC5B,CAAC;GACW,oBAAoB,CAYhC"}
1
+ {"version":3,"file":"standard-health.module.js","sourceRoot":"","sources":["../../src/utils/standard-health.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAgF;AAChF,+CAAsJ;AAQ/I,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAIjC,YACY,MAA0B,EAC1B,MAA6B,EACJ,OAAoC;QAF7D,WAAM,GAAN,MAAM,CAAoB;QAC1B,WAAM,GAAN,MAAM,CAAuB;QACI,YAAO,GAAP,OAAO,CAAqB;QANjE,kBAAa,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1C,wBAAmB,GAA8B,EAAE,CAAC;QAOxD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC/C,CAAC;IACL,CAAC;IAIK,AAAN,KAAK,CAAC,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC9D,GAAG,IAAI,CAAC,mBAAmB;SAC9B,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA/BY,4DAAwB;AAmB3B;IAFL,IAAA,YAAG,EAAC,MAAM,CAAC;IACX,IAAA,sBAAW,GAAE;;;;6DAGb;AAIK;IAFL,IAAA,YAAG,EAAC,OAAO,CAAC;IACZ,IAAA,sBAAW,GAAE;;;;8DAMb;mCA9BQ,wBAAwB;IADpC,IAAA,mBAAU,EAAC,QAAQ,CAAC;IAQZ,WAAA,IAAA,eAAM,EAAC,uBAAuB,CAAC,CAAA;qCAFhB,6BAAkB;QAClB,gCAAqB;GANhC,wBAAwB,CA+BpC;AAaM,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAC7B,MAAM,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC5C,OAAO;YACH,MAAM,EAAE,sBAAoB;YAC5B,OAAO,EAAE,CAAC,yBAAc,CAAC;YACzB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,OAAO;iBACpB;aACJ;SACJ,CAAC;IACN,CAAC;CACJ,CAAA;AAdY,oDAAoB;+BAApB,oBAAoB;IAXhC,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,yBAAc,CAAC;QACzB,WAAW,EAAE,CAAC,wBAAwB,CAAC;QACvC,SAAS,EAAE;YACP;gBACI,OAAO,EAAE,uBAAuB;gBAChC,QAAQ,EAAE,EAAE;aACf;SACJ;QACD,OAAO,EAAE,CAAC,yBAAc,CAAC;KAC5B,CAAC;GACW,oBAAoB,CAchC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alacard-project/bootstrap-sdk",
3
- "version": "1.1.7",
3
+ "version": "1.1.9",
4
4
  "engines": {
5
5
  "node": ">=22.0.0"
6
6
  },
@@ -12,10 +12,10 @@
12
12
  "watch": "tsc -w"
13
13
  },
14
14
  "dependencies": {
15
- "@alacard-project/shared": "1.1.7",
16
- "@alacard-project/config-sdk": "1.1.7",
17
- "@alacard-project/logging-sdk": "1.1.7",
18
- "@alacard-project/metrics-sdk": "1.1.7",
15
+ "@alacard-project/shared": "1.1.9",
16
+ "@alacard-project/config-sdk": "1.1.9",
17
+ "@alacard-project/logging-sdk": "1.1.9",
18
+ "@alacard-project/metrics-sdk": "1.1.9",
19
19
  "@nestjs/common": "10.4.15",
20
20
  "@nestjs/core": "10.4.15",
21
21
  "@nestjs/microservices": "10.4.15",
@@ -18,6 +18,7 @@ export interface BootstrapOptions {
18
18
  brokers?: string[];
19
19
  groupId?: string;
20
20
  };
21
+ onCreated?: (app: any) => void | Promise<void>;
21
22
  }
22
23
 
23
24
  export class StandardBootstrap {
@@ -37,25 +38,53 @@ export class StandardBootstrap {
37
38
 
38
39
  const RootModule = {
39
40
  module: class {},
40
- imports: [StandardMetricsModule, StandardHealthModule, appModule],
41
+ imports: [StandardMetricsModule, StandardHealthModule.forRoot(), appModule],
41
42
  };
42
43
 
44
+ console.log(`[${options.serviceName}] 🔍 Starting Nest application...`);
43
45
  const app = await NestFactory.create(RootModule, {
44
46
  bufferLogs: true,
45
47
  });
48
+ console.log(`[${options.serviceName}] ✅ Nest application created.`);
46
49
 
47
- const remoteLogger = app.get(RemoteLogger);
48
- app.useLogger(remoteLogger);
50
+ // Call onCreated hook if provided
51
+ if (options.onCreated) {
52
+ console.log(`[${options.serviceName}] 🔍 Running onCreated hook...`);
53
+ await options.onCreated(app);
54
+ console.log(`[${options.serviceName}] ✅ onCreated hook finished.`);
55
+ }
56
+
57
+ let remoteLogger;
58
+ // 4. Integrate Remote Logging if available (Optional)
59
+ if (options.enableTelemetry !== false) {
60
+ try {
61
+ console.log(`[${options.serviceName}] 🔍 Resolving RemoteLogger...`);
62
+ // Use try-catch and specific check to avoid NestJS resolution errors
63
+ remoteLogger = app.get(RemoteLogger, { strict: false });
64
+ if (remoteLogger) {
65
+ app.useLogger(remoteLogger);
66
+ console.log(`[${options.serviceName}] ✅ RemoteLogger integrated.`);
67
+ }
68
+ } catch (e) {
69
+ console.warn(`[${options.serviceName}] âš ī¸ RemoteLogger not provided by AppModule, falling back to default logger.`);
70
+ }
71
+ } else {
72
+ console.log(`[${options.serviceName}] â„šī¸ Telemetry disabled, using default logger.`);
73
+ }
49
74
 
75
+ console.log(`[${options.serviceName}] 🔍 Setting up standard app components...`);
50
76
  setupStandardApp(app as any, {
51
77
  apiPrefix: options.apiPrefix,
52
78
  remoteLogger,
53
79
  corsOrigins: options.corsOrigins,
54
80
  enableTelemetry: options.enableTelemetry,
55
81
  });
82
+ console.log(`[${options.serviceName}] ✅ Standard app components set up.`);
56
83
 
84
+ let finalGrpcPort = 50051;
57
85
  if (options.grpcPackage) {
58
- const finalGrpcPort = options.grpcPort || 50051;
86
+ const envGrpcPort = process.env.GRPC_PORT ? parseInt(process.env.GRPC_PORT, 10) : undefined;
87
+ finalGrpcPort = envGrpcPort || options.grpcPort || 50051;
59
88
  app.connectMicroservice<MicroserviceOptions>({
60
89
  transport: Transport.GRPC,
61
90
  options: {
@@ -84,7 +113,7 @@ export class StandardBootstrap {
84
113
  await app.startAllMicroservices();
85
114
  }
86
115
 
87
- const finalPort = options.port || 3000;
116
+ const finalPort = process.env.PORT ? parseInt(process.env.PORT, 10) : (options.port || 3000);
88
117
  await app.listen(finalPort, '0.0.0.0');
89
118
 
90
119
  console.log(`🚀 ${options.serviceName} is running on: http://localhost:${finalPort}`);
@@ -92,7 +121,7 @@ export class StandardBootstrap {
92
121
  console.log(`đŸĨ Health available at: http://localhost:${finalPort}/health/live`);
93
122
 
94
123
  if (options.grpcPackage) {
95
- console.log(`📊 gRPC is running on: 0.0.0.0:${options.grpcPort || 50051}`);
124
+ console.log(`📊 gRPC is running on: 0.0.0.0:${finalGrpcPort}`);
96
125
  }
97
126
 
98
127
  return app;
@@ -8,7 +8,7 @@ export interface HealthModuleOptions {
8
8
 
9
9
  @Controller('health')
10
10
  export class StandardHealthController {
11
- private heapThreshold: number = 150 * 1024 * 1024;
11
+ private heapThreshold: number = 300 * 1024 * 1024; // 300 MB
12
12
  private readinessIndicators: HealthIndicatorFunction[] = [];
13
13
 
14
14
  constructor(
@@ -43,12 +43,20 @@ export class StandardHealthController {
43
43
  @Module({
44
44
  imports: [TerminusModule],
45
45
  controllers: [StandardHealthController],
46
+ providers: [
47
+ {
48
+ provide: 'HEALTH_MODULE_OPTIONS',
49
+ useValue: {},
50
+ },
51
+ ],
46
52
  exports: [TerminusModule],
47
53
  })
48
54
  export class StandardHealthModule {
49
55
  static forRoot(options: HealthModuleOptions = {}): DynamicModule {
50
56
  return {
51
57
  module: StandardHealthModule,
58
+ imports: [TerminusModule],
59
+ controllers: [StandardHealthController],
52
60
  providers: [
53
61
  {
54
62
  provide: 'HEALTH_MODULE_OPTIONS',