@lark-apaas/fullstack-nestjs-core 1.1.4 → 1.1.6-alpha.0

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.d.ts CHANGED
@@ -1,9 +1,13 @@
1
1
  import { NestModule, DynamicModule, MiddlewareConsumer, NestMiddleware } from '@nestjs/common';
2
+ import { HttpClientConfig, PlatformPluginOptions } from '@lark-apaas/http-client';
2
3
  import { NestExpressApplication } from '@nestjs/platform-express';
3
4
  export { DevToolsModule, DevToolsOptions, DevToolsV2Module, DevToolsV2Options } from '@lark-apaas/nestjs-openapi-devtools';
4
5
  import { Request, Response, NextFunction } from 'express';
6
+ import { PlatformHttpClient } from '@lark-apaas/nestjs-common';
5
7
  export * from '@lark-apaas/nestjs-authnpaas';
6
8
  export * from '@lark-apaas/nestjs-datapaas';
9
+ export * from '@lark-apaas/nestjs-observable';
10
+ export * from '@lark-apaas/nestjs-trigger';
7
11
 
8
12
  declare global {
9
13
  namespace Express {
@@ -33,6 +37,13 @@ declare global {
33
37
  /**
34
38
  * PlatformModule 配置选项
35
39
  */
40
+
41
+ interface PlatformHttpClientOptions {
42
+ /** HttpClient 基础配置(超时、headers 等) */
43
+ config?: Omit<HttpClientConfig, 'platform'>;
44
+ /** 平台插件配置(默认启用) */
45
+ platform?: PlatformPluginOptions;
46
+ }
36
47
  interface PlatformModuleOptions {
37
48
  /**
38
49
  * 是否启用 CSRF 保护
@@ -44,6 +55,10 @@ interface PlatformModuleOptions {
44
55
  * 默认: '/api/*'
45
56
  */
46
57
  csrfRoutes?: string | string[];
58
+ /**
59
+ * 平台 HttpClient 配置
60
+ */
61
+ httpClient?: PlatformHttpClientOptions;
47
62
  }
48
63
 
49
64
  declare class PlatformModule implements NestModule {
@@ -94,7 +109,11 @@ declare class UserContextMiddleware implements NestMiddleware {
94
109
  }
95
110
 
96
111
  declare class ViewContextMiddleware implements NestMiddleware {
97
- use(req: Request, res: Response, next: NextFunction): void;
112
+ private readonly client;
113
+ private readonly logger;
114
+ constructor(client: PlatformHttpClient);
115
+ private getAppInfo;
116
+ use(req: Request, res: Response, next: NextFunction): Promise<void>;
98
117
  }
99
118
 
100
119
  /**
@@ -108,4 +127,4 @@ interface ApiNotFoundResponse {
108
127
  timestamp: string;
109
128
  }
110
129
 
111
- export { type ApiNotFoundResponse, CsrfMiddleware, CsrfTokenMiddleware, PlatformModule, type PlatformModuleOptions, UserContextMiddleware, ViewContextMiddleware, configureApp };
130
+ export { type ApiNotFoundResponse, CsrfMiddleware, CsrfTokenMiddleware, type PlatformHttpClientOptions, PlatformModule, type PlatformModuleOptions, UserContextMiddleware, ViewContextMiddleware, configureApp };
package/dist/index.js CHANGED
@@ -4,10 +4,15 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/modules/platform/module.ts
5
5
  import { Global, Module, ValidationPipe } from "@nestjs/common";
6
6
  import { APP_PIPE } from "@nestjs/core";
7
+ import { CommonModule, OBSERVABLE_SERVICE } from "@lark-apaas/nestjs-common";
7
8
  import { ConfigModule, ConfigService } from "@nestjs/config";
8
- import { LoggerModule, AppLogger, LoggerContextMiddleware } from "@lark-apaas/nestjs-logger";
9
+ import { NestjsObservableModule as ObservableModule, Observable } from "@lark-apaas/nestjs-observable";
10
+ import { HttpModule } from "@nestjs/axios";
11
+ import { LoggerModule, AppLogger as AppLogger2, LoggerContextMiddleware } from "@lark-apaas/nestjs-logger";
9
12
  import { DataPaasModule, SqlExecutionContextMiddleware } from "@lark-apaas/nestjs-datapaas";
10
13
  import { AuthNPaasModule } from "@lark-apaas/nestjs-authnpaas";
14
+ import { AutomationModule } from "@lark-apaas/nestjs-trigger";
15
+ import { PLATFORM_HTTP_CLIENT as PLATFORM_HTTP_CLIENT2 } from "@lark-apaas/nestjs-common";
11
16
 
12
17
  // src/middlewares/user-context/index.ts
13
18
  import { Injectable } from "@nestjs/common";
@@ -120,7 +125,8 @@ CsrfMiddleware = _ts_decorate2([
120
125
  ], CsrfMiddleware);
121
126
 
122
127
  // src/middlewares/view-context/index.ts
123
- import { Injectable as Injectable3 } from "@nestjs/common";
128
+ import { Inject, Injectable as Injectable3, Logger } from "@nestjs/common";
129
+ import { PLATFORM_HTTP_CLIENT } from "@lark-apaas/nestjs-common";
124
130
  function _ts_decorate3(decorators, target, key, desc) {
125
131
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
126
132
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -128,13 +134,50 @@ function _ts_decorate3(decorators, target, key, desc) {
128
134
  return c > 3 && r && Object.defineProperty(target, key, r), r;
129
135
  }
130
136
  __name(_ts_decorate3, "_ts_decorate");
131
- var ViewContextMiddleware = class {
137
+ function _ts_metadata(k, v) {
138
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
139
+ }
140
+ __name(_ts_metadata, "_ts_metadata");
141
+ function _ts_param(paramIndex, decorator) {
142
+ return function(target, key) {
143
+ decorator(target, key, paramIndex);
144
+ };
145
+ }
146
+ __name(_ts_param, "_ts_param");
147
+ var ViewContextMiddleware = class _ViewContextMiddleware {
132
148
  static {
133
149
  __name(this, "ViewContextMiddleware");
134
150
  }
135
- use(req, res, next) {
151
+ client;
152
+ logger = new Logger(_ViewContextMiddleware.name);
153
+ constructor(client) {
154
+ this.client = client;
155
+ }
156
+ async getAppInfo(appId) {
157
+ if (!appId) {
158
+ this.logger.warn(`appId is empty, skip get app info`);
159
+ return null;
160
+ }
161
+ try {
162
+ const resp = await this.client.get(`b/${appId}/get_published_v2`);
163
+ if (resp.status !== 200) {
164
+ throw new Error(`Failed to get app info, status: ${resp.status}`);
165
+ }
166
+ const data = await resp.json();
167
+ if (data.status_code !== "0") {
168
+ throw new Error(`Failed to get app info, status_code: ${data.status_code}`);
169
+ }
170
+ return data.data.app_info ?? {};
171
+ } catch (err) {
172
+ this.logger.error(err, "Failed to get app info");
173
+ return null;
174
+ }
175
+ }
176
+ async use(req, res, next) {
136
177
  const { userId, tenantId, appId } = req.userContext;
137
178
  const csrfToken = req.csrfToken;
179
+ const appInfo = await this.getAppInfo(appId);
180
+ this.logger.debug(`appInfo: ${JSON.stringify(appInfo)}`);
138
181
  req.__platform_data__ = {
139
182
  csrfToken: csrfToken ?? "",
140
183
  userId: userId ?? "",
@@ -152,7 +195,12 @@ var ViewContextMiddleware = class {
152
195
  }
153
196
  };
154
197
  ViewContextMiddleware = _ts_decorate3([
155
- Injectable3()
198
+ Injectable3(),
199
+ _ts_param(0, Inject(PLATFORM_HTTP_CLIENT)),
200
+ _ts_metadata("design:type", Function),
201
+ _ts_metadata("design:paramtypes", [
202
+ typeof PlatformHttpClient === "undefined" ? Object : PlatformHttpClient
203
+ ])
156
204
  ], ViewContextMiddleware);
157
205
 
158
206
  // src/middlewares/csrf_token/index.ts
@@ -252,6 +300,128 @@ function apiResponseInterceptor(req, res, next) {
252
300
  }
253
301
  __name(apiResponseInterceptor, "apiResponseInterceptor");
254
302
 
303
+ // src/middlewares/request-context/index.ts
304
+ import { Injectable as Injectable5 } from "@nestjs/common";
305
+ import { RequestContextService } from "@lark-apaas/nestjs-common";
306
+ function _ts_decorate5(decorators, target, key, desc) {
307
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
308
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
309
+ 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;
310
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
311
+ }
312
+ __name(_ts_decorate5, "_ts_decorate");
313
+ function _ts_metadata2(k, v) {
314
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
315
+ }
316
+ __name(_ts_metadata2, "_ts_metadata");
317
+ var RequestContextMiddleware = class {
318
+ static {
319
+ __name(this, "RequestContextMiddleware");
320
+ }
321
+ requestContext;
322
+ constructor(requestContext) {
323
+ this.requestContext = requestContext;
324
+ }
325
+ use(req, _res, next) {
326
+ const path = req.originalUrl ?? req.url;
327
+ const userContext = req.userContext ?? {};
328
+ this.requestContext.run({
329
+ path,
330
+ method: req.method,
331
+ userId: userContext.userId,
332
+ tenantId: userContext.tenantId,
333
+ appId: userContext.appId
334
+ }, () => next());
335
+ }
336
+ };
337
+ RequestContextMiddleware = _ts_decorate5([
338
+ Injectable5(),
339
+ _ts_metadata2("design:type", Function),
340
+ _ts_metadata2("design:paramtypes", [
341
+ typeof RequestContextService === "undefined" ? Object : RequestContextService
342
+ ])
343
+ ], RequestContextMiddleware);
344
+
345
+ // src/services/http-interceptor.service.ts
346
+ import { Injectable as Injectable6 } from "@nestjs/common";
347
+ import { HttpService } from "@nestjs/axios";
348
+ import { AppLogger } from "@lark-apaas/nestjs-logger";
349
+ function _ts_decorate6(decorators, target, key, desc) {
350
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
351
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
352
+ 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;
353
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
354
+ }
355
+ __name(_ts_decorate6, "_ts_decorate");
356
+ function _ts_metadata3(k, v) {
357
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
358
+ }
359
+ __name(_ts_metadata3, "_ts_metadata");
360
+ var HttpInterceptorService = class {
361
+ static {
362
+ __name(this, "HttpInterceptorService");
363
+ }
364
+ httpService;
365
+ logger;
366
+ constructor(httpService, logger) {
367
+ this.httpService = httpService;
368
+ this.logger = logger;
369
+ }
370
+ /**
371
+ * 模块初始化时配置拦截器
372
+ */
373
+ onModuleInit() {
374
+ this.setupInterceptors();
375
+ }
376
+ /**
377
+ * 配置 axios 请求/响应拦截器
378
+ */
379
+ setupInterceptors() {
380
+ const axiosInstance = this.httpService.axiosRef;
381
+ axiosInstance.interceptors.request.use((config) => {
382
+ this.logger.log("HTTP Request", {
383
+ method: config.method?.toUpperCase(),
384
+ url: config.url,
385
+ headers: config.headers,
386
+ params: config.params,
387
+ data: config.data
388
+ }, "HttpService");
389
+ return config;
390
+ }, (error) => {
391
+ this.logger.error("HTTP Request Error", error, "HttpService");
392
+ return Promise.reject(error);
393
+ });
394
+ axiosInstance.interceptors.response.use((response) => {
395
+ this.logger.log("HTTP Response", {
396
+ method: response.config.method?.toUpperCase(),
397
+ url: response.config.url,
398
+ status: response.status,
399
+ statusText: response.statusText,
400
+ data: response.data
401
+ }, "HttpService");
402
+ return response;
403
+ }, (error) => {
404
+ this.logger.error("HTTP Response Error", {
405
+ method: error.config?.method?.toUpperCase(),
406
+ url: error.config?.url,
407
+ status: error.response?.status,
408
+ statusText: error.response?.statusText,
409
+ data: error.response?.data,
410
+ message: error.message
411
+ }, "HttpService");
412
+ return Promise.reject(error);
413
+ });
414
+ }
415
+ };
416
+ HttpInterceptorService = _ts_decorate6([
417
+ Injectable6(),
418
+ _ts_metadata3("design:type", Function),
419
+ _ts_metadata3("design:paramtypes", [
420
+ typeof HttpService === "undefined" ? Object : HttpService,
421
+ typeof AppLogger === "undefined" ? Object : AppLogger
422
+ ])
423
+ ], HttpInterceptorService);
424
+
255
425
  // src/modules/platform/config/app.config.ts
256
426
  import { registerAs } from "@nestjs/config";
257
427
  var NAMESPACE = "app";
@@ -265,19 +435,19 @@ var app_config_default = registerAs(NAMESPACE, () => {
265
435
  });
266
436
 
267
437
  // src/middlewares/debug/index.ts
268
- import { Injectable as Injectable5 } from "@nestjs/common";
438
+ import { Injectable as Injectable7 } from "@nestjs/common";
269
439
  import { HttpAdapterHost } from "@nestjs/core";
270
- function _ts_decorate5(decorators, target, key, desc) {
440
+ function _ts_decorate7(decorators, target, key, desc) {
271
441
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
272
442
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
273
443
  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;
274
444
  return c > 3 && r && Object.defineProperty(target, key, r), r;
275
445
  }
276
- __name(_ts_decorate5, "_ts_decorate");
277
- function _ts_metadata(k, v) {
446
+ __name(_ts_decorate7, "_ts_decorate");
447
+ function _ts_metadata4(k, v) {
278
448
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
279
449
  }
280
- __name(_ts_metadata, "_ts_metadata");
450
+ __name(_ts_metadata4, "_ts_metadata");
281
451
  var processStartTimestamp = Date.now();
282
452
  var FrameworkDebugMiddleware = class {
283
453
  static {
@@ -325,23 +495,201 @@ var FrameworkDebugMiddleware = class {
325
495
  };
326
496
  }
327
497
  };
328
- FrameworkDebugMiddleware = _ts_decorate5([
329
- Injectable5(),
330
- _ts_metadata("design:type", Function),
331
- _ts_metadata("design:paramtypes", [
498
+ FrameworkDebugMiddleware = _ts_decorate7([
499
+ Injectable7(),
500
+ _ts_metadata4("design:type", Function),
501
+ _ts_metadata4("design:paramtypes", [
332
502
  typeof HttpAdapterHost === "undefined" ? Object : HttpAdapterHost
333
503
  ])
334
504
  ], FrameworkDebugMiddleware);
335
505
 
506
+ // src/services/platform-http-client.service.ts
507
+ import { Injectable as Injectable8, Logger as Logger2 } from "@nestjs/common";
508
+ import { HttpClient } from "@lark-apaas/http-client";
509
+ function _ts_decorate8(decorators, target, key, desc) {
510
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
511
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
512
+ 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;
513
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
514
+ }
515
+ __name(_ts_decorate8, "_ts_decorate");
516
+ function _ts_metadata5(k, v) {
517
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
518
+ }
519
+ __name(_ts_metadata5, "_ts_metadata");
520
+ var ProtectedHttpClient = class ProtectedHttpClient2 {
521
+ static {
522
+ __name(this, "ProtectedHttpClient");
523
+ }
524
+ client;
525
+ constructor(client) {
526
+ this.client = client;
527
+ }
528
+ request(config) {
529
+ return this.client.request(config);
530
+ }
531
+ get(url, config) {
532
+ return this.client.get(url, config);
533
+ }
534
+ post(url, data, config) {
535
+ return this.client.post(url, data, config);
536
+ }
537
+ put(url, data, config) {
538
+ return this.client.put(url, data, config);
539
+ }
540
+ patch(url, data, config) {
541
+ return this.client.patch(url, data, config);
542
+ }
543
+ delete(url, config) {
544
+ return this.client.delete(url, config);
545
+ }
546
+ };
547
+ var PlatformHttpClientService = class _PlatformHttpClientService {
548
+ static {
549
+ __name(this, "PlatformHttpClientService");
550
+ }
551
+ client;
552
+ protectedClient;
553
+ logger = new Logger2(_PlatformHttpClientService.name);
554
+ constructor() {
555
+ const baseConfig = {
556
+ timeout: 5e3
557
+ };
558
+ this.client = new HttpClient({
559
+ ...baseConfig,
560
+ platform: {
561
+ enabled: true
562
+ }
563
+ });
564
+ this.protectedClient = new ProtectedHttpClient(this.client);
565
+ this.registerGlobalInterceptors();
566
+ }
567
+ /**
568
+ * 获取受保护的 HttpClient 实例(推荐)
569
+ *
570
+ * 该实例不暴露 interceptors,防止业务代码修改全局拦截器
571
+ *
572
+ * @returns 受保护的 HttpClient 实例
573
+ */
574
+ get instance() {
575
+ return this.protectedClient;
576
+ }
577
+ /**
578
+ * 获取原始 HttpClient 实例(危险)
579
+ *
580
+ * ⚠️ 警告:该实例允许修改拦截器,会影响所有使用全局实例的地方
581
+ *
582
+ * 仅用于特殊场景,不应该暴露给业务代码
583
+ * 如果需要自定义拦截器,请使用 `create()` 方法创建独立实例
584
+ *
585
+ * @internal
586
+ * @returns 原始 HttpClient 实例
587
+ */
588
+ get rawInstance() {
589
+ return this.client;
590
+ }
591
+ /**
592
+ * 创建一个新的独立 HttpClient 实例
593
+ *
594
+ * 适用于需要自定义拦截器或配置的场景
595
+ * 创建的实例完全独立,不会影响全局实例
596
+ *
597
+ * @param options - 配置选项(会与全局配置合并)
598
+ * @returns 完整的 HttpClient 实例(允许修改拦截器)
599
+ *
600
+ * @example
601
+ * ```typescript
602
+ * @Injectable()
603
+ * export class FileService {
604
+ * private fileClient: HttpClient;
605
+ *
606
+ * constructor(private platformHttp: PlatformHttpClientService) {
607
+ * // 创建超时 60 秒的独立实例
608
+ * this.fileClient = this.platformHttp.create({
609
+ * config: { timeout: 60000 }
610
+ * });
611
+ *
612
+ * // 为这个实例注册拦截器(不影响全局实例)
613
+ * this.fileClient.interceptors.request.use((config) => {
614
+ * console.log('File upload starting...');
615
+ * return config;
616
+ * });
617
+ * }
618
+ *
619
+ * async uploadFile(file: Buffer) {
620
+ * return this.fileClient.post('/file/upload', file);
621
+ * }
622
+ * }
623
+ * ```
624
+ */
625
+ create(options) {
626
+ const mergedConfig = {
627
+ timeout: 5e3,
628
+ ...options?.config
629
+ };
630
+ const mergedPlatform = {
631
+ enabled: true,
632
+ ...options?.platform
633
+ };
634
+ return new HttpClient({
635
+ ...mergedConfig,
636
+ platform: mergedPlatform
637
+ });
638
+ }
639
+ /**
640
+ * 注册全局拦截器
641
+ */
642
+ registerGlobalInterceptors() {
643
+ this.client.interceptors.request.use((config) => {
644
+ this.logger.log("Internal HTTP Request", {
645
+ method: config.method?.toUpperCase(),
646
+ url: config.url,
647
+ headers: config.headers,
648
+ params: config.params,
649
+ data: config.data
650
+ }, "HttpService");
651
+ return config;
652
+ }, (error) => {
653
+ this.logger.error("HTTP Request Error", error, "HttpService");
654
+ return Promise.reject(error);
655
+ });
656
+ this.client.interceptors.response.use((response) => {
657
+ this.logger.log("InternalHTTP Response", {
658
+ method: response.config.method?.toUpperCase(),
659
+ url: response.config.url,
660
+ status: response.status,
661
+ statusText: response.statusText,
662
+ data: response.data
663
+ }, "HttpService");
664
+ return response;
665
+ }, (error) => {
666
+ this.logger.error("Internal HTTP Response Error", {
667
+ method: error.config?.method?.toUpperCase(),
668
+ url: error.config?.url,
669
+ status: error.response?.status,
670
+ statusText: error.response?.statusText,
671
+ data: error.response?.data,
672
+ message: error.message
673
+ }, "HttpService");
674
+ return Promise.reject(error);
675
+ });
676
+ }
677
+ };
678
+ PlatformHttpClientService = _ts_decorate8([
679
+ Injectable8(),
680
+ _ts_metadata5("design:type", Function),
681
+ _ts_metadata5("design:paramtypes", [])
682
+ ], PlatformHttpClientService);
683
+
336
684
  // src/modules/platform/module.ts
337
- function _ts_decorate6(decorators, target, key, desc) {
685
+ function _ts_decorate9(decorators, target, key, desc) {
338
686
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
339
687
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
340
688
  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;
341
689
  return c > 3 && r && Object.defineProperty(target, key, r), r;
342
690
  }
343
- __name(_ts_decorate6, "_ts_decorate");
344
- var PLATFORM_MODULE_OPTIONS = "PLATFORM_MODULE_OPTIONS";
691
+ __name(_ts_decorate9, "_ts_decorate");
692
+ var PLATFORM_MODULE_OPTIONS = /* @__PURE__ */ Symbol("PLATFORM_MODULE_OPTIONS");
345
693
  var PlatformModule = class _PlatformModule {
346
694
  static {
347
695
  __name(this, "PlatformModule");
@@ -352,6 +700,7 @@ var PlatformModule = class _PlatformModule {
352
700
  return {
353
701
  module: _PlatformModule,
354
702
  imports: [
703
+ HttpInterceptorService,
355
704
  ConfigModule.forRoot({
356
705
  isGlobal: true,
357
706
  envFilePath: [
@@ -362,7 +711,13 @@ var PlatformModule = class _PlatformModule {
362
711
  app_config_default
363
712
  ]
364
713
  }),
714
+ CommonModule,
715
+ ObservableModule,
365
716
  LoggerModule,
717
+ HttpModule.register({
718
+ timeout: 5e3,
719
+ maxRedirects: 5
720
+ }),
366
721
  DataPaasModule.forRootAsync({
367
722
  imports: [
368
723
  ConfigModule,
@@ -370,17 +725,17 @@ var PlatformModule = class _PlatformModule {
370
725
  ],
371
726
  inject: [
372
727
  ConfigService,
373
- AppLogger
728
+ AppLogger2
374
729
  ],
375
730
  useFactory: /* @__PURE__ */ __name(async (...args) => {
376
731
  const configService = args[0];
377
732
  const appLogger = args[1];
378
733
  const drizzleLogger = {
379
734
  logQuery(query, params) {
380
- appLogger.log?.("SQL Query", {
735
+ appLogger.log?.("SQL Query " + JSON.stringify({
381
736
  query,
382
737
  params
383
- }, "Database");
738
+ }), "Database");
384
739
  }
385
740
  };
386
741
  return {
@@ -389,7 +744,8 @@ var PlatformModule = class _PlatformModule {
389
744
  };
390
745
  }, "useFactory")
391
746
  }),
392
- AuthNPaasModule.forRoot()
747
+ AuthNPaasModule.forRoot(),
748
+ AutomationModule.forRoot()
393
749
  ],
394
750
  providers: [
395
751
  {
@@ -404,11 +760,26 @@ var PlatformModule = class _PlatformModule {
404
760
  enableImplicitConversion: true
405
761
  }
406
762
  })
763
+ },
764
+ {
765
+ provide: OBSERVABLE_SERVICE,
766
+ useClass: Observable
767
+ },
768
+ {
769
+ provide: PLATFORM_HTTP_CLIENT2,
770
+ useFactory: /* @__PURE__ */ __name((svc) => svc.instance, "useFactory"),
771
+ inject: [
772
+ PlatformHttpClientService
773
+ ]
407
774
  }
408
775
  ],
409
776
  exports: [
410
777
  ConfigModule,
411
- LoggerModule
778
+ LoggerModule,
779
+ CommonModule,
780
+ OBSERVABLE_SERVICE,
781
+ PlatformHttpClientService,
782
+ PLATFORM_HTTP_CLIENT2
412
783
  ]
413
784
  };
414
785
  }
@@ -421,7 +792,7 @@ var PlatformModule = class _PlatformModule {
421
792
  if (process.env.NODE_ENV === "development") {
422
793
  consumer.apply(FrameworkDebugMiddleware).forRoutes("/api/__framework__/debug");
423
794
  }
424
- consumer.apply(UserContextMiddleware, LoggerContextMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
795
+ consumer.apply(UserContextMiddleware, RequestContextMiddleware, LoggerContextMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
425
796
  consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
426
797
  if (options.enableCsrf !== false) {
427
798
  const csrfRoutes = options.csrfRoutes || "/api/*";
@@ -435,20 +806,20 @@ var PlatformModule = class _PlatformModule {
435
806
  }
436
807
  }
437
808
  };
438
- PlatformModule = _ts_decorate6([
809
+ PlatformModule = _ts_decorate9([
439
810
  Global(),
440
811
  Module({})
441
812
  ], PlatformModule);
442
813
 
443
814
  // src/setup.ts
444
- import { AppLogger as AppLogger2 } from "@lark-apaas/nestjs-logger";
815
+ import { AppLogger as AppLogger3 } from "@lark-apaas/nestjs-logger";
445
816
  import cookieParser from "cookie-parser";
446
817
  import { DevToolsV2Module } from "@lark-apaas/nestjs-openapi-devtools";
447
818
  var defaultPerms = {
448
819
  disableSwagger: false
449
820
  };
450
821
  async function configureApp(app, perms = defaultPerms) {
451
- app.useLogger(app.get(AppLogger2));
822
+ app.useLogger(app.get(AppLogger3));
452
823
  app.flushLogs();
453
824
  app.use(cookieParser());
454
825
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
@@ -470,6 +841,8 @@ __name(configureApp, "configureApp");
470
841
  import { DevToolsModule, DevToolsV2Module as DevToolsV2Module2 } from "@lark-apaas/nestjs-openapi-devtools";
471
842
  export * from "@lark-apaas/nestjs-authnpaas";
472
843
  export * from "@lark-apaas/nestjs-datapaas";
844
+ export * from "@lark-apaas/nestjs-observable";
845
+ export * from "@lark-apaas/nestjs-trigger";
473
846
  export {
474
847
  CsrfMiddleware,
475
848
  CsrfTokenMiddleware,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/fullstack-nestjs-core",
3
- "version": "1.1.4",
3
+ "version": "1.1.6-alpha.0",
4
4
  "description": "FullStack Nestjs Core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,10 +39,16 @@
39
39
  "prepublishOnly": "npm run build"
40
40
  },
41
41
  "dependencies": {
42
- "@lark-apaas/nestjs-authnpaas": "1.0.2",
42
+ "@lark-apaas/http-client": "0.1.0",
43
+ "@lark-apaas/nestjs-authnpaas": "^1.0.2",
44
+ "@lark-apaas/nestjs-common": "0.1.0",
43
45
  "@lark-apaas/nestjs-datapaas": "^1.0.5",
44
46
  "@lark-apaas/nestjs-logger": "^1.0.2",
47
+ "@lark-apaas/nestjs-observable": "0.0.1-alpha.26",
45
48
  "@lark-apaas/nestjs-openapi-devtools": "^1.0.9",
49
+ "@lark-apaas/nestjs-trigger": "0.0.1-alpha.2",
50
+ "@nestjs/axios": "^4.0.1",
51
+ "axios": "^1.13.2",
46
52
  "cookie-parser": "^1.4.7"
47
53
  },
48
54
  "devDependencies": {