@lark-apaas/fullstack-nestjs-core 1.1.8-alpha.16 → 1.1.8-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -32,6 +32,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
32
32
  // src/index.ts
33
33
  var index_exports = {};
34
34
  __export(index_exports, {
35
+ AutoTrace: () => import_nestjs_common5.AutoTrace,
35
36
  CsrfMiddleware: () => CsrfMiddleware,
36
37
  CsrfTokenMiddleware: () => CsrfTokenMiddleware,
37
38
  DevToolsModule: () => import_nestjs_openapi_devtools2.DevToolsModule,
@@ -102,7 +103,8 @@ var UserContextMiddleware = class {
102
103
  env: webUser?.env ?? "runtime",
103
104
  userName: webUser?.user_name?.zh_cn ?? "",
104
105
  userNameEn: webUser?.user_name?.en_us ?? "",
105
- userNameI18n: webUser?.user_name ?? {}
106
+ userNameI18n: webUser?.user_name ?? {},
107
+ isSystemAccount: webUser?.is_system_account ?? false
106
108
  };
107
109
  next();
108
110
  }
@@ -170,6 +172,51 @@ CsrfMiddleware = _ts_decorate2([
170
172
  // src/middlewares/view-context/index.ts
171
173
  var import_common3 = require("@nestjs/common");
172
174
  var import_nestjs_common = require("@lark-apaas/nestjs-common");
175
+
176
+ // src/utils/safe-stringify.ts
177
+ function safeEscape(s) {
178
+ return s.replace(/[<>&='"\n\r\u2028\u2029]/g, function(c) {
179
+ switch (c.charCodeAt(0)) {
180
+ case 60:
181
+ return "\\u003c";
182
+ // <
183
+ case 62:
184
+ return "\\u003e";
185
+ // >
186
+ case 38:
187
+ return "\\u0026";
188
+ // &
189
+ case 61:
190
+ return "\\u003d";
191
+ // =
192
+ case 39:
193
+ return "\\u0027";
194
+ // '
195
+ case 34:
196
+ return "\\u0022";
197
+ // "
198
+ case 10:
199
+ return "\\u000a";
200
+ // \n
201
+ case 13:
202
+ return "\\u000d";
203
+ // \r
204
+ // 正常来说用户无法输入这几个字符, 现代浏览器也修复了这个问题
205
+ // https://zhuanlan.zhihu.com/p/29958439
206
+ case 8232:
207
+ return "\\u2028";
208
+ // 行分隔符
209
+ case 8233:
210
+ return "\\u2029";
211
+ // 段落分隔符
212
+ default:
213
+ return c;
214
+ }
215
+ });
216
+ }
217
+ __name(safeEscape, "safeEscape");
218
+
219
+ // src/middlewares/view-context/index.ts
173
220
  function _ts_decorate3(decorators, target, key, desc) {
174
221
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
175
222
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -220,14 +267,13 @@ var ViewContextMiddleware = class _ViewContextMiddleware {
220
267
  const { userId, tenantId, appId } = req.userContext;
221
268
  const csrfToken = req.csrfToken;
222
269
  const appInfo = await this.getAppInfo(appId);
223
- this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
224
270
  req.__platform_data__ = {
225
271
  csrfToken: csrfToken ?? "",
226
272
  userId: userId ?? "",
227
273
  appId: appId ?? "",
228
- appName: appInfo?.app_name ?? "",
274
+ appName: safeEscape(appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528"),
229
275
  appAvatar: appInfo?.app_avatar ?? "",
230
- appDescription: appInfo?.app_description ?? "",
276
+ appDescription: safeEscape(appInfo?.app_description ?? ""),
231
277
  tenantId
232
278
  };
233
279
  res.locals = {
@@ -236,9 +282,9 @@ var ViewContextMiddleware = class _ViewContextMiddleware {
236
282
  userId: userId ?? "",
237
283
  tenantId: tenantId ?? "",
238
284
  appId: appId ?? "",
239
- appName: appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528",
285
+ appName: safeEscape(appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528"),
240
286
  appAvatar: appInfo?.app_avatar ?? "",
241
- appDescription: appInfo?.app_description ?? ""
287
+ appDescription: safeEscape(appInfo?.app_description ?? "")
242
288
  };
243
289
  next();
244
290
  }
@@ -428,26 +474,30 @@ var HttpInterceptorService = class {
428
474
  setupInterceptors() {
429
475
  const axiosInstance = this.httpService.axiosRef;
430
476
  axiosInstance.interceptors.request.use((config) => {
431
- this.logger.log("HTTP Request", {
432
- method: config.method?.toUpperCase(),
433
- url: config.url,
434
- headers: config.headers,
435
- params: config.params,
436
- data: config.data
437
- }, "HttpService");
477
+ if (process.env.NODE_ENV === "development") {
478
+ this.logger.log("HTTP Request", {
479
+ method: config.method?.toUpperCase(),
480
+ url: config.url,
481
+ headers: config.headers,
482
+ params: config.params,
483
+ data: config.data
484
+ }, "HttpService");
485
+ }
438
486
  return config;
439
487
  }, (error) => {
440
488
  this.logger.error("HTTP Request Error", error, "HttpService");
441
489
  return Promise.reject(error);
442
490
  });
443
491
  axiosInstance.interceptors.response.use((response) => {
444
- this.logger.log("HTTP Response", {
445
- method: response.config.method?.toUpperCase(),
446
- url: response.config.url,
447
- status: response.status,
448
- statusText: response.statusText,
449
- data: response.data
450
- }, "HttpService");
492
+ if (process.env.NODE_ENV === "development") {
493
+ this.logger.log("HTTP Response", {
494
+ method: response.config.method?.toUpperCase(),
495
+ url: response.config.url,
496
+ status: response.status,
497
+ statusText: response.statusText,
498
+ data: response.data
499
+ }, "HttpService");
500
+ }
451
501
  return response;
452
502
  }, (error) => {
453
503
  this.logger.error("HTTP Response Error", {
@@ -690,14 +740,14 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
690
740
  */
691
741
  registerGlobalInterceptors() {
692
742
  this.client.interceptors.request.use((config) => {
693
- this.logger.log(`HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
743
+ this.logger.debug(`Server SDK HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
694
744
  return config;
695
745
  }, (error) => {
696
- this.logger.error("HTTP Request Error", error, "HttpService");
746
+ this.logger.error("Server SDK HTTP Request Error", error, "HttpService");
697
747
  return Promise.reject(error);
698
748
  });
699
749
  this.client.interceptors.response.use((response) => {
700
- this.logger.log(`HTTP Response: ${response.status} ${response.url}`);
750
+ this.logger.debug(`Server SDK HTTP Response: ${response.status} ${response.url}`);
701
751
  return response;
702
752
  }, (error) => {
703
753
  const errorLog = {
@@ -705,7 +755,7 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
705
755
  statusText: error.response?.statusText,
706
756
  message: error.message
707
757
  };
708
- this.logger.error(`HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
758
+ this.logger.error(`Server SDK HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
709
759
  return Promise.reject(error);
710
760
  });
711
761
  }
@@ -716,6 +766,9 @@ PlatformHttpClientService = _ts_decorate8([
716
766
  _ts_metadata5("design:paramtypes", [])
717
767
  ], PlatformHttpClientService);
718
768
 
769
+ // src/modules/platform/config/feature-switch.ts
770
+ var DISABLE_DATAPASS = process.env.FORCE_FRAMEWORK_DISABLE_DATAPASS === "true";
771
+
719
772
  // src/modules/platform/module.ts
720
773
  function _ts_decorate9(decorators, target, key, desc) {
721
774
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -752,32 +805,37 @@ var PlatformModule = class _PlatformModule {
752
805
  timeout: 5e3,
753
806
  maxRedirects: 5
754
807
  }),
755
- import_nestjs_datapaas.DataPaasModule.forRootAsync({
756
- imports: [
757
- import_config2.ConfigModule,
758
- import_nestjs_logger2.LoggerModule
759
- ],
760
- inject: [
761
- import_config2.ConfigService,
762
- import_nestjs_logger2.AppLogger
763
- ],
764
- useFactory: /* @__PURE__ */ __name(async (...args) => {
765
- const configService = args[0];
766
- const appLogger = args[1];
767
- const drizzleLogger = {
768
- logQuery(query, params) {
769
- appLogger.log?.("SQL Query " + JSON.stringify({
770
- query,
771
- params
772
- }), "Database");
773
- }
774
- };
775
- return {
776
- connectionString: configService.get("app.databaseUrl") ?? "",
777
- logger: drizzleLogger
778
- };
779
- }, "useFactory")
780
- }),
808
+ // 读取环境变量判断是否启用 DataPaasModule
809
+ ...DISABLE_DATAPASS ? [] : [
810
+ import_nestjs_datapaas.DataPaasModule.forRootAsync({
811
+ imports: [
812
+ import_config2.ConfigModule,
813
+ import_nestjs_logger2.LoggerModule
814
+ ],
815
+ inject: [
816
+ import_config2.ConfigService,
817
+ import_nestjs_logger2.AppLogger
818
+ ],
819
+ useFactory: /* @__PURE__ */ __name(async (...args) => {
820
+ const configService = args[0];
821
+ const appLogger = args[1];
822
+ const drizzleLogger = {
823
+ logQuery(query, params) {
824
+ if (process.env.NODE_ENV === "development") {
825
+ appLogger.log?.("SQL Query " + JSON.stringify({
826
+ query,
827
+ params
828
+ }), "Database");
829
+ }
830
+ }
831
+ };
832
+ return {
833
+ connectionString: configService.get("app.databaseUrl") ?? "",
834
+ logger: drizzleLogger
835
+ };
836
+ }, "useFactory")
837
+ })
838
+ ],
781
839
  import_nestjs_authnpaas.AuthNPaasModule.forRoot(),
782
840
  import_nestjs_trigger.AutomationModule.forRoot(),
783
841
  import_nestjs_capability.CapabilityModule.forRoot({
@@ -811,7 +869,11 @@ var PlatformModule = class _PlatformModule {
811
869
  PlatformHttpClientService
812
870
  ]
813
871
  },
814
- HttpInterceptorService
872
+ HttpInterceptorService,
873
+ {
874
+ provide: import_core2.APP_INTERCEPTOR,
875
+ useClass: import_nestjs_observable.TraceInterceptor
876
+ }
815
877
  ],
816
878
  exports: [
817
879
  import_config2.ConfigModule,
@@ -832,7 +894,7 @@ var PlatformModule = class _PlatformModule {
832
894
  if (process.env.NODE_ENV === "development") {
833
895
  consumer.apply(FrameworkDebugMiddleware).forRoutes("/api/__framework__/debug");
834
896
  }
835
- consumer.apply(UserContextMiddleware, RequestContextMiddleware, import_nestjs_logger2.LoggerContextMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
897
+ consumer.apply(UserContextMiddleware, RequestContextMiddleware, import_nestjs_logger2.LoggerContextMiddleware, import_nestjs_observable.ObservableTraceMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
836
898
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
837
899
  if (options.enableCsrf !== false) {
838
900
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -864,16 +926,19 @@ async function configureApp(app, perms = defaultPerms) {
864
926
  app.use((0, import_cookie_parser.default)());
865
927
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
866
928
  app.setGlobalPrefix(globalPrefix);
929
+ app.set("trust proxy", true);
867
930
  if (process.env.NODE_ENV !== "production" && perms.disableSwagger !== true) {
868
931
  try {
869
932
  await import_nestjs_openapi_devtools.DevToolsV2Module.mount(app, {
870
933
  basePath: process.env.CLIENT_BASE_PATH,
871
934
  docsPath: "/api_docs"
872
935
  });
936
+ console.log("App Started Successfully.");
873
937
  } catch (err) {
874
938
  console.error("[OpenAPI] OpenAPI \u751F\u6210\u5931\u8D25:", err);
875
939
  }
876
940
  }
941
+ console.log("App Started Successfully.");
877
942
  }
878
943
  __name(configureApp, "configureApp");
879
944
 
@@ -884,8 +949,10 @@ __reExport(index_exports, require("@lark-apaas/nestjs-capability"), module.expor
884
949
  __reExport(index_exports, require("@lark-apaas/nestjs-datapaas"), module.exports);
885
950
  __reExport(index_exports, require("@lark-apaas/nestjs-observable"), module.exports);
886
951
  __reExport(index_exports, require("@lark-apaas/nestjs-trigger"), module.exports);
952
+ var import_nestjs_common5 = require("@lark-apaas/nestjs-common");
887
953
  // Annotate the CommonJS export names for ESM import in node:
888
954
  0 && (module.exports = {
955
+ AutoTrace,
889
956
  CsrfMiddleware,
890
957
  CsrfTokenMiddleware,
891
958
  DevToolsModule,
package/dist/index.d.cts CHANGED
@@ -4,6 +4,7 @@ import { NestExpressApplication } from '@nestjs/platform-express';
4
4
  export { DevToolsModule, DevToolsOptions, DevToolsV2Module, DevToolsV2Options } from '@lark-apaas/nestjs-openapi-devtools';
5
5
  import { Request, Response, NextFunction } from 'express';
6
6
  import { PlatformHttpClient } from '@lark-apaas/nestjs-common';
7
+ export { AutoTrace } from '@lark-apaas/nestjs-common';
7
8
  export * from '@lark-apaas/nestjs-authnpaas';
8
9
  export * from '@lark-apaas/nestjs-capability';
9
10
  export * from '@lark-apaas/nestjs-datapaas';
@@ -29,6 +30,7 @@ declare global {
29
30
  userName?: string; // 默认中文名
30
31
  userNameEn?: string; // 冗余一份英文名
31
32
  userNameI18n?: Record<string, string>; // 带多语的用户名
33
+ isSystemAccount?: boolean; // trigger 场景写入值为 true,user 访问场景不写入
32
34
  },
33
35
  csrfToken?: string;
34
36
  }
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import { NestExpressApplication } from '@nestjs/platform-express';
4
4
  export { DevToolsModule, DevToolsOptions, DevToolsV2Module, DevToolsV2Options } from '@lark-apaas/nestjs-openapi-devtools';
5
5
  import { Request, Response, NextFunction } from 'express';
6
6
  import { PlatformHttpClient } from '@lark-apaas/nestjs-common';
7
+ export { AutoTrace } from '@lark-apaas/nestjs-common';
7
8
  export * from '@lark-apaas/nestjs-authnpaas';
8
9
  export * from '@lark-apaas/nestjs-capability';
9
10
  export * from '@lark-apaas/nestjs-datapaas';
@@ -29,6 +30,7 @@ declare global {
29
30
  userName?: string; // 默认中文名
30
31
  userNameEn?: string; // 冗余一份英文名
31
32
  userNameI18n?: Record<string, string>; // 带多语的用户名
33
+ isSystemAccount?: boolean; // trigger 场景写入值为 true,user 访问场景不写入
32
34
  },
33
35
  csrfToken?: string;
34
36
  }
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
 
4
4
  // src/modules/platform/module.ts
5
5
  import { Global, Module, ValidationPipe } from "@nestjs/common";
6
- import { APP_PIPE } from "@nestjs/core";
6
+ import { APP_INTERCEPTOR, APP_PIPE } from "@nestjs/core";
7
7
  import { CommonModule, OBSERVABLE_SERVICE } from "@lark-apaas/nestjs-common";
8
8
  import { ConfigModule, ConfigService } from "@nestjs/config";
9
- import { NestjsObservableModule as ObservableModule, Observable } from "@lark-apaas/nestjs-observable";
9
+ import { NestjsObservableModule as ObservableModule, Observable, ObservableTraceMiddleware, TraceInterceptor } from "@lark-apaas/nestjs-observable";
10
10
  import { HttpModule } from "@nestjs/axios";
11
11
  import { LoggerModule, AppLogger as AppLogger2, LoggerContextMiddleware } from "@lark-apaas/nestjs-logger";
12
12
  import { DataPaasModule, SqlExecutionContextMiddleware } from "@lark-apaas/nestjs-datapaas";
@@ -60,7 +60,8 @@ var UserContextMiddleware = class {
60
60
  env: webUser?.env ?? "runtime",
61
61
  userName: webUser?.user_name?.zh_cn ?? "",
62
62
  userNameEn: webUser?.user_name?.en_us ?? "",
63
- userNameI18n: webUser?.user_name ?? {}
63
+ userNameI18n: webUser?.user_name ?? {},
64
+ isSystemAccount: webUser?.is_system_account ?? false
64
65
  };
65
66
  next();
66
67
  }
@@ -128,6 +129,51 @@ CsrfMiddleware = _ts_decorate2([
128
129
  // src/middlewares/view-context/index.ts
129
130
  import { Inject, Injectable as Injectable3, Logger } from "@nestjs/common";
130
131
  import { PLATFORM_HTTP_CLIENT } from "@lark-apaas/nestjs-common";
132
+
133
+ // src/utils/safe-stringify.ts
134
+ function safeEscape(s) {
135
+ return s.replace(/[<>&='"\n\r\u2028\u2029]/g, function(c) {
136
+ switch (c.charCodeAt(0)) {
137
+ case 60:
138
+ return "\\u003c";
139
+ // <
140
+ case 62:
141
+ return "\\u003e";
142
+ // >
143
+ case 38:
144
+ return "\\u0026";
145
+ // &
146
+ case 61:
147
+ return "\\u003d";
148
+ // =
149
+ case 39:
150
+ return "\\u0027";
151
+ // '
152
+ case 34:
153
+ return "\\u0022";
154
+ // "
155
+ case 10:
156
+ return "\\u000a";
157
+ // \n
158
+ case 13:
159
+ return "\\u000d";
160
+ // \r
161
+ // 正常来说用户无法输入这几个字符, 现代浏览器也修复了这个问题
162
+ // https://zhuanlan.zhihu.com/p/29958439
163
+ case 8232:
164
+ return "\\u2028";
165
+ // 行分隔符
166
+ case 8233:
167
+ return "\\u2029";
168
+ // 段落分隔符
169
+ default:
170
+ return c;
171
+ }
172
+ });
173
+ }
174
+ __name(safeEscape, "safeEscape");
175
+
176
+ // src/middlewares/view-context/index.ts
131
177
  function _ts_decorate3(decorators, target, key, desc) {
132
178
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
133
179
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -178,14 +224,13 @@ var ViewContextMiddleware = class _ViewContextMiddleware {
178
224
  const { userId, tenantId, appId } = req.userContext;
179
225
  const csrfToken = req.csrfToken;
180
226
  const appInfo = await this.getAppInfo(appId);
181
- this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
182
227
  req.__platform_data__ = {
183
228
  csrfToken: csrfToken ?? "",
184
229
  userId: userId ?? "",
185
230
  appId: appId ?? "",
186
- appName: appInfo?.app_name ?? "",
231
+ appName: safeEscape(appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528"),
187
232
  appAvatar: appInfo?.app_avatar ?? "",
188
- appDescription: appInfo?.app_description ?? "",
233
+ appDescription: safeEscape(appInfo?.app_description ?? ""),
189
234
  tenantId
190
235
  };
191
236
  res.locals = {
@@ -194,9 +239,9 @@ var ViewContextMiddleware = class _ViewContextMiddleware {
194
239
  userId: userId ?? "",
195
240
  tenantId: tenantId ?? "",
196
241
  appId: appId ?? "",
197
- appName: appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528",
242
+ appName: safeEscape(appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528"),
198
243
  appAvatar: appInfo?.app_avatar ?? "",
199
- appDescription: appInfo?.app_description ?? ""
244
+ appDescription: safeEscape(appInfo?.app_description ?? "")
200
245
  };
201
246
  next();
202
247
  }
@@ -386,26 +431,30 @@ var HttpInterceptorService = class {
386
431
  setupInterceptors() {
387
432
  const axiosInstance = this.httpService.axiosRef;
388
433
  axiosInstance.interceptors.request.use((config) => {
389
- this.logger.log("HTTP Request", {
390
- method: config.method?.toUpperCase(),
391
- url: config.url,
392
- headers: config.headers,
393
- params: config.params,
394
- data: config.data
395
- }, "HttpService");
434
+ if (process.env.NODE_ENV === "development") {
435
+ this.logger.log("HTTP Request", {
436
+ method: config.method?.toUpperCase(),
437
+ url: config.url,
438
+ headers: config.headers,
439
+ params: config.params,
440
+ data: config.data
441
+ }, "HttpService");
442
+ }
396
443
  return config;
397
444
  }, (error) => {
398
445
  this.logger.error("HTTP Request Error", error, "HttpService");
399
446
  return Promise.reject(error);
400
447
  });
401
448
  axiosInstance.interceptors.response.use((response) => {
402
- this.logger.log("HTTP Response", {
403
- method: response.config.method?.toUpperCase(),
404
- url: response.config.url,
405
- status: response.status,
406
- statusText: response.statusText,
407
- data: response.data
408
- }, "HttpService");
449
+ if (process.env.NODE_ENV === "development") {
450
+ this.logger.log("HTTP Response", {
451
+ method: response.config.method?.toUpperCase(),
452
+ url: response.config.url,
453
+ status: response.status,
454
+ statusText: response.statusText,
455
+ data: response.data
456
+ }, "HttpService");
457
+ }
409
458
  return response;
410
459
  }, (error) => {
411
460
  this.logger.error("HTTP Response Error", {
@@ -648,14 +697,14 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
648
697
  */
649
698
  registerGlobalInterceptors() {
650
699
  this.client.interceptors.request.use((config) => {
651
- this.logger.log(`HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
700
+ this.logger.debug(`Server SDK HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
652
701
  return config;
653
702
  }, (error) => {
654
- this.logger.error("HTTP Request Error", error, "HttpService");
703
+ this.logger.error("Server SDK HTTP Request Error", error, "HttpService");
655
704
  return Promise.reject(error);
656
705
  });
657
706
  this.client.interceptors.response.use((response) => {
658
- this.logger.log(`HTTP Response: ${response.status} ${response.url}`);
707
+ this.logger.debug(`Server SDK HTTP Response: ${response.status} ${response.url}`);
659
708
  return response;
660
709
  }, (error) => {
661
710
  const errorLog = {
@@ -663,7 +712,7 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
663
712
  statusText: error.response?.statusText,
664
713
  message: error.message
665
714
  };
666
- this.logger.error(`HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
715
+ this.logger.error(`Server SDK HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
667
716
  return Promise.reject(error);
668
717
  });
669
718
  }
@@ -674,6 +723,9 @@ PlatformHttpClientService = _ts_decorate8([
674
723
  _ts_metadata5("design:paramtypes", [])
675
724
  ], PlatformHttpClientService);
676
725
 
726
+ // src/modules/platform/config/feature-switch.ts
727
+ var DISABLE_DATAPASS = process.env.FORCE_FRAMEWORK_DISABLE_DATAPASS === "true";
728
+
677
729
  // src/modules/platform/module.ts
678
730
  function _ts_decorate9(decorators, target, key, desc) {
679
731
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -710,32 +762,37 @@ var PlatformModule = class _PlatformModule {
710
762
  timeout: 5e3,
711
763
  maxRedirects: 5
712
764
  }),
713
- DataPaasModule.forRootAsync({
714
- imports: [
715
- ConfigModule,
716
- LoggerModule
717
- ],
718
- inject: [
719
- ConfigService,
720
- AppLogger2
721
- ],
722
- useFactory: /* @__PURE__ */ __name(async (...args) => {
723
- const configService = args[0];
724
- const appLogger = args[1];
725
- const drizzleLogger = {
726
- logQuery(query, params) {
727
- appLogger.log?.("SQL Query " + JSON.stringify({
728
- query,
729
- params
730
- }), "Database");
731
- }
732
- };
733
- return {
734
- connectionString: configService.get("app.databaseUrl") ?? "",
735
- logger: drizzleLogger
736
- };
737
- }, "useFactory")
738
- }),
765
+ // 读取环境变量判断是否启用 DataPaasModule
766
+ ...DISABLE_DATAPASS ? [] : [
767
+ DataPaasModule.forRootAsync({
768
+ imports: [
769
+ ConfigModule,
770
+ LoggerModule
771
+ ],
772
+ inject: [
773
+ ConfigService,
774
+ AppLogger2
775
+ ],
776
+ useFactory: /* @__PURE__ */ __name(async (...args) => {
777
+ const configService = args[0];
778
+ const appLogger = args[1];
779
+ const drizzleLogger = {
780
+ logQuery(query, params) {
781
+ if (process.env.NODE_ENV === "development") {
782
+ appLogger.log?.("SQL Query " + JSON.stringify({
783
+ query,
784
+ params
785
+ }), "Database");
786
+ }
787
+ }
788
+ };
789
+ return {
790
+ connectionString: configService.get("app.databaseUrl") ?? "",
791
+ logger: drizzleLogger
792
+ };
793
+ }, "useFactory")
794
+ })
795
+ ],
739
796
  AuthNPaasModule.forRoot(),
740
797
  AutomationModule.forRoot(),
741
798
  CapabilityModule.forRoot({
@@ -769,7 +826,11 @@ var PlatformModule = class _PlatformModule {
769
826
  PlatformHttpClientService
770
827
  ]
771
828
  },
772
- HttpInterceptorService
829
+ HttpInterceptorService,
830
+ {
831
+ provide: APP_INTERCEPTOR,
832
+ useClass: TraceInterceptor
833
+ }
773
834
  ],
774
835
  exports: [
775
836
  ConfigModule,
@@ -790,7 +851,7 @@ var PlatformModule = class _PlatformModule {
790
851
  if (process.env.NODE_ENV === "development") {
791
852
  consumer.apply(FrameworkDebugMiddleware).forRoutes("/api/__framework__/debug");
792
853
  }
793
- consumer.apply(UserContextMiddleware, RequestContextMiddleware, LoggerContextMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
854
+ consumer.apply(UserContextMiddleware, RequestContextMiddleware, LoggerContextMiddleware, ObservableTraceMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
794
855
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
795
856
  if (options.enableCsrf !== false) {
796
857
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -822,16 +883,19 @@ async function configureApp(app, perms = defaultPerms) {
822
883
  app.use(cookieParser());
823
884
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
824
885
  app.setGlobalPrefix(globalPrefix);
886
+ app.set("trust proxy", true);
825
887
  if (process.env.NODE_ENV !== "production" && perms.disableSwagger !== true) {
826
888
  try {
827
889
  await DevToolsV2Module.mount(app, {
828
890
  basePath: process.env.CLIENT_BASE_PATH,
829
891
  docsPath: "/api_docs"
830
892
  });
893
+ console.log("App Started Successfully.");
831
894
  } catch (err) {
832
895
  console.error("[OpenAPI] OpenAPI \u751F\u6210\u5931\u8D25:", err);
833
896
  }
834
897
  }
898
+ console.log("App Started Successfully.");
835
899
  }
836
900
  __name(configureApp, "configureApp");
837
901
 
@@ -842,7 +906,9 @@ export * from "@lark-apaas/nestjs-capability";
842
906
  export * from "@lark-apaas/nestjs-datapaas";
843
907
  export * from "@lark-apaas/nestjs-observable";
844
908
  export * from "@lark-apaas/nestjs-trigger";
909
+ import { AutoTrace } from "@lark-apaas/nestjs-common";
845
910
  export {
911
+ AutoTrace,
846
912
  CsrfMiddleware,
847
913
  CsrfTokenMiddleware,
848
914
  DevToolsModule,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/fullstack-nestjs-core",
3
- "version": "1.1.8-alpha.16",
3
+ "version": "1.1.8-alpha.18",
4
4
  "description": "FullStack Nestjs Core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,13 +39,13 @@
39
39
  "prepublishOnly": "npm run build"
40
40
  },
41
41
  "dependencies": {
42
- "@lark-apaas/http-client": "0.1.2",
42
+ "@lark-apaas/http-client": "^0.1.2",
43
43
  "@lark-apaas/nestjs-authnpaas": "^1.0.2",
44
- "@lark-apaas/nestjs-capability": "0.0.1-alpha.13",
45
- "@lark-apaas/nestjs-common": "^0.1.0",
46
- "@lark-apaas/nestjs-datapaas": "^1.0.5",
47
- "@lark-apaas/nestjs-logger": "^1.0.3",
48
- "@lark-apaas/nestjs-observable": "^0.0.1",
44
+ "@lark-apaas/nestjs-capability": "0.0.1-alpha.14",
45
+ "@lark-apaas/nestjs-common": "^0.1.1",
46
+ "@lark-apaas/nestjs-datapaas": "^1.0.7",
47
+ "@lark-apaas/nestjs-logger": "^1.0.5",
48
+ "@lark-apaas/nestjs-observable": "^0.0.2",
49
49
  "@lark-apaas/nestjs-openapi-devtools": "^1.0.9",
50
50
  "@lark-apaas/nestjs-trigger": "^0.0.1",
51
51
  "@nestjs/axios": "^4.0.1",