@lark-apaas/fullstack-nestjs-core 1.1.12-alpha.10 → 1.1.12-alpha.12

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,
@@ -172,41 +173,45 @@ var import_common3 = require("@nestjs/common");
172
173
  var import_nestjs_common = require("@lark-apaas/nestjs-common");
173
174
 
174
175
  // src/utils/safe-stringify.ts
175
- function escapeChar(c) {
176
- switch (c.charCodeAt(0)) {
177
- case 60:
178
- return "\\u003c";
179
- case 62:
180
- return "\\u003e";
181
- case 38:
182
- return "\\u0026";
183
- case 61:
184
- return "\\u003d";
185
- case 39:
186
- return "\\u0027";
187
- case 34:
188
- return "\\u0022";
189
- case 123:
190
- return "\\u007b";
191
- case 125:
192
- return "\\u007d";
193
- case 40:
194
- return "\\u0028";
195
- case 41:
196
- return "\\u0029";
197
- case 10:
198
- return "\\n";
199
- case 8232:
200
- return "\\u2028";
201
- case 8233:
202
- return "\\u2029";
203
- default:
204
- return c;
205
- }
206
- }
207
- __name(escapeChar, "escapeChar");
208
176
  function safeEscape(s) {
209
- return s.replace(/[<>&='"{}()\n\u2028\u2029]/g, escapeChar);
177
+ return s.replace(/[<>&='"\n\r\u2028\u2029]/g, function(c) {
178
+ switch (c.charCodeAt(0)) {
179
+ case 60:
180
+ return "\\u003c";
181
+ // <
182
+ case 62:
183
+ return "\\u003e";
184
+ // >
185
+ case 38:
186
+ return "\\u0026";
187
+ // &
188
+ case 61:
189
+ return "\\u003d";
190
+ // =
191
+ case 39:
192
+ return "\\u0027";
193
+ // '
194
+ case 34:
195
+ return "\\u0022";
196
+ // "
197
+ case 10:
198
+ return "\\u000a";
199
+ // \n
200
+ case 13:
201
+ return "\\u000d";
202
+ // \r
203
+ // 正常来说用户无法输入这几个字符, 现代浏览器也修复了这个问题
204
+ // https://zhuanlan.zhihu.com/p/29958439
205
+ case 8232:
206
+ return "\\u2028";
207
+ // 行分隔符
208
+ case 8233:
209
+ return "\\u2029";
210
+ // 段落分隔符
211
+ default:
212
+ return c;
213
+ }
214
+ });
210
215
  }
211
216
  __name(safeEscape, "safeEscape");
212
217
 
@@ -261,7 +266,6 @@ var ViewContextMiddleware = class _ViewContextMiddleware {
261
266
  const { userId, tenantId, appId } = req.userContext;
262
267
  const csrfToken = req.csrfToken;
263
268
  const appInfo = await this.getAppInfo(appId);
264
- this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
265
269
  req.__platform_data__ = {
266
270
  csrfToken: csrfToken ?? "",
267
271
  userId: userId ?? "",
@@ -469,26 +473,30 @@ var HttpInterceptorService = class {
469
473
  setupInterceptors() {
470
474
  const axiosInstance = this.httpService.axiosRef;
471
475
  axiosInstance.interceptors.request.use((config) => {
472
- this.logger.log("HTTP Request", {
473
- method: config.method?.toUpperCase(),
474
- url: config.url,
475
- headers: config.headers,
476
- params: config.params,
477
- data: config.data
478
- }, "HttpService");
476
+ if (process.env.NODE_ENV === "development") {
477
+ this.logger.log("HTTP Request", {
478
+ method: config.method?.toUpperCase(),
479
+ url: config.url,
480
+ headers: config.headers,
481
+ params: config.params,
482
+ data: config.data
483
+ }, "HttpService");
484
+ }
479
485
  return config;
480
486
  }, (error) => {
481
487
  this.logger.error("HTTP Request Error", error, "HttpService");
482
488
  return Promise.reject(error);
483
489
  });
484
490
  axiosInstance.interceptors.response.use((response) => {
485
- this.logger.log("HTTP Response", {
486
- method: response.config.method?.toUpperCase(),
487
- url: response.config.url,
488
- status: response.status,
489
- statusText: response.statusText,
490
- data: response.data
491
- }, "HttpService");
491
+ if (process.env.NODE_ENV === "development") {
492
+ this.logger.log("HTTP Response", {
493
+ method: response.config.method?.toUpperCase(),
494
+ url: response.config.url,
495
+ status: response.status,
496
+ statusText: response.statusText,
497
+ data: response.data
498
+ }, "HttpService");
499
+ }
492
500
  return response;
493
501
  }, (error) => {
494
502
  this.logger.error("HTTP Response Error", {
@@ -731,14 +739,14 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
731
739
  */
732
740
  registerGlobalInterceptors() {
733
741
  this.client.interceptors.request.use((config) => {
734
- this.logger.log(`HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
742
+ this.logger.debug(`Server SDK HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
735
743
  return config;
736
744
  }, (error) => {
737
- this.logger.error("HTTP Request Error", error, "HttpService");
745
+ this.logger.error("Server SDK HTTP Request Error", error, "HttpService");
738
746
  return Promise.reject(error);
739
747
  });
740
748
  this.client.interceptors.response.use((response) => {
741
- this.logger.log(`HTTP Response: ${response.status} ${response.url}`);
749
+ this.logger.debug(`Server SDK HTTP Response: ${response.status} ${response.url}`);
742
750
  return response;
743
751
  }, (error) => {
744
752
  const errorLog = {
@@ -746,7 +754,7 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
746
754
  statusText: error.response?.statusText,
747
755
  message: error.message
748
756
  };
749
- this.logger.error(`HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
757
+ this.logger.error(`Server SDK HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
750
758
  return Promise.reject(error);
751
759
  });
752
760
  }
@@ -812,10 +820,12 @@ var PlatformModule = class _PlatformModule {
812
820
  const appLogger = args[1];
813
821
  const drizzleLogger = {
814
822
  logQuery(query, params) {
815
- appLogger.log?.("SQL Query " + JSON.stringify({
816
- query,
817
- params
818
- }), "Database");
823
+ if (process.env.NODE_ENV === "development") {
824
+ appLogger.log?.("SQL Query " + JSON.stringify({
825
+ query,
826
+ params
827
+ }), "Database");
828
+ }
819
829
  }
820
830
  };
821
831
  return {
@@ -854,7 +864,11 @@ var PlatformModule = class _PlatformModule {
854
864
  PlatformHttpClientService
855
865
  ]
856
866
  },
857
- HttpInterceptorService
867
+ HttpInterceptorService,
868
+ {
869
+ provide: import_core2.APP_INTERCEPTOR,
870
+ useClass: import_nestjs_observable.TraceInterceptor
871
+ }
858
872
  ],
859
873
  exports: [
860
874
  import_config2.ConfigModule,
@@ -874,7 +888,7 @@ var PlatformModule = class _PlatformModule {
874
888
  if (process.env.NODE_ENV === "development") {
875
889
  consumer.apply(FrameworkDebugMiddleware).forRoutes("/api/__framework__/debug");
876
890
  }
877
- consumer.apply(UserContextMiddleware, RequestContextMiddleware, import_nestjs_logger2.LoggerContextMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
891
+ consumer.apply(UserContextMiddleware, RequestContextMiddleware, import_nestjs_logger2.LoggerContextMiddleware, import_nestjs_observable.ObservableTraceMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
878
892
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
879
893
  if (options.enableCsrf !== false) {
880
894
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -918,6 +932,7 @@ async function configureApp(app, perms = defaultPerms) {
918
932
  console.error("[OpenAPI] OpenAPI \u751F\u6210\u5931\u8D25:", err);
919
933
  }
920
934
  }
935
+ console.log("App Started Successfully.");
921
936
  }
922
937
  __name(configureApp, "configureApp");
923
938
 
@@ -927,8 +942,10 @@ __reExport(index_exports, require("@lark-apaas/nestjs-authnpaas"), module.export
927
942
  __reExport(index_exports, require("@lark-apaas/nestjs-datapaas"), module.exports);
928
943
  __reExport(index_exports, require("@lark-apaas/nestjs-observable"), module.exports);
929
944
  __reExport(index_exports, require("@lark-apaas/nestjs-trigger"), module.exports);
945
+ var import_nestjs_common5 = require("@lark-apaas/nestjs-common");
930
946
  // Annotate the CommonJS export names for ESM import in node:
931
947
  0 && (module.exports = {
948
+ AutoTrace,
932
949
  CsrfMiddleware,
933
950
  CsrfTokenMiddleware,
934
951
  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-datapaas';
9
10
  export * from '@lark-apaas/nestjs-observable';
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-datapaas';
9
10
  export * from '@lark-apaas/nestjs-observable';
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";
@@ -130,41 +130,45 @@ import { Inject, Injectable as Injectable3, Logger } from "@nestjs/common";
130
130
  import { PLATFORM_HTTP_CLIENT } from "@lark-apaas/nestjs-common";
131
131
 
132
132
  // src/utils/safe-stringify.ts
133
- function escapeChar(c) {
134
- switch (c.charCodeAt(0)) {
135
- case 60:
136
- return "\\u003c";
137
- case 62:
138
- return "\\u003e";
139
- case 38:
140
- return "\\u0026";
141
- case 61:
142
- return "\\u003d";
143
- case 39:
144
- return "\\u0027";
145
- case 34:
146
- return "\\u0022";
147
- case 123:
148
- return "\\u007b";
149
- case 125:
150
- return "\\u007d";
151
- case 40:
152
- return "\\u0028";
153
- case 41:
154
- return "\\u0029";
155
- case 10:
156
- return "\\n";
157
- case 8232:
158
- return "\\u2028";
159
- case 8233:
160
- return "\\u2029";
161
- default:
162
- return c;
163
- }
164
- }
165
- __name(escapeChar, "escapeChar");
166
133
  function safeEscape(s) {
167
- return s.replace(/[<>&='"{}()\n\u2028\u2029]/g, escapeChar);
134
+ return s.replace(/[<>&='"\n\r\u2028\u2029]/g, function(c) {
135
+ switch (c.charCodeAt(0)) {
136
+ case 60:
137
+ return "\\u003c";
138
+ // <
139
+ case 62:
140
+ return "\\u003e";
141
+ // >
142
+ case 38:
143
+ return "\\u0026";
144
+ // &
145
+ case 61:
146
+ return "\\u003d";
147
+ // =
148
+ case 39:
149
+ return "\\u0027";
150
+ // '
151
+ case 34:
152
+ return "\\u0022";
153
+ // "
154
+ case 10:
155
+ return "\\u000a";
156
+ // \n
157
+ case 13:
158
+ return "\\u000d";
159
+ // \r
160
+ // 正常来说用户无法输入这几个字符, 现代浏览器也修复了这个问题
161
+ // https://zhuanlan.zhihu.com/p/29958439
162
+ case 8232:
163
+ return "\\u2028";
164
+ // 行分隔符
165
+ case 8233:
166
+ return "\\u2029";
167
+ // 段落分隔符
168
+ default:
169
+ return c;
170
+ }
171
+ });
168
172
  }
169
173
  __name(safeEscape, "safeEscape");
170
174
 
@@ -219,7 +223,6 @@ var ViewContextMiddleware = class _ViewContextMiddleware {
219
223
  const { userId, tenantId, appId } = req.userContext;
220
224
  const csrfToken = req.csrfToken;
221
225
  const appInfo = await this.getAppInfo(appId);
222
- this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
223
226
  req.__platform_data__ = {
224
227
  csrfToken: csrfToken ?? "",
225
228
  userId: userId ?? "",
@@ -427,26 +430,30 @@ var HttpInterceptorService = class {
427
430
  setupInterceptors() {
428
431
  const axiosInstance = this.httpService.axiosRef;
429
432
  axiosInstance.interceptors.request.use((config) => {
430
- this.logger.log("HTTP Request", {
431
- method: config.method?.toUpperCase(),
432
- url: config.url,
433
- headers: config.headers,
434
- params: config.params,
435
- data: config.data
436
- }, "HttpService");
433
+ if (process.env.NODE_ENV === "development") {
434
+ this.logger.log("HTTP Request", {
435
+ method: config.method?.toUpperCase(),
436
+ url: config.url,
437
+ headers: config.headers,
438
+ params: config.params,
439
+ data: config.data
440
+ }, "HttpService");
441
+ }
437
442
  return config;
438
443
  }, (error) => {
439
444
  this.logger.error("HTTP Request Error", error, "HttpService");
440
445
  return Promise.reject(error);
441
446
  });
442
447
  axiosInstance.interceptors.response.use((response) => {
443
- this.logger.log("HTTP Response", {
444
- method: response.config.method?.toUpperCase(),
445
- url: response.config.url,
446
- status: response.status,
447
- statusText: response.statusText,
448
- data: response.data
449
- }, "HttpService");
448
+ if (process.env.NODE_ENV === "development") {
449
+ this.logger.log("HTTP Response", {
450
+ method: response.config.method?.toUpperCase(),
451
+ url: response.config.url,
452
+ status: response.status,
453
+ statusText: response.statusText,
454
+ data: response.data
455
+ }, "HttpService");
456
+ }
450
457
  return response;
451
458
  }, (error) => {
452
459
  this.logger.error("HTTP Response Error", {
@@ -689,14 +696,14 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
689
696
  */
690
697
  registerGlobalInterceptors() {
691
698
  this.client.interceptors.request.use((config) => {
692
- this.logger.log(`HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
699
+ this.logger.debug(`Server SDK HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
693
700
  return config;
694
701
  }, (error) => {
695
- this.logger.error("HTTP Request Error", error, "HttpService");
702
+ this.logger.error("Server SDK HTTP Request Error", error, "HttpService");
696
703
  return Promise.reject(error);
697
704
  });
698
705
  this.client.interceptors.response.use((response) => {
699
- this.logger.log(`HTTP Response: ${response.status} ${response.url}`);
706
+ this.logger.debug(`Server SDK HTTP Response: ${response.status} ${response.url}`);
700
707
  return response;
701
708
  }, (error) => {
702
709
  const errorLog = {
@@ -704,7 +711,7 @@ var PlatformHttpClientService = class _PlatformHttpClientService {
704
711
  statusText: error.response?.statusText,
705
712
  message: error.message
706
713
  };
707
- this.logger.error(`HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
714
+ this.logger.error(`Server SDK HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
708
715
  return Promise.reject(error);
709
716
  });
710
717
  }
@@ -770,10 +777,12 @@ var PlatformModule = class _PlatformModule {
770
777
  const appLogger = args[1];
771
778
  const drizzleLogger = {
772
779
  logQuery(query, params) {
773
- appLogger.log?.("SQL Query " + JSON.stringify({
774
- query,
775
- params
776
- }), "Database");
780
+ if (process.env.NODE_ENV === "development") {
781
+ appLogger.log?.("SQL Query " + JSON.stringify({
782
+ query,
783
+ params
784
+ }), "Database");
785
+ }
777
786
  }
778
787
  };
779
788
  return {
@@ -812,7 +821,11 @@ var PlatformModule = class _PlatformModule {
812
821
  PlatformHttpClientService
813
822
  ]
814
823
  },
815
- HttpInterceptorService
824
+ HttpInterceptorService,
825
+ {
826
+ provide: APP_INTERCEPTOR,
827
+ useClass: TraceInterceptor
828
+ }
816
829
  ],
817
830
  exports: [
818
831
  ConfigModule,
@@ -832,7 +845,7 @@ var PlatformModule = class _PlatformModule {
832
845
  if (process.env.NODE_ENV === "development") {
833
846
  consumer.apply(FrameworkDebugMiddleware).forRoutes("/api/__framework__/debug");
834
847
  }
835
- consumer.apply(UserContextMiddleware, RequestContextMiddleware, LoggerContextMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
848
+ consumer.apply(UserContextMiddleware, RequestContextMiddleware, LoggerContextMiddleware, ObservableTraceMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
836
849
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
837
850
  if (options.enableCsrf !== false) {
838
851
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -876,6 +889,7 @@ async function configureApp(app, perms = defaultPerms) {
876
889
  console.error("[OpenAPI] OpenAPI \u751F\u6210\u5931\u8D25:", err);
877
890
  }
878
891
  }
892
+ console.log("App Started Successfully.");
879
893
  }
880
894
  __name(configureApp, "configureApp");
881
895
 
@@ -885,7 +899,9 @@ export * from "@lark-apaas/nestjs-authnpaas";
885
899
  export * from "@lark-apaas/nestjs-datapaas";
886
900
  export * from "@lark-apaas/nestjs-observable";
887
901
  export * from "@lark-apaas/nestjs-trigger";
902
+ import { AutoTrace } from "@lark-apaas/nestjs-common";
888
903
  export {
904
+ AutoTrace,
889
905
  CsrfMiddleware,
890
906
  CsrfTokenMiddleware,
891
907
  DevToolsModule,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/fullstack-nestjs-core",
3
- "version": "1.1.12-alpha.10",
3
+ "version": "1.1.12-alpha.12",
4
4
  "description": "FullStack Nestjs Core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,10 +41,10 @@
41
41
  "dependencies": {
42
42
  "@lark-apaas/http-client": "0.1.2",
43
43
  "@lark-apaas/nestjs-authnpaas": "^1.0.2",
44
- "@lark-apaas/nestjs-common": "^0.1.0",
44
+ "@lark-apaas/nestjs-common": "0.1.0-alpha.1",
45
45
  "@lark-apaas/nestjs-datapaas": "^1.0.7",
46
- "@lark-apaas/nestjs-logger": "^1.0.4",
47
- "@lark-apaas/nestjs-observable": "^0.0.1",
46
+ "@lark-apaas/nestjs-logger": "1.0.2-alpha.40",
47
+ "@lark-apaas/nestjs-observable": "0.0.1-alpha.39",
48
48
  "@lark-apaas/nestjs-openapi-devtools": "^1.0.9",
49
49
  "@lark-apaas/nestjs-trigger": "^0.0.1",
50
50
  "@nestjs/axios": "^4.0.1",
@@ -57,7 +57,6 @@
57
57
  "@nestjs/swagger": "^7.4.2",
58
58
  "@types/cookie-parser": "^1.4.9",
59
59
  "@types/express": "^5.0.3",
60
- "@types/serialize-javascript": "^5.0.4",
61
60
  "class-transformer": "^0.5.1",
62
61
  "class-validator": "^0.14.2",
63
62
  "drizzle-orm": "0.44.6",