@lark-apaas/fullstack-nestjs-core 1.1.51-beta.0 → 1.1.52-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.cjs CHANGED
@@ -34423,10 +34423,24 @@ __export(index_exports, {
34423
34423
  UserContextMiddleware: () => UserContextMiddleware,
34424
34424
  ViewContextMiddleware: () => ViewContextMiddleware,
34425
34425
  configureApp: () => configureApp,
34426
- createLegacyPathRedirectMiddleware: () => createLegacyPathRedirectMiddleware
34426
+ createLegacyPathRedirectMiddleware: () => createLegacyPathRedirectMiddleware,
34427
+ createLocalDevMiddleware: () => createLocalDevMiddleware,
34428
+ isLocalDev: () => isLocalDev
34427
34429
  });
34428
34430
  module.exports = __toCommonJS(index_exports);
34429
34431
 
34432
+ // src/load-env.ts
34433
+ try {
34434
+ const dotenv = require("dotenv");
34435
+ dotenv.config({
34436
+ path: ".env.local"
34437
+ });
34438
+ dotenv.config({
34439
+ path: ".env"
34440
+ });
34441
+ } catch {
34442
+ }
34443
+
34430
34444
  // src/modules/platform/module.ts
34431
34445
  var import_common16 = require("@nestjs/common");
34432
34446
  var import_core2 = require("@nestjs/core");
@@ -34445,20 +34459,41 @@ var import_nestjs_capability = require("@lark-apaas/nestjs-capability");
34445
34459
  // src/middlewares/user-context/index.ts
34446
34460
  var import_common = require("@nestjs/common");
34447
34461
 
