@lark-apaas/fullstack-nestjs-core 1.1.1-alpha.4 → 1.1.1-alpha.40

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,
@@ -44,14 +45,17 @@ __export(index_exports, {
44
45
  module.exports = __toCommonJS(index_exports);
45
46
 
46
47
  // src/modules/platform/module.ts
47
- var import_common5 = require("@nestjs/common");
48
- var import_core = require("@nestjs/core");
49
- var import_nestjs_common = require("@lark-apaas/nestjs-common");
48
+ var import_common9 = require("@nestjs/common");
49
+ var import_core2 = require("@nestjs/core");
50
+ var import_nestjs_common3 = require("@lark-apaas/nestjs-common");
50
51
  var import_config2 = require("@nestjs/config");
51
- var import_nestjs_logger = require("@lark-apaas/nestjs-logger");
52
+ var import_nestjs_observable = require("@lark-apaas/nestjs-observable");
53
+ var import_axios2 = require("@nestjs/axios");
54
+ var import_nestjs_logger2 = require("@lark-apaas/nestjs-logger");
52
55
  var import_nestjs_datapaas = require("@lark-apaas/nestjs-datapaas");
53
56
  var import_nestjs_authnpaas = require("@lark-apaas/nestjs-authnpaas");
54
- var import_nestjs_automation = require("@lark-apaas/nestjs-automation");
57
+ var import_nestjs_trigger = require("@lark-apaas/nestjs-trigger");
58
+ var import_nestjs_common4 = require("@lark-apaas/nestjs-common");
55
59
 
56
60
  // src/middlewares/user-context/index.ts
57
61
  var import_common = require("@nestjs/common");
@@ -93,7 +97,13 @@ var UserContextMiddleware = class {
93
97
  userId: webUser?.user_id,
94
98
  tenantId: webUser?.tenant_id,
95
99
  appId: webUser?.app_id ?? "",
96
- loginUrl: webUser?.login_url ?? ""
100
+ loginUrl: webUser?.login_url ?? "",
101
+ userType: webUser?.user_type ?? "",
102
+ env: webUser?.env ?? "runtime",
103
+ userName: webUser?.user_name?.zh_cn ?? "",
104
+ userNameEn: webUser?.user_name?.en_us ?? "",
105
+ userNameI18n: webUser?.user_name ?? {},
106
+ isSystemAccount: webUser?.is_system_account ?? false
97
107
  };
98
108
  next();
99
109
  }
@@ -160,6 +170,7 @@ CsrfMiddleware = _ts_decorate2([
160
170
 
161
171
  // src/middlewares/view-context/index.ts
162
172
  var import_common3 = require("@nestjs/common");
173
+ var import_nestjs_common = require("@lark-apaas/nestjs-common");
163
174
  function _ts_decorate3(decorators, target, key, desc) {
164
175
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
165
176
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -167,17 +178,57 @@ function _ts_decorate3(decorators, target, key, desc) {
167
178
  return c > 3 && r && Object.defineProperty(target, key, r), r;
168
179
  }
169
180
  __name(_ts_decorate3, "_ts_decorate");
170
- var ViewContextMiddleware = class {
181
+ function _ts_metadata(k, v) {
182
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
183
+ }
184
+ __name(_ts_metadata, "_ts_metadata");
185
+ function _ts_param(paramIndex, decorator) {
186
+ return function(target, key) {
187
+ decorator(target, key, paramIndex);
188
+ };
189
+ }
190
+ __name(_ts_param, "_ts_param");
191
+ var ViewContextMiddleware = class _ViewContextMiddleware {
171
192
  static {
172
193
  __name(this, "ViewContextMiddleware");
173
194
  }
174
- use(req, res, next) {
195
+ client;
196
+ logger = new import_common3.Logger(_ViewContextMiddleware.name);
197
+ constructor(client) {
198
+ this.client = client;
199
+ }
200
+ async getAppInfo(appId) {
201
+ if (!appId) {
202
+ this.logger.warn(`appId is empty, skip get app info`);
203
+ return null;
204
+ }
205
+ try {
206
+ const resp = await this.client.get(`/b/${appId}/get_published_v2`);
207
+ if (resp.status !== 200) {
208
+ throw new Error(`Failed to get app info, status: ${resp.status}`);
209
+ }
210
+ const data = await resp.json();
211
+ if (data.status_code !== "0") {
212
+ throw new Error(`Failed to get app info, status_code: ${data.status_code}`);
213
+ }
214
+ return data.data.app_info ?? {};
215
+ } catch (err) {
216
+ this.logger.error(err, "Failed to get app info");
217
+ return null;
218
+ }
219
+ }
220
+ async use(req, res, next) {
175
221
  const { userId, tenantId, appId } = req.userContext;
176
222
  const csrfToken = req.csrfToken;
223
+ const appInfo = await this.getAppInfo(appId);
224
+ this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
177
225
  req.__platform_data__ = {
178
226
  csrfToken: csrfToken ?? "",
179
227
  userId: userId ?? "",
180
228
  appId: appId ?? "",
229
+ appName: appInfo?.app_name ?? "",
230
+ appAvatar: appInfo?.app_avatar ?? "",
231
+ appDescription: appInfo?.app_description ?? "",
181
232
  tenantId
182
233
  };
183
234
  res.locals = {
@@ -185,13 +236,21 @@ var ViewContextMiddleware = class {
185
236
  csrfToken: csrfToken ?? "",
186
237
  userId: userId ?? "",
187
238
  tenantId: tenantId ?? "",
188
- appId: appId ?? ""
239
+ appId: appId ?? "",
240
+ appName: appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528",
241
+ appAvatar: appInfo?.app_avatar ?? "",
242
+ appDescription: appInfo?.app_description ?? ""
189
243
  };
190
244
  next();
191
245
  }
192
246
  };
193
247
  ViewContextMiddleware = _ts_decorate3([
194
- (0, import_common3.Injectable)()
248
+ (0, import_common3.Injectable)(),
249
+ _ts_param(0, (0, import_common3.Inject)(import_nestjs_common.PLATFORM_HTTP_CLIENT)),
250
+ _ts_metadata("design:type", Function),
251
+ _ts_metadata("design:paramtypes", [
252
+ typeof PlatformHttpClient === "undefined" ? Object : PlatformHttpClient
253
+ ])
195
254
  ], ViewContextMiddleware);
196
255
 
197
256
  // src/middlewares/csrf_token/index.ts
@@ -246,7 +305,7 @@ var CsrfTokenMiddleware = class _CsrfTokenMiddleware {
246
305
  res.cookie(cookieKey, token, {
247
306
  maxAge: cookieMaxAge,
248
307
  path: cookiePath,
249
- httpOnly: true,
308
+ httpOnly: false,
250
309
  secure: true,
251
310
  sameSite: "none",
252
311
  partitioned: true
@@ -259,6 +318,160 @@ CsrfTokenMiddleware = _ts_decorate4([
259
318
  (0, import_common4.Injectable)()
260
319
  ], CsrfTokenMiddleware);
261
320
 
321
+ // src/middlewares/api-fallback/index.ts
322
+ function createApiNotFoundResponse(req) {
323
+ return {
324
+ code: 404,
325
+ message: `Cannot ${req.method} ${req.path}`,
326
+ error: "Not Found",
327
+ path: req.path,
328
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
329
+ };
330
+ }
331
+ __name(createApiNotFoundResponse, "createApiNotFoundResponse");
332
+ function getApiPathPrefix() {
333
+ const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
334
+ if (!globalPrefix) {
335
+ return "/api/";
336
+ }
337
+ const normalizedPrefix = globalPrefix.replace(/\/+$/, "");
338
+ return `${normalizedPrefix}/api/`;
339
+ }
340
+ __name(getApiPathPrefix, "getApiPathPrefix");
341
+ function apiResponseInterceptor(req, res, next) {
342
+ const apiPrefix = getApiPathPrefix();
343
+ if (!req.baseUrl.startsWith(apiPrefix)) {
344
+ return next();
345
+ }
346
+ res.render = function() {
347
+ return res.status(404).json(createApiNotFoundResponse(req));
348
+ };
349
+ next();
350
+ }
351
+ __name(apiResponseInterceptor, "apiResponseInterceptor");
352
+
353
+ // src/middlewares/request-context/index.ts
354
+ var import_common5 = require("@nestjs/common");
355
+ var import_nestjs_common2 = require("@lark-apaas/nestjs-common");
356
+ function _ts_decorate5(decorators, target, key, desc) {
357
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
358
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
359
+ 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;
360
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
361
+ }
362
+ __name(_ts_decorate5, "_ts_decorate");
363
+ function _ts_metadata2(k, v) {
364
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
365
+ }
366
+ __name(_ts_metadata2, "_ts_metadata");
367
+ var RequestContextMiddleware = class {
368
+ static {
369
+ __name(this, "RequestContextMiddleware");
370
+ }
371
+ requestContext;
372
+ constructor(requestContext) {
373
+ this.requestContext = requestContext;
374
+ }
375
+ use(req, _res, next) {
376
+ const path = req.originalUrl ?? req.url;
377
+ const userContext = req.userContext ?? {};
378
+ this.requestContext.run({
379
+ path,
380
+ method: req.method,
381
+ userId: userContext.userId,
382
+ tenantId: userContext.tenantId,
383
+ appId: userContext.appId
384
+ }, () => next());
385
+ }
386
+ };
387
+ RequestContextMiddleware = _ts_decorate5([
388
+ (0, import_common5.Injectable)(),
389
+ _ts_metadata2("design:type", Function),
390
+ _ts_metadata2("design:paramtypes", [
391
+ typeof import_nestjs_common2.RequestContextService === "undefined" ? Object : import_nestjs_common2.RequestContextService
392
+ ])
393
+ ], RequestContextMiddleware);
394
+
395
+ // src/services/http-interceptor.service.ts
396
+ var import_common6 = require("@nestjs/common");
397
+ var import_axios = require("@nestjs/axios");
398
+ var import_nestjs_logger = require("@lark-apaas/nestjs-logger");
399
+ function _ts_decorate6(decorators, target, key, desc) {
400
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
401
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
402
+ 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;
403
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
404
+ }
405
+ __name(_ts_decorate6, "_ts_decorate");
406
+ function _ts_metadata3(k, v) {
407
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
408
+ }
409
+ __name(_ts_metadata3, "_ts_metadata");
410
+ var HttpInterceptorService = class {
411
+ static {
412
+ __name(this, "HttpInterceptorService");
413
+ }
414
+ httpService;
415
+ logger;
416
+ constructor(httpService, logger) {
417
+ this.httpService = httpService;
418
+ this.logger = logger;
419
+ }
420
+ /**
421
+ * 模块初始化时配置拦截器
422
+ */
423
+ onModuleInit() {
424
+ this.setupInterceptors();
425
+ }
426
+ /**
427
+ * 配置 axios 请求/响应拦截器
428
+ */
429
+ setupInterceptors() {
430
+ const axiosInstance = this.httpService.axiosRef;
431
+ axiosInstance.interceptors.request.use((config) => {
432
+ this.logger.log("HTTP Request", {
433
+ method: config.method?.toUpperCase(),
434
+ url: config.url,
435
+ headers: config.headers,
436
+ params: config.params,
437
+ data: config.data
438
+ }, "HttpService");
439
+ return config;
440
+ }, (error) => {
441
+ this.logger.error("HTTP Request Error", error, "HttpService");
442
+ return Promise.reject(error);
443
+ });
444
+ axiosInstance.interceptors.response.use((response) => {
445
+ this.logger.log("HTTP Response", {
446
+ method: response.config.method?.toUpperCase(),
447
+ url: response.config.url,
448
+ status: response.status,
449
+ statusText: response.statusText,
450
+ data: response.data
451
+ }, "HttpService");
452
+ return response;
453
+ }, (error) => {
454
+ this.logger.error("HTTP Response Error", {
455
+ method: error.config?.method?.toUpperCase(),
456
+ url: error.config?.url,
457
+ status: error.response?.status,
458
+ statusText: error.response?.statusText,
459
+ data: error.response?.data,
460
+ message: error.message
461
+ }, "HttpService");
462
+ return Promise.reject(error);
463
+ });
464
+ }
465
+ };
466
+ HttpInterceptorService = _ts_decorate6([
467
+ (0, import_common6.Injectable)(),
468
+ _ts_metadata3("design:type", Function),
469
+ _ts_metadata3("design:paramtypes", [
470
+ typeof import_axios.HttpService === "undefined" ? Object : import_axios.HttpService,
471
+ typeof import_nestjs_logger.AppLogger === "undefined" ? Object : import_nestjs_logger.AppLogger
472
+ ])
473
+ ], HttpInterceptorService);
474
+
262
475
  // src/modules/platform/config/app.config.ts
263
476
  var import_config = require("@nestjs/config");
264
477
  var NAMESPACE = "app";
@@ -271,15 +484,248 @@ var app_config_default = (0, import_config.registerAs)(NAMESPACE, () => {
271
484
  };
272
485
  });
273
486
 
487
+ // src/middlewares/debug/index.ts
488
+ var import_common7 = require("@nestjs/common");
489
+ var import_core = require("@nestjs/core");
490
+ function _ts_decorate7(decorators, target, key, desc) {
491
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
492
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
493
+ 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;
494
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
495
+ }
496
+ __name(_ts_decorate7, "_ts_decorate");
497
+ function _ts_metadata4(k, v) {
498
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
499
+ }
500
+ __name(_ts_metadata4, "_ts_metadata");
501
+ var processStartTimestamp = Date.now();
502
+ var FrameworkDebugMiddleware = class {
503
+ static {
504
+ __name(this, "FrameworkDebugMiddleware");
505
+ }
506
+ httpAdapterHost;
507
+ constructor(httpAdapterHost) {
508
+ this.httpAdapterHost = httpAdapterHost;
509
+ }
510
+ use(_req, res) {
511
+ res.json(this.getDebugInfo());
512
+ }
513
+ getDebugInfo() {
514
+ const routes = this.getRoutes();
515
+ const uptimeSeconds = Math.floor(process.uptime());
516
+ return {
517
+ ["\u8DEF\u7531\u914D\u7F6E"]: routes,
518
+ ["\u8FDB\u7A0B\u5B58\u6D3B\u65F6\u95F4\uFF08\u79D2\uFF09"]: uptimeSeconds,
519
+ ["\u8FDB\u7A0B\u542F\u52A8\u65F6\u95F4\uFF08\u79D2\uFF09"]: new Date(processStartTimestamp).toISOString(),
520
+ ["\u8FD0\u884C\u65F6\u7248\u672C"]: process.versions
521
+ };
522
+ }
523
+ getRoutes() {
524
+ const server = this.httpAdapterHost.httpAdapter;
525
+ const router = server.getInstance()._router;
526
+ if (!router) {
527
+ return {
528
+ error: "Router \u4E0D\u53EF\u7528"
529
+ };
530
+ }
531
+ const routes = [];
532
+ router.stack.forEach((middleware, index) => {
533
+ if (middleware.route) {
534
+ routes.push({
535
+ order: String(index),
536
+ path: middleware.route.path,
537
+ method: middleware.method,
538
+ regexp: middleware.regexp?.toString()
539
+ });
540
+ }
541
+ });
542
+ return {
543
+ total: routes.length,
544
+ routes
545
+ };
546
+ }
547
+ };
548
+ FrameworkDebugMiddleware = _ts_decorate7([
549
+ (0, import_common7.Injectable)(),
550
+ _ts_metadata4("design:type", Function),
551
+ _ts_metadata4("design:paramtypes", [
552
+ typeof import_core.HttpAdapterHost === "undefined" ? Object : import_core.HttpAdapterHost
553
+ ])
554
+ ], FrameworkDebugMiddleware);
555
+
556
+ // src/services/platform-http-client.service.ts
557
+ var import_common8 = require("@nestjs/common");
558
+ var import_http_client = require("@lark-apaas/http-client");
559
+ function _ts_decorate8(decorators, target, key, desc) {
560
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
561
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
562
+ 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;
563
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
564
+ }
565
+ __name(_ts_decorate8, "_ts_decorate");
566
+ function _ts_metadata5(k, v) {
567
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
568
+ }
569
+ __name(_ts_metadata5, "_ts_metadata");
570
+ var ProtectedHttpClient = class ProtectedHttpClient2 {
571
+ static {
572
+ __name(this, "ProtectedHttpClient");
573
+ }
574
+ client;
575
+ constructor(client) {
576
+ this.client = client;
577
+ }
578
+ request(config) {
579
+ return this.client.request(config);
580
+ }
581
+ get(url, config) {
582
+ return this.client.get(url, config);
583
+ }
584
+ post(url, data, config) {
585
+ return this.client.post(url, data, config);
586
+ }
587
+ put(url, data, config) {
588
+ return this.client.put(url, data, config);
589
+ }
590
+ patch(url, data, config) {
591
+ return this.client.patch(url, data, config);
592
+ }
593
+ delete(url, config) {
594
+ return this.client.delete(url, config);
595
+ }
596
+ };
597
+ var PlatformHttpClientService = class _PlatformHttpClientService {
598
+ static {
599
+ __name(this, "PlatformHttpClientService");
600
+ }
601
+ client;
602
+ protectedClient;
603
+ logger = new import_common8.Logger(_PlatformHttpClientService.name);
604
+ constructor() {
605
+ const baseConfig = {
606
+ timeout: 5e3
607
+ };
608
+ this.client = new import_http_client.HttpClient({
609
+ ...baseConfig,
610
+ platform: {
611
+ enabled: true
612
+ }
613
+ });
614
+ this.protectedClient = new ProtectedHttpClient(this.client);
615
+ this.registerGlobalInterceptors();
616
+ }
617
+ /**
618
+ * 获取受保护的 HttpClient 实例(推荐)
619
+ *
620
+ * 该实例不暴露 interceptors,防止业务代码修改全局拦截器
621
+ *
622
+ * @returns 受保护的 HttpClient 实例
623
+ */
624
+ get instance() {
625
+ return this.protectedClient;
626
+ }
627
+ /**
628
+ * 获取原始 HttpClient 实例(危险)
629
+ *
630
+ * ⚠️ 警告:该实例允许修改拦截器,会影响所有使用全局实例的地方
631
+ *
632
+ * 仅用于特殊场景,不应该暴露给业务代码
633
+ * 如果需要自定义拦截器,请使用 `create()` 方法创建独立实例
634
+ *
635
+ * @internal
636
+ * @returns 原始 HttpClient 实例
637
+ */
638
+ get rawInstance() {
639
+ return this.client;
640
+ }
641
+ /**
642
+ * 创建一个新的独立 HttpClient 实例
643
+ *
644
+ * 适用于需要自定义拦截器或配置的场景
645
+ * 创建的实例完全独立,不会影响全局实例
646
+ *
647
+ * @param options - 配置选项(会与全局配置合并)
648
+ * @returns 完整的 HttpClient 实例(允许修改拦截器)
649
+ *
650
+ * @example
651
+ * ```typescript
652
+ * @Injectable()
653
+ * export class FileService {
654
+ * private fileClient: HttpClient;
655
+ *
656
+ * constructor(private platformHttp: PlatformHttpClientService) {
657
+ * // 创建超时 60 秒的独立实例
658
+ * this.fileClient = this.platformHttp.create({
659
+ * config: { timeout: 60000 }
660
+ * });
661
+ *
662
+ * // 为这个实例注册拦截器(不影响全局实例)
663
+ * this.fileClient.interceptors.request.use((config) => {
664
+ * console.log('File upload starting...');
665
+ * return config;
666
+ * });
667
+ * }
668
+ *
669
+ * async uploadFile(file: Buffer) {
670
+ * return this.fileClient.post('/file/upload', file);
671
+ * }
672
+ * }
673
+ * ```
674
+ */
675
+ create(options) {
676
+ const mergedConfig = {
677
+ timeout: 5e3,
678
+ ...options?.config
679
+ };
680
+ const mergedPlatform = {
681
+ enabled: true,
682
+ ...options?.platform
683
+ };
684
+ return new import_http_client.HttpClient({
685
+ ...mergedConfig,
686
+ platform: mergedPlatform
687
+ });
688
+ }
689
+ /**
690
+ * 注册全局拦截器
691
+ */
692
+ registerGlobalInterceptors() {
693
+ this.client.interceptors.request.use((config) => {
694
+ this.logger.log(`HTTP Request: ${config.method?.toUpperCase()} ${config.url}`);
695
+ return config;
696
+ }, (error) => {
697
+ this.logger.error("HTTP Request Error", error, "HttpService");
698
+ return Promise.reject(error);
699
+ });
700
+ this.client.interceptors.response.use((response) => {
701
+ this.logger.log(`HTTP Response: ${response.status} ${response.url}`);
702
+ return response;
703
+ }, (error) => {
704
+ const errorLog = {
705
+ status: error.response?.status,
706
+ statusText: error.response?.statusText,
707
+ message: error.message
708
+ };
709
+ this.logger.error(`HTTP Response Error: ${error.config?.method?.toUpperCase()} ${error.config?.url} ${JSON.stringify(errorLog)}`);
710
+ return Promise.reject(error);
711
+ });
712
+ }
713
+ };
714
+ PlatformHttpClientService = _ts_decorate8([
715
+ (0, import_common8.Injectable)(),
716
+ _ts_metadata5("design:type", Function),
717
+ _ts_metadata5("design:paramtypes", [])
718
+ ], PlatformHttpClientService);
719
+
274
720
  // src/modules/platform/module.ts
275
- function _ts_decorate5(decorators, target, key, desc) {
721
+ function _ts_decorate9(decorators, target, key, desc) {
276
722
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
277
723
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
278
724
  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;
279
725
  return c > 3 && r && Object.defineProperty(target, key, r), r;
280
726
  }
281
- __name(_ts_decorate5, "_ts_decorate");
282
- var PLATFORM_MODULE_OPTIONS = "PLATFORM_MODULE_OPTIONS";
727
+ __name(_ts_decorate9, "_ts_decorate");
728
+ var PLATFORM_MODULE_OPTIONS = /* @__PURE__ */ Symbol("PLATFORM_MODULE_OPTIONS");
283
729
  var PlatformModule = class _PlatformModule {
284
730
  static {
285
731
  __name(this, "PlatformModule");
@@ -300,25 +746,32 @@ var PlatformModule = class _PlatformModule {
300
746
  app_config_default
301
747
  ]
302
748
  }),
303
- import_nestjs_common.CommonModule,
304
- import_nestjs_logger.LoggerModule,
749
+ import_nestjs_common3.CommonModule,
750
+ import_nestjs_observable.NestjsObservableModule,
751
+ import_nestjs_logger2.LoggerModule,
752
+ import_axios2.HttpModule.register({
753
+ timeout: 5e3,
754
+ maxRedirects: 5
755
+ }),
305
756
  import_nestjs_datapaas.DataPaasModule.forRootAsync({
306
757
  imports: [
307
758
  import_config2.ConfigModule,
308
- import_nestjs_logger.LoggerModule
759
+ import_nestjs_logger2.LoggerModule
309
760
  ],
310
761
  inject: [
311
762
  import_config2.ConfigService,
312
- import_nestjs_logger.AppLogger
763
+ import_nestjs_logger2.AppLogger
313
764
  ],
314
765
  useFactory: /* @__PURE__ */ __name(async (...args) => {
315
766
  const configService = args[0];
316
767
  const appLogger = args[1];
317
768
  const drizzleLogger = {
318
769
  logQuery(query, params) {
319
- appLogger.log?.("SQL Query", {
770
+ appLogger.log?.("SQL Query " + JSON.stringify({
320
771
  query,
321
772
  params
773
+ }), {
774
+ source_type: "platform"
322
775
  }, "Database");
323
776
  }
324
777
  };
@@ -329,11 +782,7 @@ var PlatformModule = class _PlatformModule {
329
782
  }, "useFactory")
330
783
  }),
331
784
  import_nestjs_authnpaas.AuthNPaasModule.forRoot(),
332
- import_nestjs_automation.AutomationModule.forRoot({
333
- imports: [
334
- import_nestjs_logger.LoggerModule
335
- ]
336
- })
785
+ import_nestjs_trigger.AutomationModule.forRoot()
337
786
  ],
338
787
  providers: [
339
788
  {
@@ -341,18 +790,38 @@ var PlatformModule = class _PlatformModule {
341
790
  useValue: options
342
791
  },
343
792
  {
344
- provide: import_core.APP_PIPE,
345
- useValue: new import_common5.ValidationPipe({
793
+ provide: import_core2.APP_PIPE,
794
+ useValue: new import_common9.ValidationPipe({
346
795
  transform: true,
347
796
  transformOptions: {
348
797
  enableImplicitConversion: true
349
798
  }
350
799
  })
800
+ },
801
+ {
802
+ provide: import_nestjs_common3.OBSERVABLE_SERVICE,
803
+ useClass: import_nestjs_observable.Observable
804
+ },
805
+ PlatformHttpClientService,
806
+ {
807
+ provide: import_nestjs_common4.PLATFORM_HTTP_CLIENT,
808
+ useFactory: /* @__PURE__ */ __name((svc) => svc.instance, "useFactory"),
809
+ inject: [
810
+ PlatformHttpClientService
811
+ ]
812
+ },
813
+ HttpInterceptorService,
814
+ {
815
+ provide: import_core2.APP_INTERCEPTOR,
816
+ useClass: import_nestjs_observable.TraceInterceptor
351
817
  }
352
818
  ],
353
819
  exports: [
354
820
  import_config2.ConfigModule,
355
- import_nestjs_logger.LoggerModule
821
+ import_nestjs_logger2.LoggerModule,
822
+ import_nestjs_common3.CommonModule,
823
+ import_nestjs_common3.OBSERVABLE_SERVICE,
824
+ import_nestjs_common4.PLATFORM_HTTP_CLIENT
356
825
  ]
357
826
  };
358
827
  }
@@ -361,7 +830,11 @@ var PlatformModule = class _PlatformModule {
361
830
  */
362
831
  configure(consumer) {
363
832
  const options = _PlatformModule.moduleOptions;
364
- consumer.apply(UserContextMiddleware, import_nestjs_logger.LoggerContextMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
833
+ consumer.apply(apiResponseInterceptor).forRoutes("/api/*");
834
+ if (process.env.NODE_ENV === "development") {
835
+ consumer.apply(FrameworkDebugMiddleware).forRoutes("/api/__framework__/debug");
836
+ }
837
+ consumer.apply(UserContextMiddleware, RequestContextMiddleware, import_nestjs_logger2.LoggerContextMiddleware, import_nestjs_observable.ObservableTraceMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
365
838
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
366
839
  if (options.enableCsrf !== false) {
367
840
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -375,20 +848,20 @@ var PlatformModule = class _PlatformModule {
375
848
  }
376
849
  }
377
850
  };
378
- PlatformModule = _ts_decorate5([
379
- (0, import_common5.Global)(),
380
- (0, import_common5.Module)({})
851
+ PlatformModule = _ts_decorate9([
852
+ (0, import_common9.Global)(),
853
+ (0, import_common9.Module)({})
381
854
  ], PlatformModule);
382
855
 
383
856
  // src/setup.ts
384
- var import_nestjs_logger2 = require("@lark-apaas/nestjs-logger");
857
+ var import_nestjs_logger3 = require("@lark-apaas/nestjs-logger");
385
858
  var import_cookie_parser = __toESM(require("cookie-parser"), 1);
386
859
  var import_nestjs_openapi_devtools = require("@lark-apaas/nestjs-openapi-devtools");
387
860
  var defaultPerms = {
388
861
  disableSwagger: false
389
862
  };
390
863
  async function configureApp(app, perms = defaultPerms) {
391
- app.useLogger(app.get(import_nestjs_logger2.AppLogger));
864
+ app.useLogger(app.get(import_nestjs_logger3.AppLogger));
392
865
  app.flushLogs();
393
866
  app.use((0, import_cookie_parser.default)());
394
867
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
@@ -410,9 +883,12 @@ __name(configureApp, "configureApp");
410
883
  var import_nestjs_openapi_devtools2 = require("@lark-apaas/nestjs-openapi-devtools");
411
884
  __reExport(index_exports, require("@lark-apaas/nestjs-authnpaas"), module.exports);
412
885
  __reExport(index_exports, require("@lark-apaas/nestjs-datapaas"), module.exports);
413
- __reExport(index_exports, require("@lark-apaas/nestjs-automation"), module.exports);
886
+ __reExport(index_exports, require("@lark-apaas/nestjs-observable"), module.exports);
887
+ __reExport(index_exports, require("@lark-apaas/nestjs-trigger"), module.exports);
888
+ var import_nestjs_common5 = require("@lark-apaas/nestjs-common");
414
889
  // Annotate the CommonJS export names for ESM import in node:
415
890
  0 && (module.exports = {
891
+ AutoTrace,
416
892
  CsrfMiddleware,
417
893
  CsrfTokenMiddleware,
418
894
  DevToolsModule,
@@ -423,5 +899,6 @@ __reExport(index_exports, require("@lark-apaas/nestjs-automation"), module.expor
423
899
  configureApp,
424
900
  ...require("@lark-apaas/nestjs-authnpaas"),
425
901
  ...require("@lark-apaas/nestjs-datapaas"),
426
- ...require("@lark-apaas/nestjs-automation")
902
+ ...require("@lark-apaas/nestjs-observable"),
903
+ ...require("@lark-apaas/nestjs-trigger")
427
904
  });