@lark-apaas/fullstack-nestjs-core 1.0.17-alpha.1 → 1.1.0-alpha.1
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/package.json +4 -3
- package/dist/index.cjs +0 -398
- package/dist/index.d.cts +0 -85
- package/dist/index.d.ts +0 -85
- package/dist/index.js +0 -355
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/fullstack-nestjs-core",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0-alpha.1",
|
|
4
4
|
"description": "FullStack Nestjs Core",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@lark-apaas/nestjs-authnpaas": "^1.0.1",
|
|
42
42
|
"@lark-apaas/nestjs-datapaas": "^1.0.5",
|
|
43
|
-
"@lark-apaas/nestjs-logger": "^1.0.2",
|
|
43
|
+
"@lark-apaas/nestjs-logger": "^1.0.2-alpha.1",
|
|
44
|
+
"@lark-apaas/nestjs-openapi-devtools": "^1.0.7",
|
|
44
45
|
"cookie-parser": "^1.4.7"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
@@ -63,4 +64,4 @@
|
|
|
63
64
|
"class-validator": "^0.14.2",
|
|
64
65
|
"drizzle-orm": "0.44.6"
|
|
65
66
|
}
|
|
66
|
-
}
|
|
67
|
+
}
|
package/dist/index.cjs
DELETED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
-
var __export = (target, all) => {
|
|
10
|
-
for (var name in all)
|
|
11
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
-
};
|
|
13
|
-
var __copyProps = (to, from, except, desc) => {
|
|
14
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
-
for (let key of __getOwnPropNames(from))
|
|
16
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
-
}
|
|
19
|
-
return to;
|
|
20
|
-
};
|
|
21
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
22
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
-
mod
|
|
29
|
-
));
|
|
30
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
-
|
|
32
|
-
// src/index.ts
|
|
33
|
-
var index_exports = {};
|
|
34
|
-
__export(index_exports, {
|
|
35
|
-
CsrfMiddleware: () => CsrfMiddleware,
|
|
36
|
-
CsrfTokenMiddleware: () => CsrfTokenMiddleware,
|
|
37
|
-
PlatformModule: () => PlatformModule,
|
|
38
|
-
UserContextMiddleware: () => UserContextMiddleware,
|
|
39
|
-
ViewContextMiddleware: () => ViewContextMiddleware,
|
|
40
|
-
configureApp: () => configureApp
|
|
41
|
-
});
|
|
42
|
-
module.exports = __toCommonJS(index_exports);
|
|
43
|
-
|
|
44
|
-
// src/modules/platform/module.ts
|
|
45
|
-
var import_common5 = require("@nestjs/common");
|
|
46
|
-
var import_core = require("@nestjs/core");
|
|
47
|
-
var import_config2 = require("@nestjs/config");
|
|
48
|
-
var import_nestjs_logger = require("@lark-apaas/nestjs-logger");
|
|
49
|
-
var import_nestjs_datapaas = require("@lark-apaas/nestjs-datapaas");
|
|
50
|
-
var import_nestjs_authnpaas = require("@lark-apaas/nestjs-authnpaas");
|
|
51
|
-
|
|
52
|
-
// src/middlewares/user-context/index.ts
|
|
53
|
-
var import_common = require("@nestjs/common");
|
|
54
|
-
|
|
55
|
-
// src/middlewares/user-context/helper.ts
|
|
56
|
-
var sudaWebUserHeaderKey = "x-larkgw-suda-webuser";
|
|
57
|
-
function getWebUserFromHeader(req) {
|
|
58
|
-
const sudaWebUserContent = req.headers[sudaWebUserHeaderKey];
|
|
59
|
-
if (!sudaWebUserContent) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
try {
|
|
63
|
-
const sudaWebUserJsonStr = decodeURIComponent(sudaWebUserContent);
|
|
64
|
-
const sudaWebUserJson = JSON.parse(sudaWebUserJsonStr);
|
|
65
|
-
return sudaWebUserJson;
|
|
66
|
-
} catch (err) {
|
|
67
|
-
console.error("parse suda webuser from header failed, err=%o", err);
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
__name(getWebUserFromHeader, "getWebUserFromHeader");
|
|
73
|
-
|
|
74
|
-
// src/middlewares/user-context/index.ts
|
|
75
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
76
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
77
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
78
|
-
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;
|
|
79
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
80
|
-
}
|
|
81
|
-
__name(_ts_decorate, "_ts_decorate");
|
|
82
|
-
var UserContextMiddleware = class {
|
|
83
|
-
static {
|
|
84
|
-
__name(this, "UserContextMiddleware");
|
|
85
|
-
}
|
|
86
|
-
use(req, _res, next) {
|
|
87
|
-
const webUser = getWebUserFromHeader(req);
|
|
88
|
-
req.userContext = {
|
|
89
|
-
userId: webUser?.user_id,
|
|
90
|
-
tenantId: webUser?.tenant_id,
|
|
91
|
-
appId: webUser?.app_id ?? "",
|
|
92
|
-
loginUrl: webUser?.login_url ?? ""
|
|
93
|
-
};
|
|
94
|
-
next();
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
UserContextMiddleware = _ts_decorate([
|
|
98
|
-
(0, import_common.Injectable)()
|
|
99
|
-
], UserContextMiddleware);
|
|
100
|
-
|
|
101
|
-
// src/middlewares/csrf/index.ts
|
|
102
|
-
var import_common2 = require("@nestjs/common");
|
|
103
|
-
|
|
104
|
-
// src/middlewares/csrf/helper.ts
|
|
105
|
-
function resolveCsrfOptions(options) {
|
|
106
|
-
return {
|
|
107
|
-
...options,
|
|
108
|
-
headerKey: options.headerKey ?? "x-suda-csrf-token",
|
|
109
|
-
cookieKey: options.cookieKey ?? "suda-csrf-token"
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
__name(resolveCsrfOptions, "resolveCsrfOptions");
|
|
113
|
-
function sendForbidden(res, message) {
|
|
114
|
-
res.status(403).send(`Forbidden\uFF0C${message}`);
|
|
115
|
-
}
|
|
116
|
-
__name(sendForbidden, "sendForbidden");
|
|
117
|
-
|
|
118
|
-
// src/middlewares/csrf/index.ts
|
|
119
|
-
function _ts_decorate2(decorators, target, key, desc) {
|
|
120
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
121
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
122
|
-
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;
|
|
123
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
124
|
-
}
|
|
125
|
-
__name(_ts_decorate2, "_ts_decorate");
|
|
126
|
-
var CsrfMiddleware = class _CsrfMiddleware {
|
|
127
|
-
static {
|
|
128
|
-
__name(this, "CsrfMiddleware");
|
|
129
|
-
}
|
|
130
|
-
static options = resolveCsrfOptions({});
|
|
131
|
-
static configure(opts) {
|
|
132
|
-
this.options = resolveCsrfOptions(opts);
|
|
133
|
-
}
|
|
134
|
-
use(req, res, next) {
|
|
135
|
-
const { headerKey, cookieKey } = _CsrfMiddleware.options;
|
|
136
|
-
const cookieCsrfToken = req.cookies[cookieKey.toLowerCase()];
|
|
137
|
-
if (!cookieCsrfToken) {
|
|
138
|
-
sendForbidden(res, "csrf token not found in cookie.");
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
const headerCsrfToken = req.headers[headerKey.toLowerCase()];
|
|
142
|
-
if (!headerCsrfToken) {
|
|
143
|
-
sendForbidden(res, "csrf token not found in header.");
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
if (cookieCsrfToken !== headerCsrfToken) {
|
|
147
|
-
sendForbidden(res, "csrf token not match.");
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
next();
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
CsrfMiddleware = _ts_decorate2([
|
|
154
|
-
(0, import_common2.Injectable)()
|
|
155
|
-
], CsrfMiddleware);
|
|
156
|
-
|
|
157
|
-
// src/middlewares/view-context/index.ts
|
|
158
|
-
var import_common3 = require("@nestjs/common");
|
|
159
|
-
function _ts_decorate3(decorators, target, key, desc) {
|
|
160
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
161
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
162
|
-
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;
|
|
163
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
164
|
-
}
|
|
165
|
-
__name(_ts_decorate3, "_ts_decorate");
|
|
166
|
-
var ViewContextMiddleware = class {
|
|
167
|
-
static {
|
|
168
|
-
__name(this, "ViewContextMiddleware");
|
|
169
|
-
}
|
|
170
|
-
use(req, res, next) {
|
|
171
|
-
const { userId, tenantId, appId } = req.userContext;
|
|
172
|
-
const csrfToken = req.csrfToken;
|
|
173
|
-
req.__platform_data__ = {
|
|
174
|
-
csrfToken: csrfToken ?? "",
|
|
175
|
-
userId: userId ?? "",
|
|
176
|
-
appId: appId ?? "",
|
|
177
|
-
tenantId
|
|
178
|
-
};
|
|
179
|
-
res.locals = {
|
|
180
|
-
...res.locals ?? {},
|
|
181
|
-
csrfToken: csrfToken ?? "",
|
|
182
|
-
userId: userId ?? "",
|
|
183
|
-
tenantId: tenantId ?? "",
|
|
184
|
-
appId: appId ?? ""
|
|
185
|
-
};
|
|
186
|
-
next();
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
ViewContextMiddleware = _ts_decorate3([
|
|
190
|
-
(0, import_common3.Injectable)()
|
|
191
|
-
], ViewContextMiddleware);
|
|
192
|
-
|
|
193
|
-
// src/middlewares/csrf_token/index.ts
|
|
194
|
-
var import_common4 = require("@nestjs/common");
|
|
195
|
-
|
|
196
|
-
// src/middlewares/csrf_token/helper.ts
|
|
197
|
-
var import_crypto = __toESM(require("crypto"), 1);
|
|
198
|
-
function resolveCsrfTokenOptions(options) {
|
|
199
|
-
return {
|
|
200
|
-
...options,
|
|
201
|
-
cookieKey: options.cookieKey ?? "suda-csrf-token",
|
|
202
|
-
cookieMaxAge: options.cookieMaxAge ?? 1e3 * 60 * 60 * 24 * 30,
|
|
203
|
-
cookiePath: options.cookiePath ?? "/"
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
__name(resolveCsrfTokenOptions, "resolveCsrfTokenOptions");
|
|
207
|
-
function genToken() {
|
|
208
|
-
const ts = Math.floor(Date.now() / 1e3);
|
|
209
|
-
const randInt64 = BigInt("0x" + import_crypto.default.randomBytes(8).toString("hex")).toString();
|
|
210
|
-
const s = `${randInt64}.${ts}`;
|
|
211
|
-
const sha1 = import_crypto.default.createHash("sha1");
|
|
212
|
-
sha1.update(s);
|
|
213
|
-
return `${sha1.digest("hex")}-${ts}`;
|
|
214
|
-
}
|
|
215
|
-
__name(genToken, "genToken");
|
|
216
|
-
|
|
217
|
-
// src/middlewares/csrf_token/index.ts
|
|
218
|
-
function _ts_decorate4(decorators, target, key, desc) {
|
|
219
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
220
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
221
|
-
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;
|
|
222
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
223
|
-
}
|
|
224
|
-
__name(_ts_decorate4, "_ts_decorate");
|
|
225
|
-
var CsrfTokenMiddleware = class _CsrfTokenMiddleware {
|
|
226
|
-
static {
|
|
227
|
-
__name(this, "CsrfTokenMiddleware");
|
|
228
|
-
}
|
|
229
|
-
static options = resolveCsrfTokenOptions({});
|
|
230
|
-
static configure(opts) {
|
|
231
|
-
this.options = resolveCsrfTokenOptions(opts);
|
|
232
|
-
}
|
|
233
|
-
use(req, res, next) {
|
|
234
|
-
const { cookieKey, cookieMaxAge, cookiePath } = _CsrfTokenMiddleware.options;
|
|
235
|
-
const originToken = req.cookies[cookieKey.toLowerCase()];
|
|
236
|
-
if (originToken) {
|
|
237
|
-
req.csrfToken = originToken;
|
|
238
|
-
next();
|
|
239
|
-
} else {
|
|
240
|
-
const token = genToken();
|
|
241
|
-
req.csrfToken = token;
|
|
242
|
-
res.cookie(cookieKey, token, {
|
|
243
|
-
maxAge: cookieMaxAge,
|
|
244
|
-
path: cookiePath,
|
|
245
|
-
httpOnly: true,
|
|
246
|
-
secure: true,
|
|
247
|
-
sameSite: "none",
|
|
248
|
-
partitioned: true
|
|
249
|
-
});
|
|
250
|
-
next();
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
CsrfTokenMiddleware = _ts_decorate4([
|
|
255
|
-
(0, import_common4.Injectable)()
|
|
256
|
-
], CsrfTokenMiddleware);
|
|
257
|
-
|
|
258
|
-
// src/modules/platform/config/app.config.ts
|
|
259
|
-
var import_config = require("@nestjs/config");
|
|
260
|
-
var NAMESPACE = "app";
|
|
261
|
-
var app_config_default = (0, import_config.registerAs)(NAMESPACE, () => {
|
|
262
|
-
return {
|
|
263
|
-
host: process.env.SERVER_HOST ?? "localhost",
|
|
264
|
-
port: Number(process.env.SERVER_PORT ?? 3e3),
|
|
265
|
-
clientBasePath: process.env.CLIENT_BASE_PATH ?? "/",
|
|
266
|
-
databaseUrl: process.env.SUDA_DATABASE_URL ?? ""
|
|
267
|
-
};
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
// src/modules/platform/module.ts
|
|
271
|
-
function _ts_decorate5(decorators, target, key, desc) {
|
|
272
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
273
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
274
|
-
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;
|
|
275
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
276
|
-
}
|
|
277
|
-
__name(_ts_decorate5, "_ts_decorate");
|
|
278
|
-
var PLATFORM_MODULE_OPTIONS = "PLATFORM_MODULE_OPTIONS";
|
|
279
|
-
var PlatformModule = class _PlatformModule {
|
|
280
|
-
static {
|
|
281
|
-
__name(this, "PlatformModule");
|
|
282
|
-
}
|
|
283
|
-
static moduleOptions = {};
|
|
284
|
-
static forRoot(options = {}) {
|
|
285
|
-
_PlatformModule.moduleOptions = options;
|
|
286
|
-
return {
|
|
287
|
-
module: _PlatformModule,
|
|
288
|
-
imports: [
|
|
289
|
-
import_config2.ConfigModule.forRoot({
|
|
290
|
-
isGlobal: true,
|
|
291
|
-
envFilePath: [
|
|
292
|
-
".env.local",
|
|
293
|
-
".env"
|
|
294
|
-
],
|
|
295
|
-
load: [
|
|
296
|
-
app_config_default
|
|
297
|
-
]
|
|
298
|
-
}),
|
|
299
|
-
import_nestjs_logger.LoggerModule,
|
|
300
|
-
import_nestjs_datapaas.DataPaasModule.forRootAsync({
|
|
301
|
-
imports: [
|
|
302
|
-
import_config2.ConfigModule,
|
|
303
|
-
import_nestjs_logger.LoggerModule
|
|
304
|
-
],
|
|
305
|
-
inject: [
|
|
306
|
-
import_config2.ConfigService,
|
|
307
|
-
import_nestjs_logger.AppLogger
|
|
308
|
-
],
|
|
309
|
-
useFactory: /* @__PURE__ */ __name(async (...args) => {
|
|
310
|
-
const configService = args[0];
|
|
311
|
-
const appLogger = args[1];
|
|
312
|
-
const drizzleLogger = {
|
|
313
|
-
logQuery(query, params) {
|
|
314
|
-
appLogger.log?.("SQL Query", {
|
|
315
|
-
query,
|
|
316
|
-
params
|
|
317
|
-
}, "Database");
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
return {
|
|
321
|
-
connectionString: configService.get("app.databaseUrl") ?? "",
|
|
322
|
-
logger: drizzleLogger
|
|
323
|
-
};
|
|
324
|
-
}, "useFactory")
|
|
325
|
-
}),
|
|
326
|
-
import_nestjs_authnpaas.AuthNPaasModule.forRoot()
|
|
327
|
-
],
|
|
328
|
-
providers: [
|
|
329
|
-
{
|
|
330
|
-
provide: PLATFORM_MODULE_OPTIONS,
|
|
331
|
-
useValue: options
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
provide: import_core.APP_PIPE,
|
|
335
|
-
useValue: new import_common5.ValidationPipe({
|
|
336
|
-
transform: true,
|
|
337
|
-
transformOptions: {
|
|
338
|
-
enableImplicitConversion: true
|
|
339
|
-
}
|
|
340
|
-
})
|
|
341
|
-
}
|
|
342
|
-
],
|
|
343
|
-
exports: [
|
|
344
|
-
import_config2.ConfigModule,
|
|
345
|
-
import_nestjs_logger.LoggerModule
|
|
346
|
-
]
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* 配置中间件
|
|
351
|
-
*/
|
|
352
|
-
configure(consumer) {
|
|
353
|
-
const options = _PlatformModule.moduleOptions;
|
|
354
|
-
consumer.apply(UserContextMiddleware, import_nestjs_logger.LoggerContextMiddleware, import_nestjs_datapaas.SqlExecutionContextMiddleware).forRoutes("/*");
|
|
355
|
-
consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
|
|
356
|
-
if (options.enableCsrf !== false) {
|
|
357
|
-
const csrfRoutes = options.csrfRoutes || "/api/*";
|
|
358
|
-
if (Array.isArray(csrfRoutes)) {
|
|
359
|
-
csrfRoutes.forEach((route) => {
|
|
360
|
-
consumer.apply(CsrfMiddleware).forRoutes(route);
|
|
361
|
-
});
|
|
362
|
-
} else {
|
|
363
|
-
consumer.apply(CsrfMiddleware).forRoutes(csrfRoutes);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
};
|
|
368
|
-
PlatformModule = _ts_decorate5([
|
|
369
|
-
(0, import_common5.Global)(),
|
|
370
|
-
(0, import_common5.Module)({})
|
|
371
|
-
], PlatformModule);
|
|
372
|
-
|
|
373
|
-
// src/setup.ts
|
|
374
|
-
var import_nestjs_logger2 = require("@lark-apaas/nestjs-logger");
|
|
375
|
-
var import_cookie_parser = __toESM(require("cookie-parser"), 1);
|
|
376
|
-
async function configureApp(app) {
|
|
377
|
-
app.useLogger(app.get(import_nestjs_logger2.AppLogger));
|
|
378
|
-
app.flushLogs();
|
|
379
|
-
app.use((0, import_cookie_parser.default)());
|
|
380
|
-
const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
|
|
381
|
-
app.setGlobalPrefix(globalPrefix);
|
|
382
|
-
}
|
|
383
|
-
__name(configureApp, "configureApp");
|
|
384
|
-
|
|
385
|
-
// src/index.ts
|
|
386
|
-
__reExport(index_exports, require("@lark-apaas/nestjs-authnpaas"), module.exports);
|
|
387
|
-
__reExport(index_exports, require("@lark-apaas/nestjs-datapaas"), module.exports);
|
|
388
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
389
|
-
0 && (module.exports = {
|
|
390
|
-
CsrfMiddleware,
|
|
391
|
-
CsrfTokenMiddleware,
|
|
392
|
-
PlatformModule,
|
|
393
|
-
UserContextMiddleware,
|
|
394
|
-
ViewContextMiddleware,
|
|
395
|
-
configureApp,
|
|
396
|
-
...require("@lark-apaas/nestjs-authnpaas"),
|
|
397
|
-
...require("@lark-apaas/nestjs-datapaas")
|
|
398
|
-
});
|
package/dist/index.d.cts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { NestModule, DynamicModule, MiddlewareConsumer, NestMiddleware } from '@nestjs/common';
|
|
2
|
-
import { NestExpressApplication } from '@nestjs/platform-express';
|
|
3
|
-
import { Request, Response, NextFunction } from 'express';
|
|
4
|
-
export * from '@lark-apaas/nestjs-authnpaas';
|
|
5
|
-
export * from '@lark-apaas/nestjs-datapaas';
|
|
6
|
-
|
|
7
|
-
declare global {
|
|
8
|
-
namespace Express {
|
|
9
|
-
interface Request {
|
|
10
|
-
__platform_data__?: {
|
|
11
|
-
userId?: string;
|
|
12
|
-
tenantId?: number;
|
|
13
|
-
csrfToken?: string;
|
|
14
|
-
[key: string]: unknown;
|
|
15
|
-
};
|
|
16
|
-
userContext: {
|
|
17
|
-
userId?: string;
|
|
18
|
-
tenantId?: number;
|
|
19
|
-
appId?: string;
|
|
20
|
-
loginUrl?: string;
|
|
21
|
-
},
|
|
22
|
-
csrfToken?: string;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* PlatformModule 配置选项
|
|
29
|
-
*/
|
|
30
|
-
interface PlatformModuleOptions {
|
|
31
|
-
/**
|
|
32
|
-
* 是否启用 CSRF 保护
|
|
33
|
-
* 默认: true
|
|
34
|
-
*/
|
|
35
|
-
enableCsrf?: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* CSRF 保护应用的路由
|
|
38
|
-
* 默认: '/api/*'
|
|
39
|
-
*/
|
|
40
|
-
csrfRoutes?: string | string[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
declare class PlatformModule implements NestModule {
|
|
44
|
-
private static moduleOptions;
|
|
45
|
-
static forRoot(options?: PlatformModuleOptions): DynamicModule;
|
|
46
|
-
/**
|
|
47
|
-
* 配置中间件
|
|
48
|
-
*/
|
|
49
|
-
configure(consumer: MiddlewareConsumer): void;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
declare function configureApp(app: NestExpressApplication): Promise<void>;
|
|
53
|
-
|
|
54
|
-
interface CsrfTokenOptions {
|
|
55
|
-
cookieKey?: string;
|
|
56
|
-
cookieMaxAge?: number;
|
|
57
|
-
cookiePath?: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
declare class CsrfTokenMiddleware implements NestMiddleware {
|
|
61
|
-
private static options;
|
|
62
|
-
static configure(opts: CsrfTokenOptions): void;
|
|
63
|
-
use(req: Request, res: Response, next: NextFunction): void;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
interface CsrfOptions {
|
|
67
|
-
headerKey?: string;
|
|
68
|
-
cookieKey?: string;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
declare class CsrfMiddleware implements NestMiddleware {
|
|
72
|
-
private static options;
|
|
73
|
-
static configure(opts: CsrfOptions): void;
|
|
74
|
-
use(req: Request, res: Response, next: NextFunction): void;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
declare class UserContextMiddleware implements NestMiddleware {
|
|
78
|
-
use(req: Request, _res: Response, next: NextFunction): void;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
declare class ViewContextMiddleware implements NestMiddleware {
|
|
82
|
-
use(req: Request, res: Response, next: NextFunction): void;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export { CsrfMiddleware, CsrfTokenMiddleware, PlatformModule, type PlatformModuleOptions, UserContextMiddleware, ViewContextMiddleware, configureApp };
|
package/dist/index.d.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { NestModule, DynamicModule, MiddlewareConsumer, NestMiddleware } from '@nestjs/common';
|
|
2
|
-
import { NestExpressApplication } from '@nestjs/platform-express';
|
|
3
|
-
import { Request, Response, NextFunction } from 'express';
|
|
4
|
-
export * from '@lark-apaas/nestjs-authnpaas';
|
|
5
|
-
export * from '@lark-apaas/nestjs-datapaas';
|
|
6
|
-
|
|
7
|
-
declare global {
|
|
8
|
-
namespace Express {
|
|
9
|
-
interface Request {
|
|
10
|
-
__platform_data__?: {
|
|
11
|
-
userId?: string;
|
|
12
|
-
tenantId?: number;
|
|
13
|
-
csrfToken?: string;
|
|
14
|
-
[key: string]: unknown;
|
|
15
|
-
};
|
|
16
|
-
userContext: {
|
|
17
|
-
userId?: string;
|
|
18
|
-
tenantId?: number;
|
|
19
|
-
appId?: string;
|
|
20
|
-
loginUrl?: string;
|
|
21
|
-
},
|
|
22
|
-
csrfToken?: string;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* PlatformModule 配置选项
|
|
29
|
-
*/
|
|
30
|
-
interface PlatformModuleOptions {
|
|
31
|
-
/**
|
|
32
|
-
* 是否启用 CSRF 保护
|
|
33
|
-
* 默认: true
|
|
34
|
-
*/
|
|
35
|
-
enableCsrf?: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* CSRF 保护应用的路由
|
|
38
|
-
* 默认: '/api/*'
|
|
39
|
-
*/
|
|
40
|
-
csrfRoutes?: string | string[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
declare class PlatformModule implements NestModule {
|
|
44
|
-
private static moduleOptions;
|
|
45
|
-
static forRoot(options?: PlatformModuleOptions): DynamicModule;
|
|
46
|
-
/**
|
|
47
|
-
* 配置中间件
|
|
48
|
-
*/
|
|
49
|
-
configure(consumer: MiddlewareConsumer): void;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
declare function configureApp(app: NestExpressApplication): Promise<void>;
|
|
53
|
-
|
|
54
|
-
interface CsrfTokenOptions {
|
|
55
|
-
cookieKey?: string;
|
|
56
|
-
cookieMaxAge?: number;
|
|
57
|
-
cookiePath?: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
declare class CsrfTokenMiddleware implements NestMiddleware {
|
|
61
|
-
private static options;
|
|
62
|
-
static configure(opts: CsrfTokenOptions): void;
|
|
63
|
-
use(req: Request, res: Response, next: NextFunction): void;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
interface CsrfOptions {
|
|
67
|
-
headerKey?: string;
|
|
68
|
-
cookieKey?: string;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
declare class CsrfMiddleware implements NestMiddleware {
|
|
72
|
-
private static options;
|
|
73
|
-
static configure(opts: CsrfOptions): void;
|
|
74
|
-
use(req: Request, res: Response, next: NextFunction): void;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
declare class UserContextMiddleware implements NestMiddleware {
|
|
78
|
-
use(req: Request, _res: Response, next: NextFunction): void;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
declare class ViewContextMiddleware implements NestMiddleware {
|
|
82
|
-
use(req: Request, res: Response, next: NextFunction): void;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export { CsrfMiddleware, CsrfTokenMiddleware, PlatformModule, type PlatformModuleOptions, UserContextMiddleware, ViewContextMiddleware, configureApp };
|
package/dist/index.js
DELETED
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
|
-
// src/modules/platform/module.ts
|
|
5
|
-
import { Global, Module, ValidationPipe } from "@nestjs/common";
|
|
6
|
-
import { APP_PIPE } from "@nestjs/core";
|
|
7
|
-
import { ConfigModule, ConfigService } from "@nestjs/config";
|
|
8
|
-
import { LoggerModule, AppLogger, LoggerContextMiddleware } from "@lark-apaas/nestjs-logger";
|
|
9
|
-
import { DataPaasModule, SqlExecutionContextMiddleware } from "@lark-apaas/nestjs-datapaas";
|
|
10
|
-
import { AuthNPaasModule } from "@lark-apaas/nestjs-authnpaas";
|
|
11
|
-
|
|
12
|
-
// src/middlewares/user-context/index.ts
|
|
13
|
-
import { Injectable } from "@nestjs/common";
|
|
14
|
-
|
|
15
|
-
// src/middlewares/user-context/helper.ts
|
|
16
|
-
var sudaWebUserHeaderKey = "x-larkgw-suda-webuser";
|
|
17
|
-
function getWebUserFromHeader(req) {
|
|
18
|
-
const sudaWebUserContent = req.headers[sudaWebUserHeaderKey];
|
|
19
|
-
if (!sudaWebUserContent) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
const sudaWebUserJsonStr = decodeURIComponent(sudaWebUserContent);
|
|
24
|
-
const sudaWebUserJson = JSON.parse(sudaWebUserJsonStr);
|
|
25
|
-
return sudaWebUserJson;
|
|
26
|
-
} catch (err) {
|
|
27
|
-
console.error("parse suda webuser from header failed, err=%o", err);
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
__name(getWebUserFromHeader, "getWebUserFromHeader");
|
|
33
|
-
|
|
34
|
-
// src/middlewares/user-context/index.ts
|
|
35
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
36
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
37
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
38
|
-
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;
|
|
39
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
40
|
-
}
|
|
41
|
-
__name(_ts_decorate, "_ts_decorate");
|
|
42
|
-
var UserContextMiddleware = class {
|
|
43
|
-
static {
|
|
44
|
-
__name(this, "UserContextMiddleware");
|
|
45
|
-
}
|
|
46
|
-
use(req, _res, next) {
|
|
47
|
-
const webUser = getWebUserFromHeader(req);
|
|
48
|
-
req.userContext = {
|
|
49
|
-
userId: webUser?.user_id,
|
|
50
|
-
tenantId: webUser?.tenant_id,
|
|
51
|
-
appId: webUser?.app_id ?? "",
|
|
52
|
-
loginUrl: webUser?.login_url ?? ""
|
|
53
|
-
};
|
|
54
|
-
next();
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
UserContextMiddleware = _ts_decorate([
|
|
58
|
-
Injectable()
|
|
59
|
-
], UserContextMiddleware);
|
|
60
|
-
|
|
61
|
-
// src/middlewares/csrf/index.ts
|
|
62
|
-
import { Injectable as Injectable2 } from "@nestjs/common";
|
|
63
|
-
|
|
64
|
-
// src/middlewares/csrf/helper.ts
|
|
65
|
-
function resolveCsrfOptions(options) {
|
|
66
|
-
return {
|
|
67
|
-
...options,
|
|
68
|
-
headerKey: options.headerKey ?? "x-suda-csrf-token",
|
|
69
|
-
cookieKey: options.cookieKey ?? "suda-csrf-token"
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
__name(resolveCsrfOptions, "resolveCsrfOptions");
|
|
73
|
-
function sendForbidden(res, message) {
|
|
74
|
-
res.status(403).send(`Forbidden\uFF0C${message}`);
|
|
75
|
-
}
|
|
76
|
-
__name(sendForbidden, "sendForbidden");
|
|
77
|
-
|
|
78
|
-
// src/middlewares/csrf/index.ts
|
|
79
|
-
function _ts_decorate2(decorators, target, key, desc) {
|
|
80
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
81
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
82
|
-
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;
|
|
83
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
84
|
-
}
|
|
85
|
-
__name(_ts_decorate2, "_ts_decorate");
|
|
86
|
-
var CsrfMiddleware = class _CsrfMiddleware {
|
|
87
|
-
static {
|
|
88
|
-
__name(this, "CsrfMiddleware");
|
|
89
|
-
}
|
|
90
|
-
static options = resolveCsrfOptions({});
|
|
91
|
-
static configure(opts) {
|
|
92
|
-
this.options = resolveCsrfOptions(opts);
|
|
93
|
-
}
|
|
94
|
-
use(req, res, next) {
|
|
95
|
-
const { headerKey, cookieKey } = _CsrfMiddleware.options;
|
|
96
|
-
const cookieCsrfToken = req.cookies[cookieKey.toLowerCase()];
|
|
97
|
-
if (!cookieCsrfToken) {
|
|
98
|
-
sendForbidden(res, "csrf token not found in cookie.");
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const headerCsrfToken = req.headers[headerKey.toLowerCase()];
|
|
102
|
-
if (!headerCsrfToken) {
|
|
103
|
-
sendForbidden(res, "csrf token not found in header.");
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
if (cookieCsrfToken !== headerCsrfToken) {
|
|
107
|
-
sendForbidden(res, "csrf token not match.");
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
next();
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
CsrfMiddleware = _ts_decorate2([
|
|
114
|
-
Injectable2()
|
|
115
|
-
], CsrfMiddleware);
|
|
116
|
-
|
|
117
|
-
// src/middlewares/view-context/index.ts
|
|
118
|
-
import { Injectable as Injectable3 } from "@nestjs/common";
|
|
119
|
-
function _ts_decorate3(decorators, target, key, desc) {
|
|
120
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
121
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
122
|
-
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;
|
|
123
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
124
|
-
}
|
|
125
|
-
__name(_ts_decorate3, "_ts_decorate");
|
|
126
|
-
var ViewContextMiddleware = class {
|
|
127
|
-
static {
|
|
128
|
-
__name(this, "ViewContextMiddleware");
|
|
129
|
-
}
|
|
130
|
-
use(req, res, next) {
|
|
131
|
-
const { userId, tenantId, appId } = req.userContext;
|
|
132
|
-
const csrfToken = req.csrfToken;
|
|
133
|
-
req.__platform_data__ = {
|
|
134
|
-
csrfToken: csrfToken ?? "",
|
|
135
|
-
userId: userId ?? "",
|
|
136
|
-
appId: appId ?? "",
|
|
137
|
-
tenantId
|
|
138
|
-
};
|
|
139
|
-
res.locals = {
|
|
140
|
-
...res.locals ?? {},
|
|
141
|
-
csrfToken: csrfToken ?? "",
|
|
142
|
-
userId: userId ?? "",
|
|
143
|
-
tenantId: tenantId ?? "",
|
|
144
|
-
appId: appId ?? ""
|
|
145
|
-
};
|
|
146
|
-
next();
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
ViewContextMiddleware = _ts_decorate3([
|
|
150
|
-
Injectable3()
|
|
151
|
-
], ViewContextMiddleware);
|
|
152
|
-
|
|
153
|
-
// src/middlewares/csrf_token/index.ts
|
|
154
|
-
import { Injectable as Injectable4 } from "@nestjs/common";
|
|
155
|
-
|
|
156
|
-
// src/middlewares/csrf_token/helper.ts
|
|
157
|
-
import crypto from "crypto";
|
|
158
|
-
function resolveCsrfTokenOptions(options) {
|
|
159
|
-
return {
|
|
160
|
-
...options,
|
|
161
|
-
cookieKey: options.cookieKey ?? "suda-csrf-token",
|
|
162
|
-
cookieMaxAge: options.cookieMaxAge ?? 1e3 * 60 * 60 * 24 * 30,
|
|
163
|
-
cookiePath: options.cookiePath ?? "/"
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
__name(resolveCsrfTokenOptions, "resolveCsrfTokenOptions");
|
|
167
|
-
function genToken() {
|
|
168
|
-
const ts = Math.floor(Date.now() / 1e3);
|
|
169
|
-
const randInt64 = BigInt("0x" + crypto.randomBytes(8).toString("hex")).toString();
|
|
170
|
-
const s = `${randInt64}.${ts}`;
|
|
171
|
-
const sha1 = crypto.createHash("sha1");
|
|
172
|
-
sha1.update(s);
|
|
173
|
-
return `${sha1.digest("hex")}-${ts}`;
|
|
174
|
-
}
|
|
175
|
-
__name(genToken, "genToken");
|
|
176
|
-
|
|
177
|
-
// src/middlewares/csrf_token/index.ts
|
|
178
|
-
function _ts_decorate4(decorators, target, key, desc) {
|
|
179
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
180
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
181
|
-
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;
|
|
182
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
183
|
-
}
|
|
184
|
-
__name(_ts_decorate4, "_ts_decorate");
|
|
185
|
-
var CsrfTokenMiddleware = class _CsrfTokenMiddleware {
|
|
186
|
-
static {
|
|
187
|
-
__name(this, "CsrfTokenMiddleware");
|
|
188
|
-
}
|
|
189
|
-
static options = resolveCsrfTokenOptions({});
|
|
190
|
-
static configure(opts) {
|
|
191
|
-
this.options = resolveCsrfTokenOptions(opts);
|
|
192
|
-
}
|
|
193
|
-
use(req, res, next) {
|
|
194
|
-
const { cookieKey, cookieMaxAge, cookiePath } = _CsrfTokenMiddleware.options;
|
|
195
|
-
const originToken = req.cookies[cookieKey.toLowerCase()];
|
|
196
|
-
if (originToken) {
|
|
197
|
-
req.csrfToken = originToken;
|
|
198
|
-
next();
|
|
199
|
-
} else {
|
|
200
|
-
const token = genToken();
|
|
201
|
-
req.csrfToken = token;
|
|
202
|
-
res.cookie(cookieKey, token, {
|
|
203
|
-
maxAge: cookieMaxAge,
|
|
204
|
-
path: cookiePath,
|
|
205
|
-
httpOnly: true,
|
|
206
|
-
secure: true,
|
|
207
|
-
sameSite: "none",
|
|
208
|
-
partitioned: true
|
|
209
|
-
});
|
|
210
|
-
next();
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
CsrfTokenMiddleware = _ts_decorate4([
|
|
215
|
-
Injectable4()
|
|
216
|
-
], CsrfTokenMiddleware);
|
|
217
|
-
|
|
218
|
-
// src/modules/platform/config/app.config.ts
|
|
219
|
-
import { registerAs } from "@nestjs/config";
|
|
220
|
-
var NAMESPACE = "app";
|
|
221
|
-
var app_config_default = registerAs(NAMESPACE, () => {
|
|
222
|
-
return {
|
|
223
|
-
host: process.env.SERVER_HOST ?? "localhost",
|
|
224
|
-
port: Number(process.env.SERVER_PORT ?? 3e3),
|
|
225
|
-
clientBasePath: process.env.CLIENT_BASE_PATH ?? "/",
|
|
226
|
-
databaseUrl: process.env.SUDA_DATABASE_URL ?? ""
|
|
227
|
-
};
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
// src/modules/platform/module.ts
|
|
231
|
-
function _ts_decorate5(decorators, target, key, desc) {
|
|
232
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
233
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
234
|
-
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;
|
|
235
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
236
|
-
}
|
|
237
|
-
__name(_ts_decorate5, "_ts_decorate");
|
|
238
|
-
var PLATFORM_MODULE_OPTIONS = "PLATFORM_MODULE_OPTIONS";
|
|
239
|
-
var PlatformModule = class _PlatformModule {
|
|
240
|
-
static {
|
|
241
|
-
__name(this, "PlatformModule");
|
|
242
|
-
}
|
|
243
|
-
static moduleOptions = {};
|
|
244
|
-
static forRoot(options = {}) {
|
|
245
|
-
_PlatformModule.moduleOptions = options;
|
|
246
|
-
return {
|
|
247
|
-
module: _PlatformModule,
|
|
248
|
-
imports: [
|
|
249
|
-
ConfigModule.forRoot({
|
|
250
|
-
isGlobal: true,
|
|
251
|
-
envFilePath: [
|
|
252
|
-
".env.local",
|
|
253
|
-
".env"
|
|
254
|
-
],
|
|
255
|
-
load: [
|
|
256
|
-
app_config_default
|
|
257
|
-
]
|
|
258
|
-
}),
|
|
259
|
-
LoggerModule,
|
|
260
|
-
DataPaasModule.forRootAsync({
|
|
261
|
-
imports: [
|
|
262
|
-
ConfigModule,
|
|
263
|
-
LoggerModule
|
|
264
|
-
],
|
|
265
|
-
inject: [
|
|
266
|
-
ConfigService,
|
|
267
|
-
AppLogger
|
|
268
|
-
],
|
|
269
|
-
useFactory: /* @__PURE__ */ __name(async (...args) => {
|
|
270
|
-
const configService = args[0];
|
|
271
|
-
const appLogger = args[1];
|
|
272
|
-
const drizzleLogger = {
|
|
273
|
-
logQuery(query, params) {
|
|
274
|
-
appLogger.log?.("SQL Query", {
|
|
275
|
-
query,
|
|
276
|
-
params
|
|
277
|
-
}, "Database");
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
return {
|
|
281
|
-
connectionString: configService.get("app.databaseUrl") ?? "",
|
|
282
|
-
logger: drizzleLogger
|
|
283
|
-
};
|
|
284
|
-
}, "useFactory")
|
|
285
|
-
}),
|
|
286
|
-
AuthNPaasModule.forRoot()
|
|
287
|
-
],
|
|
288
|
-
providers: [
|
|
289
|
-
{
|
|
290
|
-
provide: PLATFORM_MODULE_OPTIONS,
|
|
291
|
-
useValue: options
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
provide: APP_PIPE,
|
|
295
|
-
useValue: new ValidationPipe({
|
|
296
|
-
transform: true,
|
|
297
|
-
transformOptions: {
|
|
298
|
-
enableImplicitConversion: true
|
|
299
|
-
}
|
|
300
|
-
})
|
|
301
|
-
}
|
|
302
|
-
],
|
|
303
|
-
exports: [
|
|
304
|
-
ConfigModule,
|
|
305
|
-
LoggerModule
|
|
306
|
-
]
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* 配置中间件
|
|
311
|
-
*/
|
|
312
|
-
configure(consumer) {
|
|
313
|
-
const options = _PlatformModule.moduleOptions;
|
|
314
|
-
consumer.apply(UserContextMiddleware, LoggerContextMiddleware, SqlExecutionContextMiddleware).forRoutes("/*");
|
|
315
|
-
consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)").forRoutes("*");
|
|
316
|
-
if (options.enableCsrf !== false) {
|
|
317
|
-
const csrfRoutes = options.csrfRoutes || "/api/*";
|
|
318
|
-
if (Array.isArray(csrfRoutes)) {
|
|
319
|
-
csrfRoutes.forEach((route) => {
|
|
320
|
-
consumer.apply(CsrfMiddleware).forRoutes(route);
|
|
321
|
-
});
|
|
322
|
-
} else {
|
|
323
|
-
consumer.apply(CsrfMiddleware).forRoutes(csrfRoutes);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
};
|
|
328
|
-
PlatformModule = _ts_decorate5([
|
|
329
|
-
Global(),
|
|
330
|
-
Module({})
|
|
331
|
-
], PlatformModule);
|
|
332
|
-
|
|
333
|
-
// src/setup.ts
|
|
334
|
-
import { AppLogger as AppLogger2 } from "@lark-apaas/nestjs-logger";
|
|
335
|
-
import cookieParser from "cookie-parser";
|
|
336
|
-
async function configureApp(app) {
|
|
337
|
-
app.useLogger(app.get(AppLogger2));
|
|
338
|
-
app.flushLogs();
|
|
339
|
-
app.use(cookieParser());
|
|
340
|
-
const globalPrefix = process.env.CLIENT_BASE_PATH ?? "";
|
|
341
|
-
app.setGlobalPrefix(globalPrefix);
|
|
342
|
-
}
|
|
343
|
-
__name(configureApp, "configureApp");
|
|
344
|
-
|
|
345
|
-
// src/index.ts
|
|
346
|
-
export * from "@lark-apaas/nestjs-authnpaas";
|
|
347
|
-
export * from "@lark-apaas/nestjs-datapaas";
|
|
348
|
-
export {
|
|
349
|
-
CsrfMiddleware,
|
|
350
|
-
CsrfTokenMiddleware,
|
|
351
|
-
PlatformModule,
|
|
352
|
-
UserContextMiddleware,
|
|
353
|
-
ViewContextMiddleware,
|
|
354
|
-
configureApp
|
|
355
|
-
};
|