34462
+ // src/utils/parse-suda-webuser.ts
34463
+ function parseSudaWebUserEnv(raw) {
34464
+ if (!raw) return null;
34465
+ try {
34466
+ return JSON.parse(raw);
34467
+ } catch {
34468
+ }
34469
+ try {
34470
+ return JSON.parse(raw.replace(/\\"/g, '"'));
34471
+ } catch {
34472
+ return null;
34473
+ }
34474
+ }
34475
+ __name(parseSudaWebUserEnv, "parseSudaWebUserEnv");
34476
+
34448
34477
  // src/middlewares/user-context/helper.ts
34449
34478
  var sudaWebUserHeaderKey = "x-larkgw-suda-webuser";
34450
34479
  function getWebUserFromHeader(req) {
34451
34480
  const sudaWebUserContent = req.headers[sudaWebUserHeaderKey];
34452
- if (!sudaWebUserContent) {
34453
- return null;
34481
+ if (sudaWebUserContent) {
34482
+ try {
34483
+ const sudaWebUserJsonStr = decodeURIComponent(sudaWebUserContent);
34484
+ const sudaWebUserJson = JSON.parse(sudaWebUserJsonStr);
34485
+ return sudaWebUserJson;
34486
+ } catch (err) {
34487
+ console.error("parse suda webuser from header failed, err=%o", err);
34488
+ return null;
34489
+ }
34454
34490
  }
34455
- try {
34456
- const sudaWebUserJsonStr = decodeURIComponent(sudaWebUserContent);
34457
- const sudaWebUserJson = JSON.parse(sudaWebUserJsonStr);
34458
- return sudaWebUserJson;
34459
- } catch (err) {
34460
- console.error("parse suda webuser from header failed, err=%o", err);
34461
- return null;
34491
+ if (process.env.MIAODA_LOCAL_DEV === "1") {
34492
+ const parsed = parseSudaWebUserEnv(process.env.SUDA_WEBUSER);
34493
+ if (parsed) return parsed;
34494
+ if (process.env.SUDA_WEBUSER) {
34495
+ console.error("parse suda webuser from env failed, value head=%s", process.env.SUDA_WEBUSER.slice(0, 80));
34496
+ }
34462
34497
  }
34463
34498
  return null;
34464
34499
  }
@@ -36553,6 +36588,43 @@ function createLegacyPathRedirectMiddleware() {
36553
36588
  }
36554
36589
  __name(createLegacyPathRedirectMiddleware, "createLegacyPathRedirectMiddleware");
36555
36590
 
36591
+ // src/middlewares/local-dev/index.ts
36592
+ var CSRF_COOKIE_KEY = "suda-csrf-token";
36593
+ var CSRF_HEADER_KEY = "x-suda-csrf-token";
36594
+ var WEBUSER_HEADER_KEY = "x-larkgw-suda-webuser";
36595
+ function isLocalDev() {
36596
+ if (process.env.NODE_ENV === "production") return false;
36597
+ const flag = process.env.MIAODA_LOCAL_DEV;
36598
+ return flag === "1" || flag === "true";
36599
+ }
36600
+ __name(isLocalDev, "isLocalDev");
36601
+ function extractCsrfFromCookie(cookieHeader) {
36602
+ if (!cookieHeader) return void 0;
36603
+ const re = new RegExp(`(?:^|;\\s*)${CSRF_COOKIE_KEY}=([^;]+)`);
36604
+ const m = cookieHeader.match(re);
36605
+ return m?.[1];
36606
+ }
36607
+ __name(extractCsrfFromCookie, "extractCsrfFromCookie");
36608
+ function createLocalDevMiddleware() {
36609
+ let webUserHeader = "";
36610
+ const parsed = parseSudaWebUserEnv(process.env.SUDA_WEBUSER);
36611
+ if (parsed) {
36612
+ webUserHeader = encodeURIComponent(JSON.stringify(parsed));
36613
+ }
36614
+ return /* @__PURE__ */ __name(function localDevMiddleware(req, _res, next) {
36615
+ const headers = req.headers;
36616
+ if (!headers[CSRF_HEADER_KEY]) {
36617
+ const token = extractCsrfFromCookie(req.headers.cookie);
36618
+ if (token) headers[CSRF_HEADER_KEY] = token;
36619
+ }
36620
+ if (webUserHeader && !headers[WEBUSER_HEADER_KEY]) {
36621
+ headers[WEBUSER_HEADER_KEY] = webUserHeader;
36622
+ }
36623
+ next();
36624
+ }, "localDevMiddleware");
36625
+ }
36626
+ __name(createLocalDevMiddleware, "createLocalDevMiddleware");
36627
+
36556
36628
  // src/setup.ts
36557
36629
  var DEFAULT_BODY_LIMIT = "1mb";
36558
36630
  var defaultPerms = {
@@ -36570,6 +36642,9 @@ async function configureApp(app, perms = defaultPerms) {
36570
36642
  extended: true
36571
36643
  }));
36572
36644
  app.use((0, import_cookie_parser.default)());
36645
+ if (isLocalDev()) {
36646
+ app.use(createLocalDevMiddleware());
36647
+ }
36573
36648
  app.use(createLegacyPathRedirectMiddleware());
36574
36649
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
36575
36650
  app.setGlobalPrefix(globalPrefix);
@@ -36621,6 +36696,8 @@ var import_nestjs_authzpaas2 = require("@lark-apaas/nestjs-authzpaas");
36621
36696
  ViewContextMiddleware,
36622
36697
  configureApp,
36623
36698
  createLegacyPathRedirectMiddleware,
36699
+ createLocalDevMiddleware,
36700
+ isLocalDev,
36624
36701
  ...require("@lark-apaas/nestjs-authnpaas"),
36625
36702
  ...require("@lark-apaas/nestjs-capability"),
36626
36703
  ...require("@lark-apaas/nestjs-datapaas"),
package/dist/index.d.cts CHANGED
@@ -7,7 +7,7 @@ import { NestExpressApplication } from '@nestjs/platform-express';
7
7
  import { PlatformHttpClient, RequestContextService, ObservableService } from '@lark-apaas/nestjs-common';
8
8
  export { AutoTrace } from '@lark-apaas/nestjs-common';
9
9
  export { DevToolsModule, DevToolsOptions, DevToolsV2Module, DevToolsV2Options } from '@lark-apaas/nestjs-openapi-devtools';
10
- import { Request, Response, NextFunction } from 'express';
10
+ import { Request, Response, NextFunction, RequestHandler } from 'express';
11
11
  import * as _lark_apaas_file_service from '@lark-apaas/file-service';
12
12
  import { FileBody, UploadOptions, FileDownloadBuilder, SearchOptions } from '@lark-apaas/file-service';
13
13
  export * from '@lark-apaas/file-service';
@@ -230,6 +230,9 @@ declare class ViewContextMiddleware implements NestMiddleware {
230
230
  */
231
231
  declare function createLegacyPathRedirectMiddleware(): (req: Request, res: Response, next: NextFunction) => void;
232
232
 
233
+ declare function isLocalDev(): boolean;
234
+ declare function createLocalDevMiddleware(): RequestHandler;
235
+
233
236
  /**
234
237
  * API 404 响应格式
235
238
  */
@@ -411,4 +414,4 @@ declare class PlatformHttpClientService {
411
414
  private registerInterceptorsForClient;
412
415
  }
413
416
 
414
- export { type ApiNotFoundResponse, CsrfMiddleware, CsrfTokenMiddleware, FileService, HtmlHotUpdateModule, HtmlHotUpdateService, type PlatformHttpClientOptions, PlatformHttpClientService, PlatformModule, type PlatformModuleOptions, StaticModule, UserContextMiddleware, ViewContextMiddleware, configureApp, createLegacyPathRedirectMiddleware };
417
+ export { type ApiNotFoundResponse, CsrfMiddleware, CsrfTokenMiddleware, FileService, HtmlHotUpdateModule, HtmlHotUpdateService, type PlatformHttpClientOptions, PlatformHttpClientService, PlatformModule, type PlatformModuleOptions, StaticModule, UserContextMiddleware, ViewContextMiddleware, configureApp, createLegacyPathRedirectMiddleware, createLocalDevMiddleware, isLocalDev };
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { NestExpressApplication } from '@nestjs/platform-express';
7
7
  import { PlatformHttpClient, RequestContextService, ObservableService } from '@lark-apaas/nestjs-common';
8
8
  export { AutoTrace } from '@lark-apaas/nestjs-common';
9
9
  export { DevToolsModule, DevToolsOptions, DevToolsV2Module, DevToolsV2Options } from '@lark-apaas/nestjs-openapi-devtools';
10
- import { Request, Response, NextFunction } from 'express';
10
+ import { Request, Response, NextFunction, RequestHandler } from 'express';
11
11
  import * as _lark_apaas_file_service from '@lark-apaas/file-service';
12
12
  import { FileBody, UploadOptions, FileDownloadBuilder, SearchOptions } from '@lark-apaas/file-service';
13
13
  export * from '@lark-apaas/file-service';
@@ -230,6 +230,9 @@ declare class ViewContextMiddleware implements NestMiddleware {
230
230
  */
231
231
  declare function createLegacyPathRedirectMiddleware(): (req: Request, res: Response, next: NextFunction) => void;
232
232
 
233
+ declare function isLocalDev(): boolean;
234
+ declare function createLocalDevMiddleware(): RequestHandler;
235
+
233
236
  /**
234
237
  * API 404 响应格式
235
238
  */
@@ -411,4 +414,4 @@ declare class PlatformHttpClientService {
411
414
  private registerInterceptorsForClient;
412
415
  }
413
416
 
414
- export { type ApiNotFoundResponse, CsrfMiddleware, CsrfTokenMiddleware, FileService, HtmlHotUpdateModule, HtmlHotUpdateService, type PlatformHttpClientOptions, PlatformHttpClientService, PlatformModule, type PlatformModuleOptions, StaticModule, UserContextMiddleware, ViewContextMiddleware, configureApp, createLegacyPathRedirectMiddleware };
417
+ export { type ApiNotFoundResponse, CsrfMiddleware, CsrfTokenMiddleware, FileService, HtmlHotUpdateModule, HtmlHotUpdateService, type PlatformHttpClientOptions, PlatformHttpClientService, PlatformModule, type PlatformModuleOptions, StaticModule, UserContextMiddleware, ViewContextMiddleware, configureApp, createLegacyPathRedirectMiddleware, createLocalDevMiddleware, isLocalDev };
package/dist/index.js CHANGED
@@ -34400,6 +34400,18 @@ var require_express2 = __commonJS({
34400
34400
  }
34401
34401
  });
34402
34402
 
34403
+ // src/load-env.ts
34404
+ try {
34405
+ const dotenv = __require("dotenv");
34406
+ dotenv.config({
34407
+ path: ".env.local"
34408
+ });
34409
+ dotenv.config({
34410
+ path: ".env"
34411
+ });
34412
+ } catch {
34413
+ }
34414
+
34403
34415
  // src/modules/platform/module.ts
34404
34416
  import { Global, Module as Module3, ValidationPipe } from "@nestjs/common";
34405
34417
  import { APP_INTERCEPTOR, APP_PIPE } from "@nestjs/core";
@@ -34418,20 +34430,41 @@ import { CapabilityModule } from "@lark-apaas/nestjs-capability";
34418
34430
  // src/middlewares/user-context/index.ts
34419
34431
  import { Injectable } from "@nestjs/common";
34420
34432
 
34433
+ // src/utils/parse-suda-webuser.ts
34434
+ function parseSudaWebUserEnv(raw) {
34435
+ if (!raw) return null;
34436
+ try {
34437
+ return JSON.parse(raw);
34438
+ } catch {
34439
+ }
34440
+ try {
34441
+ return JSON.parse(raw.replace(/\\"/g, '"'));
34442
+ } catch {
34443
+ return null;
34444
+ }
34445
+ }
34446
+ __name(parseSudaWebUserEnv, "parseSudaWebUserEnv");
34447
+
34421
34448
  // src/middlewares/user-context/helper.ts
34422
34449
  var sudaWebUserHeaderKey = "x-larkgw-suda-webuser";
34423
34450
  function getWebUserFromHeader(req) {
34424
34451
  const sudaWebUserContent = req.headers[sudaWebUserHeaderKey];
34425
- if (!sudaWebUserContent) {
34426
- return null;
34452
+ if (sudaWebUserContent) {
34453
+ try {
34454
+ const sudaWebUserJsonStr = decodeURIComponent(sudaWebUserContent);
34455
+ const sudaWebUserJson = JSON.parse(sudaWebUserJsonStr);
34456
+ return sudaWebUserJson;
34457
+ } catch (err) {
34458
+ console.error("parse suda webuser from header failed, err=%o", err);
34459
+ return null;
34460
+ }
34427
34461
  }
34428
- try {
34429
- const sudaWebUserJsonStr = decodeURIComponent(sudaWebUserContent);
34430
- const sudaWebUserJson = JSON.parse(sudaWebUserJsonStr);
34431
- return sudaWebUserJson;
34432
- } catch (err) {
34433
- console.error("parse suda webuser from header failed, err=%o", err);
34434
- return null;
34462
+ if (process.env.MIAODA_LOCAL_DEV === "1") {
34463
+ const parsed = parseSudaWebUserEnv(process.env.SUDA_WEBUSER);
34464
+ if (parsed) return parsed;
34465
+ if (process.env.SUDA_WEBUSER) {
34466
+ console.error("parse suda webuser from env failed, value head=%s", process.env.SUDA_WEBUSER.slice(0, 80));
34467
+ }
34435
34468
  }
34436
34469
  return null;
34437
34470
  }
@@ -36526,6 +36559,43 @@ function createLegacyPathRedirectMiddleware() {
36526
36559
  }
36527
36560
  __name(createLegacyPathRedirectMiddleware, "createLegacyPathRedirectMiddleware");
36528
36561
 
36562
+ // src/middlewares/local-dev/index.ts
36563
+ var CSRF_COOKIE_KEY = "suda-csrf-token";
36564
+ var CSRF_HEADER_KEY = "x-suda-csrf-token";
36565
+ var WEBUSER_HEADER_KEY = "x-larkgw-suda-webuser";
36566
+ function isLocalDev() {
36567
+ if (process.env.NODE_ENV === "production") return false;
36568
+ const flag = process.env.MIAODA_LOCAL_DEV;
36569
+ return flag === "1" || flag === "true";
36570
+ }
36571
+ __name(isLocalDev, "isLocalDev");
36572
+ function extractCsrfFromCookie(cookieHeader) {
36573
+ if (!cookieHeader) return void 0;
36574
+ const re = new RegExp(`(?:^|;\\s*)${CSRF_COOKIE_KEY}=([^;]+)`);
36575
+ const m = cookieHeader.match(re);
36576
+ return m?.[1];
36577
+ }
36578
+ __name(extractCsrfFromCookie, "extractCsrfFromCookie");
36579
+ function createLocalDevMiddleware() {
36580
+ let webUserHeader = "";
36581
+ const parsed = parseSudaWebUserEnv(process.env.SUDA_WEBUSER);
36582
+ if (parsed) {
36583
+ webUserHeader = encodeURIComponent(JSON.stringify(parsed));
36584
+ }
36585
+ return /* @__PURE__ */ __name(function localDevMiddleware(req, _res, next) {
36586
+ const headers = req.headers;
36587
+ if (!headers[CSRF_HEADER_KEY]) {
36588
+ const token = extractCsrfFromCookie(req.headers.cookie);
36589
+ if (token) headers[CSRF_HEADER_KEY] = token;
36590
+ }
36591
+ if (webUserHeader && !headers[WEBUSER_HEADER_KEY]) {
36592
+ headers[WEBUSER_HEADER_KEY] = webUserHeader;
36593
+ }
36594
+ next();
36595
+ }, "localDevMiddleware");
36596
+ }
36597
+ __name(createLocalDevMiddleware, "createLocalDevMiddleware");
36598
+
36529
36599
  // src/setup.ts
36530
36600
  var DEFAULT_BODY_LIMIT = "1mb";
36531
36601
  var defaultPerms = {
@@ -36543,6 +36613,9 @@ async function configureApp(app, perms = defaultPerms) {
36543
36613
  extended: true
36544
36614
  }));
36545
36615
  app.use(cookieParser());
36616
+ if (isLocalDev()) {
36617
+ app.use(createLocalDevMiddleware());
36618
+ }
36546
36619
  app.use(createLegacyPathRedirectMiddleware());
36547
36620
  const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
36548
36621
  app.setGlobalPrefix(globalPrefix);
@@ -36592,7 +36665,9 @@ export {
36592
36665
  UserContextMiddleware,
36593
36666
  ViewContextMiddleware,
36594
36667
  configureApp,
36595
- createLegacyPathRedirectMiddleware
36668
+ createLegacyPathRedirectMiddleware,
36669
+ createLocalDevMiddleware,
36670
+ isLocalDev
36596
36671
  };
36597
36672
  /*! Bundled license information:
36598
36673
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/fullstack-nestjs-core",
3
- "version": "1.1.51-beta.0",
3
+ "version": "1.1.52-alpha.0",
4
4
  "description": "FullStack Nestjs Core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -40,20 +40,21 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@lark-apaas/file-service": "^0.1.2",
43
- "@lark-apaas/http-client": "^0.1.6",
44
- "@lark-apaas/nestjs-authnpaas": "1.0.4-beta.0",
45
- "@lark-apaas/nestjs-authzpaas": "0.1.9-beta.0",
46
- "@lark-apaas/nestjs-capability": "0.1.14-beta.0",
47
- "@lark-apaas/nestjs-common": "0.1.9-beta.0",
48
- "@lark-apaas/nestjs-datapaas": "1.0.21-beta.0",
49
- "@lark-apaas/nestjs-http-forwarder": "0.1.3-beta.0",
50
- "@lark-apaas/nestjs-logger": "1.0.17-beta.0",
51
- "@lark-apaas/nestjs-observable": "0.0.12-beta.0",
43
+ "@lark-apaas/http-client": "0.1.7-alpha.7",
44
+ "@lark-apaas/nestjs-authnpaas": "^1.0.3",
45
+ "@lark-apaas/nestjs-authzpaas": "^0.1.8",
46
+ "@lark-apaas/nestjs-capability": "^0.1.13",
47
+ "@lark-apaas/nestjs-common": "^0.1.8",
48
+ "@lark-apaas/nestjs-datapaas": "^1.0.20",
49
+ "@lark-apaas/nestjs-http-forwarder": "^0.1.2",
50
+ "@lark-apaas/nestjs-logger": "^1.0.16",
51
+ "@lark-apaas/nestjs-observable": "^0.0.11",
52
52
  "@lark-apaas/nestjs-openapi-devtools": "^1.0.10",
53
53
  "@lark-apaas/nestjs-trigger": "^0.0.3",
54
54
  "@nestjs/axios": "^4.0.1",
55
55
  "axios": "^1.13.2",
56
- "cookie-parser": "^1.4.7"
56
+ "cookie-parser": "^1.4.7",
57
+ "dotenv": "^16.4.5"
57
58
  },
58
59
  "devDependencies": {
59
60
  "@nestjs/common": "^10.4.20",