@lark-apaas/fullstack-nestjs-core 1.0.15-alpha.2 → 1.0.15-alpha.21

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");
@@ -92,7 +98,11 @@ var UserContextMiddleware = class {
92
98
  tenantId: webUser?.tenant_id,
93
99
  appId: webUser?.app_id ?? "",
94
100
  loginUrl: webUser?.login_url ?? "",
95
- userType: webUser?.user_type ?? ""
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 ?? {}
96
106
  };
97
107
  next();
98
108
  }
@@ -159,6 +169,7 @@ CsrfMiddleware = _ts_decorate2([
159
169
 
160
170
  // src/middlewares/view-context/index.ts
161
171
  var import_common3 = require("@nestjs/common");
172
+ var import_nestjs_common = require("@lark-apaas/nestjs-common");
162
173
  function _ts_decorate3(decorators, target, key, desc) {
163
174
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
164
175
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -166,17 +177,57 @@ function _ts_decorate3(decorators, target, key, desc) {
166
177
  return c > 3 && r && Object.defineProperty(target, key, r), r;
167
178
  }
168
179
  __name(_ts_decorate3, "_ts_decorate");
169
- 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 {
170
191
  static {
171
192
  __name(this, "ViewContextMiddleware");
172
193
  }
173
- 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) {
174
220
  const { userId, tenantId, appId, loginUrl, userType } = req.userContext;
175
221
  const csrfToken = req.csrfToken;
222
+ const appInfo = await this.getAppInfo(appId);
223
+ this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
176
224
  req.__platform_data__ = {
177
225
  csrfToken: csrfToken ?? "",
178
226
  userId: userId ?? "",
179
227
  appId: appId ?? "",
228
+ appName: appInfo?.app_name ?? "",
229
+ appAvatar: appInfo?.app_avatar ?? "",
230
+ appDescription: appInfo?.app_description ?? "",
180
231
  loginUrl: loginUrl ?? "",
181
232
  userType: userType ?? "",
182
233
  tenantId
@@ -188,13 +239,21 @@ var ViewContextMiddleware = class {
188
239
  tenantId: tenantId ?? "",
189
240
  loginUrl: loginUrl ?? "",
190
241
  userType: userType ?? "",
191
- appId: appId ?? ""
242
+ appId: appId ?? "",
243
+ appName: appInfo?.app_name ?? "\u5999\u642D\u5E94\u7528",
244
+ appAvatar: appInfo?.app_avatar ?? "",
245
+ appDescription: appInfo?.app_description ?? ""
192
246
  };
193
247
  next();
194
248
  }
195
249
  };
196
250
  ViewContextMiddleware = _ts_decorate3([
197
- (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
+ ])
198
257
  ], ViewContextMiddleware);
199
258
 
200
259
  // src/middlewares/csrf_token/index.ts
@@ -249,7 +308,7 @@ var CsrfTokenMiddleware = class _CsrfTokenMiddleware {
249
308
  res.cookie(cookieKey, token, {
250
309
  maxAge: cookieMaxAge,
251
310
  path: cookiePath,
252
- httpOnly: true,
311
+ httpOnly: false,
253
312
  secure: true,
254
313
  sameSite: "none",
255
314
  partitioned: true
@@ -262,6 +321,160 @@ CsrfTokenMiddleware = _ts_decorate4([
262
321
  (0, import_common4.Injectable)()
263
322
  ], CsrfTokenMiddleware);
264
323
 
324
+ // src/middlewares/api-fallback/index.ts
325
+ function createApiNotFoundResponse(req) {
326
+ return {
327
+ code: 404,
328
+ message: `Cannot ${req.method} ${req.path}`,
329
+ error: "Not Found",
330
+ path: req.path,
331
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
332
+ };
333
+ }
334
+ __name(createApiNotFoundResponse, "createApiNotFoundResponse");
335
+ function getApiPathPrefix() {
336
+ const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
337
+ if (!globalPrefix) {
338
+ return "/api/";
339
+ }
340
+ const normalizedPrefix = globalPrefix.replace(/\/+$/, "");
341
+ return `${normalizedPrefix}/api/`;
342
+ }
343
+ __name(getApiPathPrefix, "getApiPathPrefix");
344
+ function apiResponseInterceptor(req, res, next) {
345
+ const apiPrefix = getApiPathPrefix();
346
+ if (!req.baseUrl.startsWith(apiPrefix)) {
347
+ return next();
348
+ }
349
+ res.render = function() {
350
+ return res.status(404).json(createApiNotFoundResponse(req));
351
+ };
352
+ next();
353
+ }
354
+ __name(apiResponseInterceptor, "apiResponseInterceptor");
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
+
265
478
  // src/modules/platform/config/app.config.ts
266
479
  var import_config = require("@nestjs/config");
267
480
  var NAMESPACE = "app";
@@ -274,16 +487,249 @@ var app_config_default = (0, import_config.registerAs)(NAMESPACE, () => {
274
487
  };
275
488
  });
276
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
+
277
723
  // src/modules/platform/module.ts
278
724
  var import_nestjs_authzpaas = require("@lark-apaas/nestjs-authzpaas");
279
- function _ts_decorate5(decorators, target, key, desc) {
725
+ function _ts_decorate9(decorators, target, key, desc) {
280
726
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
281
727
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
282
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;
283
729
  return c > 3 && r && Object.defineProperty(target, key, r), r;
284
730
  }
285
- __name(_ts_decorate5, "_ts_decorate");
286
- var PLATFORM_MODULE_OPTIONS = "PLATFORM_MODULE_OPTIONS";
731
+ __name(_ts_decorate9, "_ts_decorate");
732
+ var PLATFORM_MODULE_OPTIONS = /* @__PURE__ */ Symbol("PLATFORM_MODULE_OPTIONS");
287
733
  var PlatformModule = class _PlatformModule {
288
734
  static {
289
735
  __name(this, "PlatformModule");
@@ -304,25 +750,31 @@ var PlatformModule = class _PlatformModule {
304
750
  app_config_default
305
751
  ]
306
752
  }),
307
- 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
+ }),
308
760
  import_nestjs_datapaas.DataPaasModule.forRootAsync({
309
761
  imports: [
310
762
  import_config2.ConfigModule,
311
- import_nestjs_logger.LoggerModule
763
+ import_nestjs_logger2.LoggerModule
312
764
  ],
313
765
  inject: [
314
766
  import_config2.ConfigService,
315
- import_nestjs_logger.AppLogger
767
+ import_nestjs_logger2.AppLogger
316
768
  ],
317
769
  useFactory: /* @__PURE__ */ __name(async (...args) => {
318
770
  const configService = args[0];
319
771
  const appLogger = args[1];
320
772
  const drizzleLogger = {
321
773
  logQuery(query, params) {
322
- appLogger.log?.("SQL Query", {
774
+ appLogger.log?.("SQL Query " + JSON.stringify({
323
775
  query,
324
776
  params
325
- }, "Database");
777
+ }), "Database");
326
778
  }
327
779
  };
328
780
  return {
@@ -332,6 +784,7 @@ var PlatformModule = class _PlatformModule {
332
784
  }, "useFactory")
333
785
  }),
334
786
  import_nestjs_authnpaas.AuthNPaasModule.forRoot(),
787
+ import_nestjs_trigger.AutomationModule.forRoot(),
335
788
  import_nestjs_authzpaas.AuthZPaasModule.forRoot()
336
789
  ],
337
790
  providers: [
@@ -340,18 +793,34 @@ var PlatformModule = class _PlatformModule {
340
793
  useValue: options
341
794
  },
342
795
  {
343
- provide: import_core.APP_PIPE,
344
- useValue: new import_common5.ValidationPipe({
796
+ provide: import_core2.APP_PIPE,
797
+ useValue: new import_common9.ValidationPipe({
345
798
  transform: true,
346
799
  transformOptions: {
347
800
  enableImplicitConversion: true
348
801
  }
349
802
  })
350
- }
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
351
817
  ],
352
818
  exports: [
353
819
  import_config2.ConfigModule,
354
- 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
355
824
  ]
356
825
  };
357
826
  }
@@ -360,7 +829,11 @@ var PlatformModule = class _PlatformModule {
360
829
  */
361
830
  configure(consumer) {
362
831
  const options = _PlatformModule.moduleOptions;
363
- consumer.apply(UserContextMiddleware, import_nestjs_logger.LoggerContextMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
832
+ consumer.apply(apiResponseInterceptor).forRoutes("/api/*");
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("/*");
364
837
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
365
838
  if (options.enableCsrf !== false) {
366
839
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -374,22 +847,25 @@ var PlatformModule = class _PlatformModule {
374
847
  }
375
848
  }
376
849
  };
377
- PlatformModule = _ts_decorate5([
378
- (0, import_common5.Global)(),
379
- (0, import_common5.Module)({})
850
+ PlatformModule = _ts_decorate9([
851
+ (0, import_common9.Global)(),
852
+ (0, import_common9.Module)({})
380
853
  ], PlatformModule);
381
854
 
382
855
  // src/setup.ts
383
- var import_nestjs_logger2 = require("@lark-apaas/nestjs-logger");
856
+ var import_nestjs_logger3 = require("@lark-apaas/nestjs-logger");
384
857
  var import_cookie_parser = __toESM(require("cookie-parser"), 1);
385
858
  var import_nestjs_openapi_devtools = require("@lark-apaas/nestjs-openapi-devtools");
386
- async function configureApp(app) {
387
- app.useLogger(app.get(import_nestjs_logger2.AppLogger));
859
+ var defaultPerms = {
860
+ disableSwagger: false
861
+ };
862
+ async function configureApp(app, perms = defaultPerms) {
863
+ app.useLogger(app.get(import_nestjs_logger3.AppLogger));
388
864
  app.flushLogs();
389
865
  app.use((0, import_cookie_parser.default)());
390
866
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
391
867
  app.setGlobalPrefix(globalPrefix);
392
- if (process.env.NODE_ENV !== "production") {
868
+ if (process.env.NODE_ENV !== "production" && perms.disableSwagger !== true) {
393
869
  try {
394
870
  await import_nestjs_openapi_devtools.DevToolsV2Module.mount(app, {
395
871
  basePath: process.env.CLIENT_BASE_PATH,
@@ -406,8 +882,12 @@ __name(configureApp, "configureApp");
406
882
  var import_nestjs_openapi_devtools2 = require("@lark-apaas/nestjs-openapi-devtools");
407
883
  __reExport(index_exports, require("@lark-apaas/nestjs-authnpaas"), module.exports);
408
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");
409
888
  // Annotate the CommonJS export names for ESM import in node:
410
889
  0 && (module.exports = {
890
+ CanRole,
411
891
  CsrfMiddleware,
412
892
  CsrfTokenMiddleware,
413
893
  DevToolsModule,
@@ -417,5 +897,7 @@ __reExport(index_exports, require("@lark-apaas/nestjs-datapaas"), module.exports
417
897
  ViewContextMiddleware,
418
898
  configureApp,
419
899
  ...require("@lark-apaas/nestjs-authnpaas"),
420
- ...require("@lark-apaas/nestjs-datapaas")
900
+ ...require("@lark-apaas/nestjs-datapaas"),
901
+ ...require("@lark-apaas/nestjs-observable"),
902
+ ...require("@lark-apaas/nestjs-trigger")
421
903
  });