@lark-apaas/fullstack-nestjs-core 1.0.15-alpha.16 → 1.0.15-alpha.17

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