@antares-core/rvs 1.0.0 → 1.0.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/dist/index.js CHANGED
@@ -1,24 +1,3 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./rvs.types"), exports);
18
- __exportStar(require("./rvs.tokens"), exports);
19
- __exportStar(require("./rvs.decorators"), exports);
20
- __exportStar(require("./rvs.registry"), exports);
21
- __exportStar(require("./rvs.service"), exports);
22
- __exportStar(require("./rvs.middleware"), exports);
23
- __exportStar(require("./rvs.module"), exports);
24
- //# sourceMappingURL=index.js.map
1
+ "use strict";var n=Object.defineProperty;var o=(t,e)=>n(t,"name",{value:e,configurable:!0});var __createBinding=this&&this.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,s)}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),__exportStar=this&&this.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(e,t,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./rvs.types"),exports),__exportStar(require("./rvs.tokens"),exports),__exportStar(require("./rvs.decorators"),exports),__exportStar(require("./rvs.registry"),exports),__exportStar(require("./rvs.service"),exports),__exportStar(require("./rvs.middleware"),exports),__exportStar(require("./rvs.module"),exports);
2
+
3
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,+CAA6B;AAC7B,mDAAiC;AACjC,iDAA+B;AAC/B,gDAA8B;AAC9B,mDAAiC;AACjC,+CAA6B"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./rvs.types\"), exports);\n__exportStar(require(\"./rvs.tokens\"), exports);\n__exportStar(require(\"./rvs.decorators\"), exports);\n__exportStar(require(\"./rvs.registry\"), exports);\n__exportStar(require(\"./rvs.service\"), exports);\n__exportStar(require(\"./rvs.middleware\"), exports);\n__exportStar(require(\"./rvs.module\"), exports);\n//# sourceMappingURL=index.js.map"],
5
+ "mappings": "4FACA,IAAI,gBAAmB,MAAQ,KAAK,kBAAqB,OAAO,OAAU,SAASA,EAAGC,EAAGC,EAAGC,EAAI,CACxFA,IAAO,SAAWA,EAAKD,GAC3B,IAAIE,EAAO,OAAO,yBAAyBH,EAAGC,CAAC,GAC3C,CAACE,IAAS,QAASA,EAAO,CAACH,EAAE,WAAaG,EAAK,UAAYA,EAAK,iBAClEA,EAAO,CAAE,WAAY,GAAM,IAAKC,EAAA,UAAW,CAAE,OAAOJ,EAAEC,CAAC,CAAG,EAA1B,MAA4B,GAE9D,OAAO,eAAeF,EAAGG,EAAIC,CAAI,CACrC,EAAM,SAASJ,EAAGC,EAAGC,EAAGC,EAAI,CACpBA,IAAO,SAAWA,EAAKD,GAC3BF,EAAEG,CAAE,EAAIF,EAAEC,CAAC,CACf,GACI,aAAgB,MAAQ,KAAK,cAAiB,SAASD,EAAGK,EAAS,CACnE,QAASC,KAAKN,EAAOM,IAAM,WAAa,CAAC,OAAO,UAAU,eAAe,KAAKD,EAASC,CAAC,GAAG,gBAAgBD,EAASL,EAAGM,CAAC,CAC5H,EACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,aAAa,QAAQ,aAAa,EAAG,OAAO,EAC5C,aAAa,QAAQ,cAAc,EAAG,OAAO,EAC7C,aAAa,QAAQ,kBAAkB,EAAG,OAAO,EACjD,aAAa,QAAQ,gBAAgB,EAAG,OAAO,EAC/C,aAAa,QAAQ,eAAe,EAAG,OAAO,EAC9C,aAAa,QAAQ,kBAAkB,EAAG,OAAO,EACjD,aAAa,QAAQ,cAAc,EAAG,OAAO",
6
+ "names": ["o", "m", "k", "k2", "desc", "__name", "exports", "p"]
7
+ }
@@ -1,28 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RvsCtx = exports.RvsForce = exports.RvsSkip = exports.RVS_FORCE_METADATA = exports.RVS_SKIP_METADATA = void 0;
4
- const common_1 = require("@nestjs/common");
5
- exports.RVS_SKIP_METADATA = 'antares:rvs:skip';
6
- exports.RVS_FORCE_METADATA = 'antares:rvs:force';
7
- /**
8
- * 跳过该控制器/接口的 RVS 验签与响应加密。
9
- * 适用:健康检查、回调通知、公开静态资源。
10
- * 优先级低于 @RvsForce;命名与内核 crypto-kit 的 @CryptoSkip 对齐。
11
- */
12
- const RvsSkip = () => (0, common_1.SetMetadata)(exports.RVS_SKIP_METADATA, true);
13
- exports.RvsSkip = RvsSkip;
14
- /**
15
- * 强制验签:即使命中 skipPaths 或类级 @RvsSkip 也执行校验。
16
- * 适用:高价值接口在全局放行策略下单独收紧。
17
- */
18
- const RvsForce = () => (0, common_1.SetMetadata)(exports.RVS_FORCE_METADATA, true);
19
- exports.RvsForce = RvsForce;
20
- /**
21
- * 取当前请求的验签上下文(req.rvs)。
22
- * 上下文含请求级密钥材料,只允许在业务方法内使用,禁止日志输出或透传响应。
23
- */
24
- exports.RvsCtx = (0, common_1.createParamDecorator)((property, ctx) => {
25
- const request = ctx.switchToHttp().getRequest();
26
- return request?.[property || 'rvs'];
27
- });
28
- //# sourceMappingURL=rvs.decorators.js.map
1
+ "use strict";var r=Object.defineProperty;var s=(e,t)=>r(e,"name",{value:t,configurable:!0});Object.defineProperty(exports,"__esModule",{value:!0}),exports.RvsCtx=exports.RvsForce=exports.RvsSkip=exports.RVS_FORCE_METADATA=exports.RVS_SKIP_METADATA=void 0;const common_1=require("@nestjs/common");exports.RVS_SKIP_METADATA="antares:rvs:skip",exports.RVS_FORCE_METADATA="antares:rvs:force";const RvsSkip=s(()=>(0,common_1.SetMetadata)(exports.RVS_SKIP_METADATA,!0),"RvsSkip");exports.RvsSkip=RvsSkip;const RvsForce=s(()=>(0,common_1.SetMetadata)(exports.RVS_FORCE_METADATA,!0),"RvsForce");exports.RvsForce=RvsForce,exports.RvsCtx=(0,common_1.createParamDecorator)((e,t)=>t.switchToHttp().getRequest()?.[e||"rvs"]);
2
+
3
+ //# sourceMappingURL=rvs.decorators.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.decorators.js","sourceRoot":"","sources":["../src/rvs.decorators.ts"],"names":[],"mappings":";;;AAAA,2CAA0F;AAE7E,QAAA,iBAAiB,GAAG,kBAAkB,CAAC;AACvC,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD;;;;GAIG;AACI,MAAM,OAAO,GAAG,GAAqC,EAAE,CAAC,IAAA,oBAAW,EAAC,yBAAiB,EAAE,IAAI,CAAC,CAAC;AAAvF,QAAA,OAAO,WAAgF;AAEpG;;;GAGG;AACI,MAAM,QAAQ,GAAG,GAAqC,EAAE,CAAC,IAAA,oBAAW,EAAC,0BAAkB,EAAE,IAAI,CAAC,CAAC;AAAzF,QAAA,QAAQ,YAAiF;AAEtG;;;GAGG;AACU,QAAA,MAAM,GAAG,IAAA,6BAAoB,EAAC,CAAC,QAA4B,EAAE,GAAqB,EAAE,EAAE;IACjG,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,OAAO,OAAO,EAAE,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RvsCtx = exports.RvsForce = exports.RvsSkip = exports.RVS_FORCE_METADATA = exports.RVS_SKIP_METADATA = void 0;\nconst common_1 = require(\"@nestjs/common\");\nexports.RVS_SKIP_METADATA = 'antares:rvs:skip';\nexports.RVS_FORCE_METADATA = 'antares:rvs:force';\n/**\n * \u8DF3\u8FC7\u8BE5\u63A7\u5236\u5668/\u63A5\u53E3\u7684 RVS \u9A8C\u7B7E\u4E0E\u54CD\u5E94\u52A0\u5BC6\u3002\n * \u9002\u7528\uFF1A\u5065\u5EB7\u68C0\u67E5\u3001\u56DE\u8C03\u901A\u77E5\u3001\u516C\u5F00\u9759\u6001\u8D44\u6E90\u3002\n * \u4F18\u5148\u7EA7\u4F4E\u4E8E @RvsForce\uFF1B\u547D\u540D\u4E0E\u5185\u6838 crypto-kit \u7684 @CryptoSkip \u5BF9\u9F50\u3002\n */\nconst RvsSkip = () => (0, common_1.SetMetadata)(exports.RVS_SKIP_METADATA, true);\nexports.RvsSkip = RvsSkip;\n/**\n * \u5F3A\u5236\u9A8C\u7B7E\uFF1A\u5373\u4F7F\u547D\u4E2D skipPaths \u6216\u7C7B\u7EA7 @RvsSkip \u4E5F\u6267\u884C\u6821\u9A8C\u3002\n * \u9002\u7528\uFF1A\u9AD8\u4EF7\u503C\u63A5\u53E3\u5728\u5168\u5C40\u653E\u884C\u7B56\u7565\u4E0B\u5355\u72EC\u6536\u7D27\u3002\n */\nconst RvsForce = () => (0, common_1.SetMetadata)(exports.RVS_FORCE_METADATA, true);\nexports.RvsForce = RvsForce;\n/**\n * \u53D6\u5F53\u524D\u8BF7\u6C42\u7684\u9A8C\u7B7E\u4E0A\u4E0B\u6587\uFF08req.rvs\uFF09\u3002\n * \u4E0A\u4E0B\u6587\u542B\u8BF7\u6C42\u7EA7\u5BC6\u94A5\u6750\u6599\uFF0C\u53EA\u5141\u8BB8\u5728\u4E1A\u52A1\u65B9\u6CD5\u5185\u4F7F\u7528\uFF0C\u7981\u6B62\u65E5\u5FD7\u8F93\u51FA\u6216\u900F\u4F20\u54CD\u5E94\u3002\n */\nexports.RvsCtx = (0, common_1.createParamDecorator)((property, ctx) => {\n const request = ctx.switchToHttp().getRequest();\n return request?.[property || 'rvs'];\n});\n//# sourceMappingURL=rvs.decorators.js.map"],
5
+ "mappings": "4FACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,QAAQ,OAAS,QAAQ,SAAW,QAAQ,QAAU,QAAQ,mBAAqB,QAAQ,kBAAoB,OAC/G,MAAM,SAAW,QAAQ,gBAAgB,EACzC,QAAQ,kBAAoB,mBAC5B,QAAQ,mBAAqB,oBAM7B,MAAM,QAAUA,EAAA,OAAU,SAAS,aAAa,QAAQ,kBAAmB,EAAI,EAA/D,WAChB,QAAQ,QAAU,QAKlB,MAAM,SAAWA,EAAA,OAAU,SAAS,aAAa,QAAQ,mBAAoB,EAAI,EAAhE,YACjB,QAAQ,SAAW,SAKnB,QAAQ,UAAa,SAAS,sBAAsB,CAACC,EAAUC,IAC3CA,EAAI,aAAa,EAAE,WAAW,IAC7BD,GAAY,KAAK,CACrC",
6
+ "names": ["__name", "property", "ctx"]
7
+ }
@@ -1,145 +1,3 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RvsMiddleware = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const core_1 = require("@antares-core/core");
18
- const rand_vec_sig_1 = require("rand-vec-sig");
19
- const rvs_registry_1 = require("./rvs.registry");
20
- const rvs_tokens_1 = require("./rvs.tokens");
21
- const rvs_types_1 = require("./rvs.types");
22
- /**
23
- * RVS 全局中间件(Express 壳层)。
24
- *
25
- * 职责顺序(顺序即安全语义,改动前请先读注释):
26
- * 1. 动态会话端点直通:客户端拿 sessSeed 的引导请求不能要求先验签
27
- * 2. @RvsForce 命中 → 无条件验签(覆盖 skipPaths / @RvsSkip)
28
- * 3. skipPaths / @RvsSkip 命中 → 直通
29
- * 4. tolerant 模式且未携带标识头 → 视为明文请求放行(已带标识头但验签失败仍拒绝)
30
- * 5. 安装响应加密出口(包住 res.json,保证拦截器包装后的最终报文被整体加密)
31
- * 6. 委托 rand-vec-sig 中间件完成验签/解密/上下文挂载/防重放
32
- *
33
- * 响应加密必须在 res.json 层完成:客户端按顶层混淆信封(alg="r")解密,
34
- * 因此任何 Nest 拦截器(统一响应壳 / 序列化)产生的最终 body 才是加密输入。
35
- */
36
- let RvsMiddleware = class RvsMiddleware {
37
- constructor(server, options, registry) {
38
- this.server = server;
39
- this.options = options;
40
- this.registry = registry;
41
- this.expressMiddleware = server.middleware({
42
- // 跳过判定在 use() 中统一完成(需要叠加装饰器注册表),此处不再传 skipPaths
43
- skipPaths: [],
44
- contextProperty: options.contextProperty,
45
- replaceBody: true,
46
- onReject: (result, request) => {
47
- core_1.logger.warn('rvs request rejected', {
48
- code: result.code,
49
- status: result.status,
50
- url: request?.url,
51
- method: request?.method,
52
- });
53
- },
54
- });
55
- const overrides = options.identifyHeaders ?? {};
56
- this.identifyHeaderNames = [
57
- (overrides.version ?? rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.version).toLowerCase(),
58
- (overrides.session ?? rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.session).toLowerCase(),
59
- (overrides.nonce ?? rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.nonce).toLowerCase(),
60
- ];
61
- }
62
- use(req, res, next) {
63
- const url = req.originalUrl ?? req.url ?? '';
64
- const pathname = url.split('?')[0];
65
- // 1) 动态会话端点
66
- if (this.options.sessionEndpoint && req.method === 'GET' && this.isSessionPath(pathname)) {
67
- try {
68
- res.json(this.server.issueSession());
69
- }
70
- catch (err) {
71
- next(err);
72
- }
73
- return;
74
- }
75
- // 2) @RvsForce 优先于一切放行规则
76
- const forced = this.registry.isForced(url);
77
- if (!forced) {
78
- // 3) 放行清单
79
- if (this.registry.isSkipped(url) || (0, rvs_types_1.matchesAnyPath)(this.options.skipPaths, url)) {
80
- next();
81
- return;
82
- }
83
- // 4) 明文请求(tolerant 模式)
84
- if (this.options.unprotected === 'tolerant' && !this.hasIdentifyHeaders(req)) {
85
- next();
86
- return;
87
- }
88
- }
89
- // 5) 响应加密出口
90
- if (this.options.responseEncryption)
91
- this.patchResponseJson(req, res);
92
- // 6) 验签/解密;rand-vec-sig 中间件内部已捕获异常并转 next(error)
93
- void this.expressMiddleware(req, res, next);
94
- }
95
- isSessionPath(pathname) {
96
- const endpoint = this.options.sessionEndpoint;
97
- return pathname === endpoint || pathname.endsWith(endpoint);
98
- }
99
- hasIdentifyHeaders(req) {
100
- const headers = req.headers;
101
- if (!headers)
102
- return false;
103
- return this.identifyHeaderNames.some((name) => {
104
- if (typeof headers.get === 'function') {
105
- return Boolean(headers.get(name));
106
- }
107
- return Boolean(headers[name]);
108
- });
109
- }
110
- patchResponseJson(req, res) {
111
- if (typeof res.json !== 'function')
112
- return;
113
- const original = res.json.bind(res);
114
- const property = this.options.contextProperty;
115
- res.json = (body) => {
116
- const context = req[property];
117
- if (!context)
118
- return original(body);
119
- try {
120
- return original(this.server.encryptResponse(body, context));
121
- }
122
- catch (err) {
123
- // 加密失败绝不回退明文(会泄露业务数据);改为通用错误壳,由客户端按明文错误处理
124
- core_1.alertBus.error('rvs:response-encrypt-failed', 'RVS 响应加密失败,已阻止明文业务数据返回', {
125
- reason: err?.message,
126
- });
127
- try {
128
- res.statusCode = 500;
129
- }
130
- catch {
131
- /* 头已发出则忽略 */
132
- }
133
- return original({ code: 'RVS_RESPONSE_ENCRYPT_FAILED', message: 'response encryption failed' });
134
- }
135
- };
136
- }
137
- };
138
- exports.RvsMiddleware = RvsMiddleware;
139
- exports.RvsMiddleware = RvsMiddleware = __decorate([
140
- (0, common_1.Injectable)(),
141
- __param(0, (0, common_1.Inject)(rvs_tokens_1.RVS_SERVER)),
142
- __param(1, (0, common_1.Inject)(rvs_tokens_1.RVS_OPTIONS)),
143
- __metadata("design:paramtypes", [Object, Object, rvs_registry_1.RvsRouteRegistry])
144
- ], RvsMiddleware);
145
- //# sourceMappingURL=rvs.middleware.js.map
1
+ "use strict";var d=Object.defineProperty;var a=(i,e)=>d(i,"name",{value:e,configurable:!0});var __decorate=this&&this.__decorate||function(i,e,t,s){var o=arguments.length,r=o<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,t):s,n;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(i,e,t,s);else for(var c=i.length-1;c>=0;c--)(n=i[c])&&(r=(o<3?n(r):o>3?n(e,t,r):n(e,t))||r);return o>3&&r&&Object.defineProperty(e,t,r),r},__metadata=this&&this.__metadata||function(i,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,e)},__param=this&&this.__param||function(i,e){return function(t,s){e(t,s,i)}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.RvsMiddleware=void 0;const common_1=require("@nestjs/common"),core_1=require("@antares-core/core"),rand_vec_sig_1=require("rand-vec-sig"),rvs_registry_1=require("./rvs.registry"),rvs_tokens_1=require("./rvs.tokens"),rvs_types_1=require("./rvs.types");let RvsMiddleware=class{static{a(this,"RvsMiddleware")}constructor(e,t,s){this.server=e,this.options=t,this.registry=s,this.expressMiddleware=e.middleware({skipPaths:[],contextProperty:t.contextProperty,replaceBody:!0,onReject:a((r,n)=>{core_1.logger.warn("rvs request rejected",{code:r.code,status:r.status,url:n?.url,method:n?.method})},"onReject")});const o=t.identifyHeaders??{};this.identifyHeaderNames=[(o.version??rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.version).toLowerCase(),(o.session??rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.session).toLowerCase(),(o.nonce??rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.nonce).toLowerCase()]}use(e,t,s){const o=e.originalUrl??e.url??"",r=o.split("?")[0];if(this.options.sessionEndpoint&&e.method==="GET"&&this.isSessionPath(r)){try{t.json(this.server.issueSession())}catch(c){s(c)}return}if(!this.registry.isForced(o)){if(this.registry.isSkipped(o)||(0,rvs_types_1.matchesAnyPath)(this.options.skipPaths,o)){s();return}if(this.options.unprotected==="tolerant"&&!this.hasIdentifyHeaders(e)){s();return}}this.options.responseEncryption&&this.patchResponseJson(e,t),this.expressMiddleware(e,t,s)}isSessionPath(e){const t=this.options.sessionEndpoint;return e===t||e.endsWith(t)}hasIdentifyHeaders(e){const t=e.headers;return t?this.identifyHeaderNames.some(s=>typeof t.get=="function"?!!t.get(s):!!t[s]):!1}patchResponseJson(e,t){if(typeof t.json!="function")return;const s=t.json.bind(t),o=this.options.contextProperty;t.json=r=>{const n=e[o];if(!n)return s(r);try{return s(this.server.encryptResponse(r,n))}catch(c){core_1.alertBus.error("rvs:response-encrypt-failed","RVS \u54CD\u5E94\u52A0\u5BC6\u5931\u8D25\uFF0C\u5DF2\u963B\u6B62\u660E\u6587\u4E1A\u52A1\u6570\u636E\u8FD4\u56DE",{reason:c?.message});try{t.statusCode=500}catch{}return s({code:"RVS_RESPONSE_ENCRYPT_FAILED",message:"response encryption failed"})}}}};exports.RvsMiddleware=RvsMiddleware,exports.RvsMiddleware=RvsMiddleware=__decorate([(0,common_1.Injectable)(),__param(0,(0,common_1.Inject)(rvs_tokens_1.RVS_SERVER)),__param(1,(0,common_1.Inject)(rvs_tokens_1.RVS_OPTIONS)),__metadata("design:paramtypes",[Object,Object,rvs_registry_1.RvsRouteRegistry])],RvsMiddleware);
2
+
3
+ //# sourceMappingURL=rvs.middleware.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.middleware.js","sourceRoot":"","sources":["../src/rvs.middleware.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n 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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RvsMiddleware = void 0;\nconst common_1 = require(\"@nestjs/common\");\nconst core_1 = require(\"@antares-core/core\");\nconst rand_vec_sig_1 = require(\"rand-vec-sig\");\nconst rvs_registry_1 = require(\"./rvs.registry\");\nconst rvs_tokens_1 = require(\"./rvs.tokens\");\nconst rvs_types_1 = require(\"./rvs.types\");\n/**\n * RVS \u5168\u5C40\u4E2D\u95F4\u4EF6\uFF08Express \u58F3\u5C42\uFF09\u3002\n *\n * \u804C\u8D23\u987A\u5E8F\uFF08\u987A\u5E8F\u5373\u5B89\u5168\u8BED\u4E49\uFF0C\u6539\u52A8\u524D\u8BF7\u5148\u8BFB\u6CE8\u91CA\uFF09\uFF1A\n * 1. \u52A8\u6001\u4F1A\u8BDD\u7AEF\u70B9\u76F4\u901A\uFF1A\u5BA2\u6237\u7AEF\u62FF sessSeed \u7684\u5F15\u5BFC\u8BF7\u6C42\u4E0D\u80FD\u8981\u6C42\u5148\u9A8C\u7B7E\n * 2. @RvsForce \u547D\u4E2D \u2192 \u65E0\u6761\u4EF6\u9A8C\u7B7E\uFF08\u8986\u76D6 skipPaths / @RvsSkip\uFF09\n * 3. skipPaths / @RvsSkip \u547D\u4E2D \u2192 \u76F4\u901A\n * 4. tolerant \u6A21\u5F0F\u4E14\u672A\u643A\u5E26\u6807\u8BC6\u5934 \u2192 \u89C6\u4E3A\u660E\u6587\u8BF7\u6C42\u653E\u884C\uFF08\u5DF2\u5E26\u6807\u8BC6\u5934\u4F46\u9A8C\u7B7E\u5931\u8D25\u4ECD\u62D2\u7EDD\uFF09\n * 5. \u5B89\u88C5\u54CD\u5E94\u52A0\u5BC6\u51FA\u53E3\uFF08\u5305\u4F4F res.json\uFF0C\u4FDD\u8BC1\u62E6\u622A\u5668\u5305\u88C5\u540E\u7684\u6700\u7EC8\u62A5\u6587\u88AB\u6574\u4F53\u52A0\u5BC6\uFF09\n * 6. \u59D4\u6258 rand-vec-sig \u4E2D\u95F4\u4EF6\u5B8C\u6210\u9A8C\u7B7E/\u89E3\u5BC6/\u4E0A\u4E0B\u6587\u6302\u8F7D/\u9632\u91CD\u653E\n *\n * \u54CD\u5E94\u52A0\u5BC6\u5FC5\u987B\u5728 res.json \u5C42\u5B8C\u6210\uFF1A\u5BA2\u6237\u7AEF\u6309\u9876\u5C42\u6DF7\u6DC6\u4FE1\u5C01\uFF08alg=\"r\"\uFF09\u89E3\u5BC6\uFF0C\n * \u56E0\u6B64\u4EFB\u4F55 Nest \u62E6\u622A\u5668\uFF08\u7EDF\u4E00\u54CD\u5E94\u58F3 / \u5E8F\u5217\u5316\uFF09\u4EA7\u751F\u7684\u6700\u7EC8 body \u624D\u662F\u52A0\u5BC6\u8F93\u5165\u3002\n */\nlet RvsMiddleware = class RvsMiddleware {\n constructor(server, options, registry) {\n this.server = server;\n this.options = options;\n this.registry = registry;\n this.expressMiddleware = server.middleware({\n // \u8DF3\u8FC7\u5224\u5B9A\u5728 use() \u4E2D\u7EDF\u4E00\u5B8C\u6210\uFF08\u9700\u8981\u53E0\u52A0\u88C5\u9970\u5668\u6CE8\u518C\u8868\uFF09\uFF0C\u6B64\u5904\u4E0D\u518D\u4F20 skipPaths\n skipPaths: [],\n contextProperty: options.contextProperty,\n replaceBody: true,\n onReject: (result, request) => {\n core_1.logger.warn('rvs request rejected', {\n code: result.code,\n status: result.status,\n url: request?.url,\n method: request?.method,\n });\n },\n });\n const overrides = options.identifyHeaders ?? {};\n this.identifyHeaderNames = [\n (overrides.version ?? rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.version).toLowerCase(),\n (overrides.session ?? rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.session).toLowerCase(),\n (overrides.nonce ?? rand_vec_sig_1.DEFAULT_IDENTIFY_HEADERS.nonce).toLowerCase(),\n ];\n }\n use(req, res, next) {\n const url = req.originalUrl ?? req.url ?? '';\n const pathname = url.split('?')[0];\n // 1) \u52A8\u6001\u4F1A\u8BDD\u7AEF\u70B9\n if (this.options.sessionEndpoint && req.method === 'GET' && this.isSessionPath(pathname)) {\n try {\n res.json(this.server.issueSession());\n }\n catch (err) {\n next(err);\n }\n return;\n }\n // 2) @RvsForce \u4F18\u5148\u4E8E\u4E00\u5207\u653E\u884C\u89C4\u5219\n const forced = this.registry.isForced(url);\n if (!forced) {\n // 3) \u653E\u884C\u6E05\u5355\n if (this.registry.isSkipped(url) || (0, rvs_types_1.matchesAnyPath)(this.options.skipPaths, url)) {\n next();\n return;\n }\n // 4) \u660E\u6587\u8BF7\u6C42\uFF08tolerant \u6A21\u5F0F\uFF09\n if (this.options.unprotected === 'tolerant' && !this.hasIdentifyHeaders(req)) {\n next();\n return;\n }\n }\n // 5) \u54CD\u5E94\u52A0\u5BC6\u51FA\u53E3\n if (this.options.responseEncryption)\n this.patchResponseJson(req, res);\n // 6) \u9A8C\u7B7E/\u89E3\u5BC6\uFF1Brand-vec-sig \u4E2D\u95F4\u4EF6\u5185\u90E8\u5DF2\u6355\u83B7\u5F02\u5E38\u5E76\u8F6C next(error)\n void this.expressMiddleware(req, res, next);\n }\n isSessionPath(pathname) {\n const endpoint = this.options.sessionEndpoint;\n return pathname === endpoint || pathname.endsWith(endpoint);\n }\n hasIdentifyHeaders(req) {\n const headers = req.headers;\n if (!headers)\n return false;\n return this.identifyHeaderNames.some((name) => {\n if (typeof headers.get === 'function') {\n return Boolean(headers.get(name));\n }\n return Boolean(headers[name]);\n });\n }\n patchResponseJson(req, res) {\n if (typeof res.json !== 'function')\n return;\n const original = res.json.bind(res);\n const property = this.options.contextProperty;\n res.json = (body) => {\n const context = req[property];\n if (!context)\n return original(body);\n try {\n return original(this.server.encryptResponse(body, context));\n }\n catch (err) {\n // \u52A0\u5BC6\u5931\u8D25\u7EDD\u4E0D\u56DE\u9000\u660E\u6587\uFF08\u4F1A\u6CC4\u9732\u4E1A\u52A1\u6570\u636E\uFF09\uFF1B\u6539\u4E3A\u901A\u7528\u9519\u8BEF\u58F3\uFF0C\u7531\u5BA2\u6237\u7AEF\u6309\u660E\u6587\u9519\u8BEF\u5904\u7406\n core_1.alertBus.error('rvs:response-encrypt-failed', 'RVS \u54CD\u5E94\u52A0\u5BC6\u5931\u8D25\uFF0C\u5DF2\u963B\u6B62\u660E\u6587\u4E1A\u52A1\u6570\u636E\u8FD4\u56DE', {\n reason: err?.message,\n });\n try {\n res.statusCode = 500;\n }\n catch {\n /* \u5934\u5DF2\u53D1\u51FA\u5219\u5FFD\u7565 */\n }\n return original({ code: 'RVS_RESPONSE_ENCRYPT_FAILED', message: 'response encryption failed' });\n }\n };\n }\n};\nexports.RvsMiddleware = RvsMiddleware;\nexports.RvsMiddleware = RvsMiddleware = __decorate([\n (0, common_1.Injectable)(),\n __param(0, (0, common_1.Inject)(rvs_tokens_1.RVS_SERVER)),\n __param(1, (0, common_1.Inject)(rvs_tokens_1.RVS_OPTIONS)),\n __metadata(\"design:paramtypes\", [Object, Object, rvs_registry_1.RvsRouteRegistry])\n], RvsMiddleware);\n//# sourceMappingURL=rvs.middleware.js.map"],
5
+ "mappings": "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",
6
+ "names": ["decorators", "target", "key", "desc", "c", "d", "i", "k", "v", "paramIndex", "decorator", "__name", "server", "options", "registry", "result", "request", "overrides", "req", "res", "next", "url", "pathname", "err", "endpoint", "headers", "name", "original", "property", "body", "context"]
7
+ }
@@ -1,119 +1,3 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RvsModule = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const core_1 = require("@nestjs/core");
18
- const core_2 = require("@antares-core/core");
19
- const rand_vec_sig_1 = require("rand-vec-sig");
20
- const rvs_middleware_1 = require("./rvs.middleware");
21
- const rvs_registry_1 = require("./rvs.registry");
22
- const rvs_service_1 = require("./rvs.service");
23
- const rvs_tokens_1 = require("./rvs.tokens");
24
- const rvs_types_1 = require("./rvs.types");
25
- /**
26
- * RVS 适配模块:全局验签/解密 + 响应加密 + 装饰器粒度控制 + 会话端点。
27
- *
28
- * imports: [RvsModule.forRoot({ mode: 'static', serverPrivateKey: env.RVS_RSK, redis: redisClient })]
29
- *
30
- * 装配注意:
31
- * - 与 crypto-kit 互斥:启用 RVS 时宿主应关闭 cryptoOption.enableCrypto(双加密通道无法共存)
32
- * - 多实例必须传 redis(防重放存储共享),否则启动期告警
33
- * - 响应加密依赖 res.json 出口,@Res() 直写响应不经过加密(与内核 Transform 拦截器的既有约定一致)
34
- */
35
- let RvsModule = class RvsModule {
36
- constructor(options) {
37
- this.options = options;
38
- }
39
- configure(consumer) {
40
- consumer.apply(rvs_middleware_1.RvsMiddleware).forRoutes('*');
41
- }
42
- static forRoot(options) {
43
- return buildRvsModule((0, rvs_types_1.resolveRvsOptions)(options));
44
- }
45
- static async forRootAsync(factory) {
46
- return buildRvsModule((0, rvs_types_1.resolveRvsOptions)(await factory()));
47
- }
48
- };
49
- exports.RvsModule = RvsModule;
50
- exports.RvsModule = RvsModule = __decorate([
51
- (0, common_1.Module)({}),
52
- __param(0, (0, common_1.Inject)(rvs_tokens_1.RVS_OPTIONS)),
53
- __metadata("design:paramtypes", [Object])
54
- ], RvsModule);
55
- function buildRvsModule(options) {
56
- return {
57
- module: RvsModule,
58
- imports: [core_1.DiscoveryModule],
59
- providers: [
60
- { provide: rvs_tokens_1.RVS_OPTIONS, useValue: options },
61
- { provide: rvs_tokens_1.RVS_SERVER, useFactory: () => createRvsServer(options) },
62
- rvs_registry_1.RvsRouteRegistry,
63
- rvs_service_1.RvsService,
64
- rvs_middleware_1.RvsMiddleware,
65
- ],
66
- exports: [rvs_tokens_1.RVS_SERVER, rvs_tokens_1.RVS_OPTIONS, rvs_service_1.RvsService],
67
- global: true,
68
- };
69
- }
70
- function createRvsServer(options) {
71
- if (!options.serverPrivateKey) {
72
- throw new Error('RvsModule: serverPrivateKey 缺失。私钥仅允许来自环境变量 / KMS,禁止硬编码');
73
- }
74
- const processModel = (0, core_2.detectProcessModel)();
75
- const replayStore = options.replayStore ?? (options.redis ? (0, rand_vec_sig_1.createRedisReplayStore)(options.redis) : undefined);
76
- if (!replayStore && processModel.isCluster) {
77
- core_2.alertBus.error('rvs:replay-store-per-process', '多实例未配置共享防重放存储:跨实例重放无法拦截', {
78
- instances: processModel.instances,
79
- runtime: processModel.runtime,
80
- hint: 'RvsModule 传入 redis(共享 ioredis 实例)',
81
- });
82
- }
83
- if (options.mode === 'dynamic' && processModel.isCluster) {
84
- core_2.logger.warn('rvs dynamic mode with multiple instances: sessSeed 仅存在进程内存', {
85
- instances: processModel.instances,
86
- hint: '开启粘性路由,或依赖客户端 410 重试自愈(客户端已内置)',
87
- });
88
- }
89
- const server = (0, rand_vec_sig_1.createRandVecSigServer)({
90
- mode: options.mode,
91
- serverPrivateKey: options.serverPrivateKey,
92
- versionSeed: options.versionSeed,
93
- versionSeeds: options.versionSeeds,
94
- deploymentId: options.deploymentId,
95
- identifyHeaders: options.identifyHeaders,
96
- profile: options.profile,
97
- allowedPayloadModes: options.allowedPayloadModes,
98
- timestampToleranceMs: options.timestampToleranceMs,
99
- nonceTtlMs: options.nonceTtlMs,
100
- strictSubgroupCheck: options.strictSubgroupCheck,
101
- responseEncryption: options.responseEncryption,
102
- session: options.session,
103
- replayStore,
104
- logger: options.logger ??
105
- ((event, detail) => core_2.logger.debug(`rvs ${event}`, detail)),
106
- });
107
- // 四阶段优雅关闭的资源释放阶段:释放会话定时器与存储连接
108
- (0, core_2.registerResourceCloser)('rvs-server', () => server.close());
109
- core_2.logger.info('rvs module initialized', {
110
- mode: options.mode,
111
- responseEncryption: Boolean(options.responseEncryption),
112
- unprotected: options.unprotected,
113
- replayStore: replayStore ? 'shared' : 'memory',
114
- sessionEndpoint: options.sessionEndpoint ?? null,
115
- instances: processModel.instances,
116
- });
117
- return server;
118
- }
119
- //# sourceMappingURL=rvs.module.js.map
1
+ "use strict";var a=Object.defineProperty;var i=(e,r)=>a(e,"name",{value:r,configurable:!0});var __decorate=this&&this.__decorate||function(e,r,s,o){var n=arguments.length,t=n<3?r:o===null?o=Object.getOwnPropertyDescriptor(r,s):o,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(e,r,s,o);else for(var d=e.length-1;d>=0;d--)(c=e[d])&&(t=(n<3?c(t):n>3?c(r,s,t):c(r,s))||t);return n>3&&t&&Object.defineProperty(r,s,t),t},__metadata=this&&this.__metadata||function(e,r){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,r)},__param=this&&this.__param||function(e,r){return function(s,o){r(s,o,e)}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.RvsModule=void 0;const common_1=require("@nestjs/common"),core_1=require("@nestjs/core"),core_2=require("@antares-core/core"),rand_vec_sig_1=require("rand-vec-sig"),rvs_middleware_1=require("./rvs.middleware"),rvs_registry_1=require("./rvs.registry"),rvs_service_1=require("./rvs.service"),rvs_tokens_1=require("./rvs.tokens"),rvs_types_1=require("./rvs.types");let RvsModule=class{static{i(this,"RvsModule")}constructor(r){this.options=r}configure(r){r.apply(rvs_middleware_1.RvsMiddleware).forRoutes("*")}static forRoot(r){return buildRvsModule((0,rvs_types_1.resolveRvsOptions)(r))}static async forRootAsync(r){return buildRvsModule((0,rvs_types_1.resolveRvsOptions)(await r()))}};exports.RvsModule=RvsModule,exports.RvsModule=RvsModule=__decorate([(0,common_1.Module)({}),__param(0,(0,common_1.Inject)(rvs_tokens_1.RVS_OPTIONS)),__metadata("design:paramtypes",[Object])],RvsModule);function buildRvsModule(e){return{module:RvsModule,imports:[core_1.DiscoveryModule],providers:[{provide:rvs_tokens_1.RVS_OPTIONS,useValue:e},{provide:rvs_tokens_1.RVS_SERVER,useFactory:i(()=>createRvsServer(e),"useFactory")},rvs_registry_1.RvsRouteRegistry,rvs_service_1.RvsService,rvs_middleware_1.RvsMiddleware],exports:[rvs_tokens_1.RVS_SERVER,rvs_tokens_1.RVS_OPTIONS,rvs_service_1.RvsService],global:!0}}i(buildRvsModule,"buildRvsModule");function createRvsServer(e){if(!e.serverPrivateKey)throw new Error("RvsModule: serverPrivateKey \u7F3A\u5931\u3002\u79C1\u94A5\u4EC5\u5141\u8BB8\u6765\u81EA\u73AF\u5883\u53D8\u91CF / KMS\uFF0C\u7981\u6B62\u786C\u7F16\u7801");const r=(0,core_2.detectProcessModel)(),s=e.replayStore??(e.redis?(0,rand_vec_sig_1.createRedisReplayStore)(e.redis):void 0);!s&&r.isCluster&&core_2.alertBus.error("rvs:replay-store-per-process","\u591A\u5B9E\u4F8B\u672A\u914D\u7F6E\u5171\u4EAB\u9632\u91CD\u653E\u5B58\u50A8\uFF1A\u8DE8\u5B9E\u4F8B\u91CD\u653E\u65E0\u6CD5\u62E6\u622A",{instances:r.instances,runtime:r.runtime,hint:"RvsModule \u4F20\u5165 redis\uFF08\u5171\u4EAB ioredis \u5B9E\u4F8B\uFF09"}),e.mode==="dynamic"&&r.isCluster&&core_2.logger.warn("rvs dynamic mode with multiple instances: sessSeed \u4EC5\u5B58\u5728\u8FDB\u7A0B\u5185\u5B58",{instances:r.instances,hint:"\u5F00\u542F\u7C98\u6027\u8DEF\u7531\uFF0C\u6216\u4F9D\u8D56\u5BA2\u6237\u7AEF 410 \u91CD\u8BD5\u81EA\u6108\uFF08\u5BA2\u6237\u7AEF\u5DF2\u5185\u7F6E\uFF09"});const o=(0,rand_vec_sig_1.createRandVecSigServer)({mode:e.mode,serverPrivateKey:e.serverPrivateKey,versionSeed:e.versionSeed,versionSeeds:e.versionSeeds,deploymentId:e.deploymentId,identifyHeaders:e.identifyHeaders,profile:e.profile,allowedPayloadModes:e.allowedPayloadModes,timestampToleranceMs:e.timestampToleranceMs,nonceTtlMs:e.nonceTtlMs,strictSubgroupCheck:e.strictSubgroupCheck,responseEncryption:e.responseEncryption,session:e.session,replayStore:s,logger:e.logger??((n,t)=>core_2.logger.debug(`rvs ${n}`,t))});return(0,core_2.registerResourceCloser)("rvs-server",()=>o.close()),core_2.logger.info("rvs module initialized",{mode:e.mode,responseEncryption:!!e.responseEncryption,unprotected:e.unprotected,replayStore:s?"shared":"memory",sessionEndpoint:e.sessionEndpoint??null,instances:r.instances}),o}i(createRvsServer,"createRvsServer");
2
+
3
+ //# sourceMappingURL=rvs.module.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.module.js","sourceRoot":"","sources":["../src/rvs.module.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n 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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RvsModule = void 0;\nconst common_1 = require(\"@nestjs/common\");\nconst core_1 = require(\"@nestjs/core\");\nconst core_2 = require(\"@antares-core/core\");\nconst rand_vec_sig_1 = require(\"rand-vec-sig\");\nconst rvs_middleware_1 = require(\"./rvs.middleware\");\nconst rvs_registry_1 = require(\"./rvs.registry\");\nconst rvs_service_1 = require(\"./rvs.service\");\nconst rvs_tokens_1 = require(\"./rvs.tokens\");\nconst rvs_types_1 = require(\"./rvs.types\");\n/**\n * RVS \u9002\u914D\u6A21\u5757\uFF1A\u5168\u5C40\u9A8C\u7B7E/\u89E3\u5BC6 + \u54CD\u5E94\u52A0\u5BC6 + \u88C5\u9970\u5668\u7C92\u5EA6\u63A7\u5236 + \u4F1A\u8BDD\u7AEF\u70B9\u3002\n *\n * imports: [RvsModule.forRoot({ mode: 'static', serverPrivateKey: env.RVS_RSK, redis: redisClient })]\n *\n * \u88C5\u914D\u6CE8\u610F\uFF1A\n * - \u4E0E crypto-kit \u4E92\u65A5\uFF1A\u542F\u7528 RVS \u65F6\u5BBF\u4E3B\u5E94\u5173\u95ED cryptoOption.enableCrypto\uFF08\u53CC\u52A0\u5BC6\u901A\u9053\u65E0\u6CD5\u5171\u5B58\uFF09\n * - \u591A\u5B9E\u4F8B\u5FC5\u987B\u4F20 redis\uFF08\u9632\u91CD\u653E\u5B58\u50A8\u5171\u4EAB\uFF09\uFF0C\u5426\u5219\u542F\u52A8\u671F\u544A\u8B66\n * - \u54CD\u5E94\u52A0\u5BC6\u4F9D\u8D56 res.json \u51FA\u53E3\uFF0C@Res() \u76F4\u5199\u54CD\u5E94\u4E0D\u7ECF\u8FC7\u52A0\u5BC6\uFF08\u4E0E\u5185\u6838 Transform \u62E6\u622A\u5668\u7684\u65E2\u6709\u7EA6\u5B9A\u4E00\u81F4\uFF09\n */\nlet RvsModule = class RvsModule {\n constructor(options) {\n this.options = options;\n }\n configure(consumer) {\n consumer.apply(rvs_middleware_1.RvsMiddleware).forRoutes('*');\n }\n static forRoot(options) {\n return buildRvsModule((0, rvs_types_1.resolveRvsOptions)(options));\n }\n static async forRootAsync(factory) {\n return buildRvsModule((0, rvs_types_1.resolveRvsOptions)(await factory()));\n }\n};\nexports.RvsModule = RvsModule;\nexports.RvsModule = RvsModule = __decorate([\n (0, common_1.Module)({}),\n __param(0, (0, common_1.Inject)(rvs_tokens_1.RVS_OPTIONS)),\n __metadata(\"design:paramtypes\", [Object])\n], RvsModule);\nfunction buildRvsModule(options) {\n return {\n module: RvsModule,\n imports: [core_1.DiscoveryModule],\n providers: [\n { provide: rvs_tokens_1.RVS_OPTIONS, useValue: options },\n { provide: rvs_tokens_1.RVS_SERVER, useFactory: () => createRvsServer(options) },\n rvs_registry_1.RvsRouteRegistry,\n rvs_service_1.RvsService,\n rvs_middleware_1.RvsMiddleware,\n ],\n exports: [rvs_tokens_1.RVS_SERVER, rvs_tokens_1.RVS_OPTIONS, rvs_service_1.RvsService],\n global: true,\n };\n}\nfunction createRvsServer(options) {\n if (!options.serverPrivateKey) {\n throw new Error('RvsModule: serverPrivateKey \u7F3A\u5931\u3002\u79C1\u94A5\u4EC5\u5141\u8BB8\u6765\u81EA\u73AF\u5883\u53D8\u91CF / KMS\uFF0C\u7981\u6B62\u786C\u7F16\u7801');\n }\n const processModel = (0, core_2.detectProcessModel)();\n const replayStore = options.replayStore ?? (options.redis ? (0, rand_vec_sig_1.createRedisReplayStore)(options.redis) : undefined);\n if (!replayStore && processModel.isCluster) {\n core_2.alertBus.error('rvs:replay-store-per-process', '\u591A\u5B9E\u4F8B\u672A\u914D\u7F6E\u5171\u4EAB\u9632\u91CD\u653E\u5B58\u50A8\uFF1A\u8DE8\u5B9E\u4F8B\u91CD\u653E\u65E0\u6CD5\u62E6\u622A', {\n instances: processModel.instances,\n runtime: processModel.runtime,\n hint: 'RvsModule \u4F20\u5165 redis\uFF08\u5171\u4EAB ioredis \u5B9E\u4F8B\uFF09',\n });\n }\n if (options.mode === 'dynamic' && processModel.isCluster) {\n core_2.logger.warn('rvs dynamic mode with multiple instances: sessSeed \u4EC5\u5B58\u5728\u8FDB\u7A0B\u5185\u5B58', {\n instances: processModel.instances,\n hint: '\u5F00\u542F\u7C98\u6027\u8DEF\u7531\uFF0C\u6216\u4F9D\u8D56\u5BA2\u6237\u7AEF 410 \u91CD\u8BD5\u81EA\u6108\uFF08\u5BA2\u6237\u7AEF\u5DF2\u5185\u7F6E\uFF09',\n });\n }\n const server = (0, rand_vec_sig_1.createRandVecSigServer)({\n mode: options.mode,\n serverPrivateKey: options.serverPrivateKey,\n versionSeed: options.versionSeed,\n versionSeeds: options.versionSeeds,\n deploymentId: options.deploymentId,\n identifyHeaders: options.identifyHeaders,\n profile: options.profile,\n allowedPayloadModes: options.allowedPayloadModes,\n timestampToleranceMs: options.timestampToleranceMs,\n nonceTtlMs: options.nonceTtlMs,\n strictSubgroupCheck: options.strictSubgroupCheck,\n responseEncryption: options.responseEncryption,\n session: options.session,\n replayStore,\n logger: options.logger ??\n ((event, detail) => core_2.logger.debug(`rvs ${event}`, detail)),\n });\n // \u56DB\u9636\u6BB5\u4F18\u96C5\u5173\u95ED\u7684\u8D44\u6E90\u91CA\u653E\u9636\u6BB5\uFF1A\u91CA\u653E\u4F1A\u8BDD\u5B9A\u65F6\u5668\u4E0E\u5B58\u50A8\u8FDE\u63A5\n (0, core_2.registerResourceCloser)('rvs-server', () => server.close());\n core_2.logger.info('rvs module initialized', {\n mode: options.mode,\n responseEncryption: Boolean(options.responseEncryption),\n unprotected: options.unprotected,\n replayStore: replayStore ? 'shared' : 'memory',\n sessionEndpoint: options.sessionEndpoint ?? null,\n instances: processModel.instances,\n });\n return server;\n}\n//# sourceMappingURL=rvs.module.js.map"],
5
+ "mappings": "4FACA,IAAI,WAAc,MAAQ,KAAK,YAAe,SAAUA,EAAYC,EAAQC,EAAKC,EAAM,CACnF,IAAIC,EAAI,UAAU,OAAQC,EAAID,EAAI,EAAIH,EAASE,IAAS,KAAOA,EAAO,OAAO,yBAAyBF,EAAQC,CAAG,EAAIC,EAAMG,EAC3H,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAYD,EAAI,QAAQ,SAASL,EAAYC,EAAQC,EAAKC,CAAI,MACxH,SAASI,EAAIP,EAAW,OAAS,EAAGO,GAAK,EAAGA,KAASD,EAAIN,EAAWO,CAAC,KAAGF,GAAKD,EAAI,EAAIE,EAAED,CAAC,EAAID,EAAI,EAAIE,EAAEL,EAAQC,EAAKG,CAAC,EAAIC,EAAEL,EAAQC,CAAG,IAAMG,GAChJ,OAAOD,EAAI,GAAKC,GAAK,OAAO,eAAeJ,EAAQC,EAAKG,CAAC,EAAGA,CAChE,EACI,WAAc,MAAQ,KAAK,YAAe,SAAUG,EAAGC,EAAG,CAC1D,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY,OAAO,QAAQ,SAASD,EAAGC,CAAC,CAC3G,EACI,QAAW,MAAQ,KAAK,SAAY,SAAUC,EAAYC,EAAW,CACrE,OAAO,SAAUV,EAAQC,EAAK,CAAES,EAAUV,EAAQC,EAAKQ,CAAU,CAAG,CACxE,EACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,QAAQ,UAAY,OACpB,MAAM,SAAW,QAAQ,gBAAgB,EACnC,OAAS,QAAQ,cAAc,EAC/B,OAAS,QAAQ,oBAAoB,EACrC,eAAiB,QAAQ,cAAc,EACvC,iBAAmB,QAAQ,kBAAkB,EAC7C,eAAiB,QAAQ,gBAAgB,EACzC,cAAgB,QAAQ,eAAe,EACvC,aAAe,QAAQ,cAAc,EACrC,YAAc,QAAQ,aAAa,EAWzC,IAAI,UAAY,KAAgB,CAlChC,MAkCgC,CAAAE,EAAA,kBAC5B,YAAYC,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,UAAUC,EAAU,CAChBA,EAAS,MAAM,iBAAiB,aAAa,EAAE,UAAU,GAAG,CAChE,CACA,OAAO,QAAQD,EAAS,CACpB,OAAO,kBAAmB,YAAY,mBAAmBA,CAAO,CAAC,CACrE,CACA,aAAa,aAAaE,EAAS,CAC/B,OAAO,kBAAmB,YAAY,mBAAmB,MAAMA,EAAQ,CAAC,CAAC,CAC7E,CACJ,EACA,QAAQ,UAAY,UACpB,QAAQ,UAAY,UAAY,WAAW,IACnC,SAAS,QAAQ,CAAC,CAAC,EACvB,QAAQ,KAAO,SAAS,QAAQ,aAAa,WAAW,CAAC,EACzD,WAAW,oBAAqB,CAAC,MAAM,CAAC,CAC5C,EAAG,SAAS,EACZ,SAAS,eAAeF,EAAS,CAC7B,MAAO,CACH,OAAQ,UACR,QAAS,CAAC,OAAO,eAAe,EAChC,UAAW,CACP,CAAE,QAAS,aAAa,YAAa,SAAUA,CAAQ,EACvD,CAAE,QAAS,aAAa,WAAY,WAAYD,EAAA,IAAM,gBAAgBC,CAAO,EAA7B,aAA+B,EAC/E,eAAe,iBACf,cAAc,WACd,iBAAiB,aACrB,EACA,QAAS,CAAC,aAAa,WAAY,aAAa,YAAa,cAAc,UAAU,EACrF,OAAQ,EACZ,CACJ,CAdSD,EAAA,iCAeT,SAAS,gBAAgBC,EAAS,CAC9B,GAAI,CAACA,EAAQ,iBACT,MAAM,IAAI,MAAM,4JAAwD,EAE5E,MAAMG,KAAmB,OAAO,oBAAoB,EAC9CC,EAAcJ,EAAQ,cAAgBA,EAAQ,SAAY,eAAe,wBAAwBA,EAAQ,KAAK,EAAI,QACpH,CAACI,GAAeD,EAAa,WAC7B,OAAO,SAAS,MAAM,+BAAgC,6IAA2B,CAC7E,UAAWA,EAAa,UACxB,QAASA,EAAa,QACtB,KAAM,2EACV,CAAC,EAEDH,EAAQ,OAAS,WAAaG,EAAa,WAC3C,OAAO,OAAO,KAAK,gGAA8D,CAC7E,UAAWA,EAAa,UACxB,KAAM,6JACV,CAAC,EAEL,MAAME,KAAa,eAAe,wBAAwB,CACtD,KAAML,EAAQ,KACd,iBAAkBA,EAAQ,iBAC1B,YAAaA,EAAQ,YACrB,aAAcA,EAAQ,aACtB,aAAcA,EAAQ,aACtB,gBAAiBA,EAAQ,gBACzB,QAASA,EAAQ,QACjB,oBAAqBA,EAAQ,oBAC7B,qBAAsBA,EAAQ,qBAC9B,WAAYA,EAAQ,WACpB,oBAAqBA,EAAQ,oBAC7B,mBAAoBA,EAAQ,mBAC5B,QAASA,EAAQ,QACjB,YAAAI,EACA,OAAQJ,EAAQ,SACX,CAACM,EAAOC,IAAW,OAAO,OAAO,MAAM,OAAOD,CAAK,GAAIC,CAAM,EACtE,CAAC,EAED,SAAI,OAAO,wBAAwB,aAAc,IAAMF,EAAO,MAAM,CAAC,EACrE,OAAO,OAAO,KAAK,yBAA0B,CACzC,KAAML,EAAQ,KACd,mBAAoB,EAAQA,EAAQ,mBACpC,YAAaA,EAAQ,YACrB,YAAaI,EAAc,SAAW,SACtC,gBAAiBJ,EAAQ,iBAAmB,KAC5C,UAAWG,EAAa,SAC5B,CAAC,EACME,CACX,CAhDSN,EAAA",
6
+ "names": ["decorators", "target", "key", "desc", "c", "r", "d", "i", "k", "v", "paramIndex", "decorator", "__name", "options", "consumer", "factory", "processModel", "replayStore", "server", "event", "detail"]
7
+ }
@@ -1,100 +1,3 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RvsRouteRegistry = void 0;
13
- exports.pathToRegex = pathToRegex;
14
- exports.collectRvsRouteMatchers = collectRvsRouteMatchers;
15
- const common_1 = require("@nestjs/common");
16
- const constants_1 = require("@nestjs/common/constants");
17
- const core_1 = require("@nestjs/core");
18
- const rvs_decorators_1 = require("./rvs.decorators");
19
- /** 路由路径转正则:支持 :param 与 * 通配;允许全局前缀(如 /api/health/live 命中 health/live) */
20
- function pathToRegex(routePath) {
21
- const normalized = routePath.replace(/^\/+|\/+$/g, '');
22
- if (!normalized)
23
- return /^.*$/;
24
- const pattern = normalized
25
- .split('/')
26
- .map((segment) => {
27
- if (segment === '*')
28
- return '.*';
29
- if (segment.startsWith(':'))
30
- return '[^/]+';
31
- return segment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
32
- })
33
- .join('/');
34
- return new RegExp(`(?:^|/)${pattern}(?:/)?(?:\\?|#|$)`);
35
- }
36
- /**
37
- * 扫描控制器元数据,收集 @RvsSkip / @RvsForce 标记的路由正则。
38
- * 抽成纯函数以便测试;Nest 容器相关逻辑全部在 RvsRouteRegistry。
39
- */
40
- function collectRvsRouteMatchers(controllers, reflector) {
41
- const skip = [];
42
- const force = [];
43
- for (const wrapper of controllers) {
44
- const { instance, metatype } = wrapper;
45
- if (!instance || !metatype)
46
- continue;
47
- const classPath = Reflect.getMetadata(constants_1.PATH_METADATA, metatype) ?? '';
48
- const classSkip = reflector.get(rvs_decorators_1.RVS_SKIP_METADATA, metatype);
49
- const classForce = reflector.get(rvs_decorators_1.RVS_FORCE_METADATA, metatype);
50
- const proto = Object.getPrototypeOf(instance);
51
- for (const methodName of Object.getOwnPropertyNames(proto)) {
52
- if (methodName === 'constructor')
53
- continue;
54
- const handler = proto[methodName];
55
- if (typeof handler !== 'function')
56
- continue;
57
- const methodPath = Reflect.getMetadata(constants_1.PATH_METADATA, handler);
58
- if (methodPath === undefined)
59
- continue; // 非路由方法
60
- const joined = [classPath, methodPath].filter((p) => p !== undefined && p !== '').join('/');
61
- const forceHit = classForce || reflector.get(rvs_decorators_1.RVS_FORCE_METADATA, handler);
62
- const skipHit = classSkip || reflector.get(rvs_decorators_1.RVS_SKIP_METADATA, handler);
63
- if (forceHit)
64
- force.push(pathToRegex(joined));
65
- else if (skipHit)
66
- skip.push(pathToRegex(joined));
67
- }
68
- }
69
- return { skip, force };
70
- }
71
- /**
72
- * 装饰器路由注册表:应用启动完成后扫描一次。
73
- * 中间件在请求期查询;启动完成前不会有请求,因此时序安全。
74
- */
75
- let RvsRouteRegistry = class RvsRouteRegistry {
76
- constructor(discovery, reflector) {
77
- this.discovery = discovery;
78
- this.reflector = reflector;
79
- this.skipMatchers = [];
80
- this.forceMatchers = [];
81
- }
82
- onApplicationBootstrap() {
83
- const { skip, force } = collectRvsRouteMatchers(this.discovery.getControllers(), this.reflector);
84
- this.skipMatchers = skip;
85
- this.forceMatchers = force;
86
- }
87
- isSkipped(url) {
88
- return this.skipMatchers.some((re) => re.test(url));
89
- }
90
- isForced(url) {
91
- return this.forceMatchers.some((re) => re.test(url));
92
- }
93
- };
94
- exports.RvsRouteRegistry = RvsRouteRegistry;
95
- exports.RvsRouteRegistry = RvsRouteRegistry = __decorate([
96
- (0, common_1.Injectable)(),
97
- __metadata("design:paramtypes", [core_1.DiscoveryService,
98
- core_1.Reflector])
99
- ], RvsRouteRegistry);
100
- //# sourceMappingURL=rvs.registry.js.map
1
+ "use strict";var v=Object.defineProperty;var f=(o,t)=>v(o,"name",{value:t,configurable:!0});var __decorate=this&&this.__decorate||function(o,t,e,s){var n=arguments.length,r=n<3?t:s===null?s=Object.getOwnPropertyDescriptor(t,e):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,t,e,s);else for(var i=o.length-1;i>=0;i--)(c=o[i])&&(r=(n<3?c(r):n>3?c(t,e,r):c(t,e))||r);return n>3&&r&&Object.defineProperty(t,e,r),r},__metadata=this&&this.__metadata||function(o,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.RvsRouteRegistry=void 0,exports.pathToRegex=pathToRegex,exports.collectRvsRouteMatchers=collectRvsRouteMatchers;const common_1=require("@nestjs/common"),constants_1=require("@nestjs/common/constants"),core_1=require("@nestjs/core"),rvs_decorators_1=require("./rvs.decorators");function pathToRegex(o){const t=o.replace(/^\/+|\/+$/g,"");if(!t)return/^.*$/;const e=t.split("/").map(s=>s==="*"?".*":s.startsWith(":")?"[^/]+":s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("/");return new RegExp(`(?:^|/)${e}(?:/)?(?:\\?|#|$)`)}f(pathToRegex,"pathToRegex");function collectRvsRouteMatchers(o,t){const e=[],s=[];for(const n of o){const{instance:r,metatype:c}=n;if(!r||!c)continue;const i=Reflect.getMetadata(constants_1.PATH_METADATA,c)??"",d=t.get(rvs_decorators_1.RVS_SKIP_METADATA,c),_=t.get(rvs_decorators_1.RVS_FORCE_METADATA,c),p=Object.getPrototypeOf(r);for(const u of Object.getOwnPropertyNames(p)){if(u==="constructor")continue;const a=p[u];if(typeof a!="function")continue;const R=Reflect.getMetadata(constants_1.PATH_METADATA,a);if(R===void 0)continue;const l=[i,R].filter(h=>h!==void 0&&h!=="").join("/"),A=_||t.get(rvs_decorators_1.RVS_FORCE_METADATA,a),m=d||t.get(rvs_decorators_1.RVS_SKIP_METADATA,a);A?s.push(pathToRegex(l)):m&&e.push(pathToRegex(l))}}return{skip:e,force:s}}f(collectRvsRouteMatchers,"collectRvsRouteMatchers");let RvsRouteRegistry=class{static{f(this,"RvsRouteRegistry")}constructor(t,e){this.discovery=t,this.reflector=e,this.skipMatchers=[],this.forceMatchers=[]}onApplicationBootstrap(){const{skip:t,force:e}=collectRvsRouteMatchers(this.discovery.getControllers(),this.reflector);this.skipMatchers=t,this.forceMatchers=e}isSkipped(t){return this.skipMatchers.some(e=>e.test(t))}isForced(t){return this.forceMatchers.some(e=>e.test(t))}};exports.RvsRouteRegistry=RvsRouteRegistry,exports.RvsRouteRegistry=RvsRouteRegistry=__decorate([(0,common_1.Injectable)(),__metadata("design:paramtypes",[core_1.DiscoveryService,core_1.Reflector])],RvsRouteRegistry);
2
+
3
+ //# sourceMappingURL=rvs.registry.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.registry.js","sourceRoot":"","sources":["../src/rvs.registry.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n 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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RvsRouteRegistry = void 0;\nexports.pathToRegex = pathToRegex;\nexports.collectRvsRouteMatchers = collectRvsRouteMatchers;\nconst common_1 = require(\"@nestjs/common\");\nconst constants_1 = require(\"@nestjs/common/constants\");\nconst core_1 = require(\"@nestjs/core\");\nconst rvs_decorators_1 = require(\"./rvs.decorators\");\n/** \u8DEF\u7531\u8DEF\u5F84\u8F6C\u6B63\u5219\uFF1A\u652F\u6301 :param \u4E0E * \u901A\u914D\uFF1B\u5141\u8BB8\u5168\u5C40\u524D\u7F00\uFF08\u5982 /api/health/live \u547D\u4E2D health/live\uFF09 */\nfunction pathToRegex(routePath) {\n const normalized = routePath.replace(/^\\/+|\\/+$/g, '');\n if (!normalized)\n return /^.*$/;\n const pattern = normalized\n .split('/')\n .map((segment) => {\n if (segment === '*')\n return '.*';\n if (segment.startsWith(':'))\n return '[^/]+';\n return segment.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n })\n .join('/');\n return new RegExp(`(?:^|/)${pattern}(?:/)?(?:\\\\?|#|$)`);\n}\n/**\n * \u626B\u63CF\u63A7\u5236\u5668\u5143\u6570\u636E\uFF0C\u6536\u96C6 @RvsSkip / @RvsForce \u6807\u8BB0\u7684\u8DEF\u7531\u6B63\u5219\u3002\n * \u62BD\u6210\u7EAF\u51FD\u6570\u4EE5\u4FBF\u6D4B\u8BD5\uFF1BNest \u5BB9\u5668\u76F8\u5173\u903B\u8F91\u5168\u90E8\u5728 RvsRouteRegistry\u3002\n */\nfunction collectRvsRouteMatchers(controllers, reflector) {\n const skip = [];\n const force = [];\n for (const wrapper of controllers) {\n const { instance, metatype } = wrapper;\n if (!instance || !metatype)\n continue;\n const classPath = Reflect.getMetadata(constants_1.PATH_METADATA, metatype) ?? '';\n const classSkip = reflector.get(rvs_decorators_1.RVS_SKIP_METADATA, metatype);\n const classForce = reflector.get(rvs_decorators_1.RVS_FORCE_METADATA, metatype);\n const proto = Object.getPrototypeOf(instance);\n for (const methodName of Object.getOwnPropertyNames(proto)) {\n if (methodName === 'constructor')\n continue;\n const handler = proto[methodName];\n if (typeof handler !== 'function')\n continue;\n const methodPath = Reflect.getMetadata(constants_1.PATH_METADATA, handler);\n if (methodPath === undefined)\n continue; // \u975E\u8DEF\u7531\u65B9\u6CD5\n const joined = [classPath, methodPath].filter((p) => p !== undefined && p !== '').join('/');\n const forceHit = classForce || reflector.get(rvs_decorators_1.RVS_FORCE_METADATA, handler);\n const skipHit = classSkip || reflector.get(rvs_decorators_1.RVS_SKIP_METADATA, handler);\n if (forceHit)\n force.push(pathToRegex(joined));\n else if (skipHit)\n skip.push(pathToRegex(joined));\n }\n }\n return { skip, force };\n}\n/**\n * \u88C5\u9970\u5668\u8DEF\u7531\u6CE8\u518C\u8868\uFF1A\u5E94\u7528\u542F\u52A8\u5B8C\u6210\u540E\u626B\u63CF\u4E00\u6B21\u3002\n * \u4E2D\u95F4\u4EF6\u5728\u8BF7\u6C42\u671F\u67E5\u8BE2\uFF1B\u542F\u52A8\u5B8C\u6210\u524D\u4E0D\u4F1A\u6709\u8BF7\u6C42\uFF0C\u56E0\u6B64\u65F6\u5E8F\u5B89\u5168\u3002\n */\nlet RvsRouteRegistry = class RvsRouteRegistry {\n constructor(discovery, reflector) {\n this.discovery = discovery;\n this.reflector = reflector;\n this.skipMatchers = [];\n this.forceMatchers = [];\n }\n onApplicationBootstrap() {\n const { skip, force } = collectRvsRouteMatchers(this.discovery.getControllers(), this.reflector);\n this.skipMatchers = skip;\n this.forceMatchers = force;\n }\n isSkipped(url) {\n return this.skipMatchers.some((re) => re.test(url));\n }\n isForced(url) {\n return this.forceMatchers.some((re) => re.test(url));\n }\n};\nexports.RvsRouteRegistry = RvsRouteRegistry;\nexports.RvsRouteRegistry = RvsRouteRegistry = __decorate([\n (0, common_1.Injectable)(),\n __metadata(\"design:paramtypes\", [core_1.DiscoveryService,\n core_1.Reflector])\n], RvsRouteRegistry);\n//# sourceMappingURL=rvs.registry.js.map"],
5
+ "mappings": "4FACA,IAAI,WAAc,MAAQ,KAAK,YAAe,SAAUA,EAAYC,EAAQC,EAAKC,EAAM,CACnF,IAAIC,EAAI,UAAU,OAAQ,EAAIA,EAAI,EAAIH,EAASE,IAAS,KAAOA,EAAO,OAAO,yBAAyBF,EAAQC,CAAG,EAAIC,EAAME,EAC3H,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY,EAAI,QAAQ,SAASL,EAAYC,EAAQC,EAAKC,CAAI,MACxH,SAAS,EAAIH,EAAW,OAAS,EAAG,GAAK,EAAG,KAASK,EAAIL,EAAW,CAAC,KAAG,GAAKI,EAAI,EAAIC,EAAE,CAAC,EAAID,EAAI,EAAIC,EAAEJ,EAAQC,EAAK,CAAC,EAAIG,EAAEJ,EAAQC,CAAG,IAAM,GAChJ,OAAOE,EAAI,GAAK,GAAK,OAAO,eAAeH,EAAQC,EAAK,CAAC,EAAG,CAChE,EACI,WAAc,MAAQ,KAAK,YAAe,SAAUI,EAAGC,EAAG,CAC1D,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY,OAAO,QAAQ,SAASD,EAAGC,CAAC,CAC3G,EACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,QAAQ,iBAAmB,OAC3B,QAAQ,YAAc,YACtB,QAAQ,wBAA0B,wBAClC,MAAM,SAAW,QAAQ,gBAAgB,EACnC,YAAc,QAAQ,0BAA0B,EAChD,OAAS,QAAQ,cAAc,EAC/B,iBAAmB,QAAQ,kBAAkB,EAEnD,SAAS,YAAYC,EAAW,CAC5B,MAAMC,EAAaD,EAAU,QAAQ,aAAc,EAAE,EACrD,GAAI,CAACC,EACD,MAAO,OACX,MAAMC,EAAUD,EACX,MAAM,GAAG,EACT,IAAKE,GACFA,IAAY,IACL,KACPA,EAAQ,WAAW,GAAG,EACf,QACJA,EAAQ,QAAQ,sBAAuB,MAAM,CACvD,EACI,KAAK,GAAG,EACb,OAAO,IAAI,OAAO,UAAUD,CAAO,mBAAmB,CAC1D,CAfSE,EAAA,2BAoBT,SAAS,wBAAwBC,EAAaC,EAAW,CACrD,MAAMC,EAAO,CAAC,EACRC,EAAQ,CAAC,EACf,UAAWC,KAAWJ,EAAa,CAC/B,KAAM,CAAE,SAAAK,EAAU,SAAAC,CAAS,EAAIF,EAC/B,GAAI,CAACC,GAAY,CAACC,EACd,SACJ,MAAMC,EAAY,QAAQ,YAAY,YAAY,cAAeD,CAAQ,GAAK,GACxEE,EAAYP,EAAU,IAAI,iBAAiB,kBAAmBK,CAAQ,EACtEG,EAAaR,EAAU,IAAI,iBAAiB,mBAAoBK,CAAQ,EACxEI,EAAQ,OAAO,eAAeL,CAAQ,EAC5C,UAAWM,KAAc,OAAO,oBAAoBD,CAAK,EAAG,CACxD,GAAIC,IAAe,cACf,SACJ,MAAMC,EAAUF,EAAMC,CAAU,EAChC,GAAI,OAAOC,GAAY,WACnB,SACJ,MAAMC,EAAa,QAAQ,YAAY,YAAY,cAAeD,CAAO,EACzE,GAAIC,IAAe,OACf,SACJ,MAAMC,EAAS,CAACP,EAAWM,CAAU,EAAE,OAAQE,GAAMA,IAAM,QAAaA,IAAM,EAAE,EAAE,KAAK,GAAG,EACpFC,EAAWP,GAAcR,EAAU,IAAI,iBAAiB,mBAAoBW,CAAO,EACnFK,EAAUT,GAAaP,EAAU,IAAI,iBAAiB,kBAAmBW,CAAO,EAClFI,EACAb,EAAM,KAAK,YAAYW,CAAM,CAAC,EACzBG,GACLf,EAAK,KAAK,YAAYY,CAAM,CAAC,CACrC,CACJ,CACA,MAAO,CAAE,KAAAZ,EAAM,MAAAC,CAAM,CACzB,CA9BSJ,EAAA,mDAmCT,IAAI,iBAAmB,KAAuB,CA1E9C,MA0E8C,CAAAA,EAAA,yBAC1C,YAAYmB,EAAWjB,EAAW,CAC9B,KAAK,UAAYiB,EACjB,KAAK,UAAYjB,EACjB,KAAK,aAAe,CAAC,EACrB,KAAK,cAAgB,CAAC,CAC1B,CACA,wBAAyB,CACrB,KAAM,CAAE,KAAAC,EAAM,MAAAC,CAAM,EAAI,wBAAwB,KAAK,UAAU,eAAe,EAAG,KAAK,SAAS,EAC/F,KAAK,aAAeD,EACpB,KAAK,cAAgBC,CACzB,CACA,UAAUgB,EAAK,CACX,OAAO,KAAK,aAAa,KAAMC,GAAOA,EAAG,KAAKD,CAAG,CAAC,CACtD,CACA,SAASA,EAAK,CACV,OAAO,KAAK,cAAc,KAAMC,GAAOA,EAAG,KAAKD,CAAG,CAAC,CACvD,CACJ,EACA,QAAQ,iBAAmB,iBAC3B,QAAQ,iBAAmB,iBAAmB,WAAW,IACjD,SAAS,YAAY,EACzB,WAAW,oBAAqB,CAAC,OAAO,iBACpC,OAAO,SAAS,CAAC,CACzB,EAAG,gBAAgB",
6
+ "names": ["decorators", "target", "key", "desc", "c", "d", "k", "v", "routePath", "normalized", "pattern", "segment", "__name", "controllers", "reflector", "skip", "force", "wrapper", "instance", "metatype", "classPath", "classSkip", "classForce", "proto", "methodName", "handler", "methodPath", "joined", "p", "forceHit", "skipHit", "discovery", "url", "re"]
7
+ }
@@ -1,49 +1,3 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RvsService = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const rvs_tokens_1 = require("./rvs.tokens");
18
- /**
19
- * RvsService:业务侧访问 RVS 能力的唯一出口。
20
- * 直接暴露 server 供高级用法(自定义 verify 流程 / internals),常规路径用封装方法。
21
- */
22
- let RvsService = class RvsService {
23
- constructor(server) {
24
- this.server = server;
25
- }
26
- /** 手动验签(自定义中间件/网关场景);不抛异常,失败经 result.ok 判断 */
27
- verify(input) {
28
- return this.server.verify(input);
29
- }
30
- /** 动态模式:签发会话种子(宿主自定义下发渠道时使用) */
31
- issueSession(options) {
32
- return this.server.issueSession(options);
33
- }
34
- /** 动态模式:吊销会话(登出等场景) */
35
- revokeSession(sessionId) {
36
- this.server.revokeSession(sessionId);
37
- }
38
- /** 加密响应体(自定义响应出口时使用) */
39
- encryptResponse(payload, context) {
40
- return this.server.encryptResponse(payload, context);
41
- }
42
- };
43
- exports.RvsService = RvsService;
44
- exports.RvsService = RvsService = __decorate([
45
- (0, common_1.Injectable)(),
46
- __param(0, (0, common_1.Inject)(rvs_tokens_1.RVS_SERVER)),
47
- __metadata("design:paramtypes", [Object])
48
- ], RvsService);
49
- //# sourceMappingURL=rvs.service.js.map
1
+ "use strict";var a=Object.defineProperty;var v=(t,e)=>a(t,"name",{value:e,configurable:!0});var __decorate=this&&this.__decorate||function(t,e,r,n){var o=arguments.length,s=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,r):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(t,e,r,n);else for(var c=t.length-1;c>=0;c--)(i=t[c])&&(s=(o<3?i(s):o>3?i(e,r,s):i(e,r))||s);return o>3&&s&&Object.defineProperty(e,r,s),s},__metadata=this&&this.__metadata||function(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)},__param=this&&this.__param||function(t,e){return function(r,n){e(r,n,t)}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.RvsService=void 0;const common_1=require("@nestjs/common"),rvs_tokens_1=require("./rvs.tokens");let RvsService=class{static{v(this,"RvsService")}constructor(e){this.server=e}verify(e){return this.server.verify(e)}issueSession(e){return this.server.issueSession(e)}revokeSession(e){this.server.revokeSession(e)}encryptResponse(e,r){return this.server.encryptResponse(e,r)}};exports.RvsService=RvsService,exports.RvsService=RvsService=__decorate([(0,common_1.Injectable)(),__param(0,(0,common_1.Inject)(rvs_tokens_1.RVS_SERVER)),__metadata("design:paramtypes",[Object])],RvsService);
2
+
3
+ //# sourceMappingURL=rvs.service.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.service.js","sourceRoot":"","sources":["../src/rvs.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,6CAA0C;AAG1C;;;GAGG;AAEI,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAAyC,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAE9D,8CAA8C;IAC9C,MAAM,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,gCAAgC;IAChC,YAAY,CAAC,OAAgD;QAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,uBAAuB;IACvB,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,wBAAwB;IACxB,eAAe,CAAC,OAAgB,EAAE,OAAmB;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AAtBY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,uBAAU,CAAC,CAAA;;GADpB,UAAU,CAsBtB"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n 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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RvsService = void 0;\nconst common_1 = require(\"@nestjs/common\");\nconst rvs_tokens_1 = require(\"./rvs.tokens\");\n/**\n * RvsService\uFF1A\u4E1A\u52A1\u4FA7\u8BBF\u95EE RVS \u80FD\u529B\u7684\u552F\u4E00\u51FA\u53E3\u3002\n * \u76F4\u63A5\u66B4\u9732 server \u4F9B\u9AD8\u7EA7\u7528\u6CD5\uFF08\u81EA\u5B9A\u4E49 verify \u6D41\u7A0B / internals\uFF09\uFF0C\u5E38\u89C4\u8DEF\u5F84\u7528\u5C01\u88C5\u65B9\u6CD5\u3002\n */\nlet RvsService = class RvsService {\n constructor(server) {\n this.server = server;\n }\n /** \u624B\u52A8\u9A8C\u7B7E\uFF08\u81EA\u5B9A\u4E49\u4E2D\u95F4\u4EF6/\u7F51\u5173\u573A\u666F\uFF09\uFF1B\u4E0D\u629B\u5F02\u5E38\uFF0C\u5931\u8D25\u7ECF result.ok \u5224\u65AD */\n verify(input) {\n return this.server.verify(input);\n }\n /** \u52A8\u6001\u6A21\u5F0F\uFF1A\u7B7E\u53D1\u4F1A\u8BDD\u79CD\u5B50\uFF08\u5BBF\u4E3B\u81EA\u5B9A\u4E49\u4E0B\u53D1\u6E20\u9053\u65F6\u4F7F\u7528\uFF09 */\n issueSession(options) {\n return this.server.issueSession(options);\n }\n /** \u52A8\u6001\u6A21\u5F0F\uFF1A\u540A\u9500\u4F1A\u8BDD\uFF08\u767B\u51FA\u7B49\u573A\u666F\uFF09 */\n revokeSession(sessionId) {\n this.server.revokeSession(sessionId);\n }\n /** \u52A0\u5BC6\u54CD\u5E94\u4F53\uFF08\u81EA\u5B9A\u4E49\u54CD\u5E94\u51FA\u53E3\u65F6\u4F7F\u7528\uFF09 */\n encryptResponse(payload, context) {\n return this.server.encryptResponse(payload, context);\n }\n};\nexports.RvsService = RvsService;\nexports.RvsService = RvsService = __decorate([\n (0, common_1.Injectable)(),\n __param(0, (0, common_1.Inject)(rvs_tokens_1.RVS_SERVER)),\n __metadata(\"design:paramtypes\", [Object])\n], RvsService);\n//# sourceMappingURL=rvs.service.js.map"],
5
+ "mappings": "4FACA,IAAI,WAAc,MAAQ,KAAK,YAAe,SAAUA,EAAYC,EAAQC,EAAKC,EAAM,CACnF,IAAIC,EAAI,UAAU,OAAQC,EAAID,EAAI,EAAIH,EAASE,IAAS,KAAOA,EAAO,OAAO,yBAAyBF,EAAQC,CAAG,EAAIC,EAAMG,EAC3H,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAYD,EAAI,QAAQ,SAASL,EAAYC,EAAQC,EAAKC,CAAI,MACxH,SAASI,EAAIP,EAAW,OAAS,EAAGO,GAAK,EAAGA,KAASD,EAAIN,EAAWO,CAAC,KAAGF,GAAKD,EAAI,EAAIE,EAAED,CAAC,EAAID,EAAI,EAAIE,EAAEL,EAAQC,EAAKG,CAAC,EAAIC,EAAEL,EAAQC,CAAG,IAAMG,GAChJ,OAAOD,EAAI,GAAKC,GAAK,OAAO,eAAeJ,EAAQC,EAAKG,CAAC,EAAGA,CAChE,EACI,WAAc,MAAQ,KAAK,YAAe,SAAUG,EAAGC,EAAG,CAC1D,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY,OAAO,QAAQ,SAASD,EAAGC,CAAC,CAC3G,EACI,QAAW,MAAQ,KAAK,SAAY,SAAUC,EAAYC,EAAW,CACrE,OAAO,SAAUV,EAAQC,EAAK,CAAES,EAAUV,EAAQC,EAAKQ,CAAU,CAAG,CACxE,EACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,QAAQ,WAAa,OACrB,MAAM,SAAW,QAAQ,gBAAgB,EACnC,aAAe,QAAQ,cAAc,EAK3C,IAAI,WAAa,KAAiB,CArBlC,MAqBkC,CAAAE,EAAA,mBAC9B,YAAYC,EAAQ,CAChB,KAAK,OAASA,CAClB,CAEA,OAAOC,EAAO,CACV,OAAO,KAAK,OAAO,OAAOA,CAAK,CACnC,CAEA,aAAaC,EAAS,CAClB,OAAO,KAAK,OAAO,aAAaA,CAAO,CAC3C,CAEA,cAAcC,EAAW,CACrB,KAAK,OAAO,cAAcA,CAAS,CACvC,CAEA,gBAAgBC,EAASC,EAAS,CAC9B,OAAO,KAAK,OAAO,gBAAgBD,EAASC,CAAO,CACvD,CACJ,EACA,QAAQ,WAAa,WACrB,QAAQ,WAAa,WAAa,WAAW,IACrC,SAAS,YAAY,EACzB,QAAQ,KAAO,SAAS,QAAQ,aAAa,UAAU,CAAC,EACxD,WAAW,oBAAqB,CAAC,MAAM,CAAC,CAC5C,EAAG,UAAU",
6
+ "names": ["decorators", "target", "key", "desc", "c", "r", "d", "i", "k", "v", "paramIndex", "decorator", "__name", "server", "input", "options", "sessionId", "payload", "context"]
7
+ }
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RVS_OPTIONS = exports.RVS_SERVER = void 0;
4
- exports.RVS_SERVER = 'ANTARES_RVS_SERVER';
5
- exports.RVS_OPTIONS = 'ANTARES_RVS_OPTIONS';
6
- //# sourceMappingURL=rvs.tokens.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RVS_OPTIONS=exports.RVS_SERVER=void 0,exports.RVS_SERVER="ANTARES_RVS_SERVER",exports.RVS_OPTIONS="ANTARES_RVS_OPTIONS";
2
+
3
+ //# sourceMappingURL=rvs.tokens.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.tokens.js","sourceRoot":"","sources":["../src/rvs.tokens.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,oBAAoB,CAAC;AAClC,QAAA,WAAW,GAAG,qBAAqB,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RVS_OPTIONS = exports.RVS_SERVER = void 0;\nexports.RVS_SERVER = 'ANTARES_RVS_SERVER';\nexports.RVS_OPTIONS = 'ANTARES_RVS_OPTIONS';\n//# sourceMappingURL=rvs.tokens.js.map"],
5
+ "mappings": "aACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,QAAQ,YAAc,QAAQ,WAAa,OAC3C,QAAQ,WAAa,qBACrB,QAAQ,YAAc",
6
+ "names": []
7
+ }
package/dist/rvs.types.js CHANGED
@@ -1,20 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveRvsOptions = resolveRvsOptions;
4
- exports.matchesAnyPath = matchesAnyPath;
5
- function resolveRvsOptions(options) {
6
- const isProd = process.env.NODE_ENV === 'production';
7
- const sessionEndpoint = options.sessionEndpoint === undefined ? '/rvs/session' : options.sessionEndpoint;
8
- return {
9
- ...options,
10
- contextProperty: options.contextProperty ?? 'rvs',
11
- unprotected: options.unprotected ?? (isProd ? 'strict' : 'tolerant'),
12
- skipPaths: [...(options.skipPaths ?? [])],
13
- sessionEndpoint: options.mode === 'dynamic' ? sessionEndpoint : null,
14
- };
15
- }
16
- /** 字符串按前缀匹配(与 rand-vec-sig 中间件语义一致),RegExp 按正则匹配 */
17
- function matchesAnyPath(patterns, url) {
18
- return patterns.some((pattern) => typeof pattern === 'string' ? url === pattern || url.startsWith(pattern) : pattern.test(url));
19
- }
20
- //# sourceMappingURL=rvs.types.js.map
1
+ "use strict";var o=Object.defineProperty;var n=(s,e)=>o(s,"name",{value:e,configurable:!0});Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveRvsOptions=resolveRvsOptions,exports.matchesAnyPath=matchesAnyPath;function resolveRvsOptions(s){const e=process.env.NODE_ENV==="production",t=s.sessionEndpoint===void 0?"/rvs/session":s.sessionEndpoint;return{...s,contextProperty:s.contextProperty??"rvs",unprotected:s.unprotected??(e?"strict":"tolerant"),skipPaths:[...s.skipPaths??[]],sessionEndpoint:s.mode==="dynamic"?t:null}}n(resolveRvsOptions,"resolveRvsOptions");function matchesAnyPath(s,e){return s.some(t=>typeof t=="string"?e===t||e.startsWith(t):t.test(e))}n(matchesAnyPath,"matchesAnyPath");
2
+
3
+ //# sourceMappingURL=rvs.types.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"rvs.types.js","sourceRoot":"","sources":["../src/rvs.types.ts"],"names":[],"mappings":";;AA8DA,8CAUC;AAGD,wCAIC;AAjBD,SAAgB,iBAAiB,CAAC,OAAyB;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IACrD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;IACzG,OAAO;QACL,GAAG,OAAO;QACV,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,KAAK;QACjD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QACpE,SAAS,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACzC,eAAe,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;KACrE,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,SAAgB,cAAc,CAAC,QAAgC,EAAE,GAAW;IAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/B,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAC7F,CAAC;AACJ,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["<stdin>"],
4
+ "sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveRvsOptions = resolveRvsOptions;\nexports.matchesAnyPath = matchesAnyPath;\nfunction resolveRvsOptions(options) {\n const isProd = process.env.NODE_ENV === 'production';\n const sessionEndpoint = options.sessionEndpoint === undefined ? '/rvs/session' : options.sessionEndpoint;\n return {\n ...options,\n contextProperty: options.contextProperty ?? 'rvs',\n unprotected: options.unprotected ?? (isProd ? 'strict' : 'tolerant'),\n skipPaths: [...(options.skipPaths ?? [])],\n sessionEndpoint: options.mode === 'dynamic' ? sessionEndpoint : null,\n };\n}\n/** \u5B57\u7B26\u4E32\u6309\u524D\u7F00\u5339\u914D\uFF08\u4E0E rand-vec-sig \u4E2D\u95F4\u4EF6\u8BED\u4E49\u4E00\u81F4\uFF09\uFF0CRegExp \u6309\u6B63\u5219\u5339\u914D */\nfunction matchesAnyPath(patterns, url) {\n return patterns.some((pattern) => typeof pattern === 'string' ? url === pattern || url.startsWith(pattern) : pattern.test(url));\n}\n//# sourceMappingURL=rvs.types.js.map"],
5
+ "mappings": "4FACA,OAAO,eAAe,QAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,QAAQ,kBAAoB,kBAC5B,QAAQ,eAAiB,eACzB,SAAS,kBAAkBA,EAAS,CAChC,MAAMC,EAAS,QAAQ,IAAI,WAAa,aAClCC,EAAkBF,EAAQ,kBAAoB,OAAY,eAAiBA,EAAQ,gBACzF,MAAO,CACH,GAAGA,EACH,gBAAiBA,EAAQ,iBAAmB,MAC5C,YAAaA,EAAQ,cAAgBC,EAAS,SAAW,YACzD,UAAW,CAAC,GAAID,EAAQ,WAAa,CAAC,CAAE,EACxC,gBAAiBA,EAAQ,OAAS,UAAYE,EAAkB,IACpE,CACJ,CAVSC,EAAA,uCAYT,SAAS,eAAeC,EAAUC,EAAK,CACnC,OAAOD,EAAS,KAAME,GAAY,OAAOA,GAAY,SAAWD,IAAQC,GAAWD,EAAI,WAAWC,CAAO,EAAIA,EAAQ,KAAKD,CAAG,CAAC,CAClI,CAFSF,EAAA",
6
+ "names": ["options", "isProd", "sessionEndpoint", "__name", "patterns", "url", "pattern"]
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antares-core/rvs",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "rand-vec-sig 的 NestJS 适配层:全局验签/解密中间件、响应加密管线、装饰器粒度控制、Redis 防重放与会话端点",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,7 +15,7 @@
15
15
  "@nestjs/core": "^10.3.7",
16
16
  "rand-vec-sig": "^1.0.0",
17
17
  "rxjs": "^7.8.1",
18
- "@antares-core/core": "^2.2.0"
18
+ "@antares-core/core": "^2.4.0"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@nestjs/common": "^10.3.7",
@@ -29,11 +29,11 @@
29
29
  "rxjs": "^7.8.1",
30
30
  "typescript": "^5.4.5",
31
31
  "vitest": "^2.1.8",
32
- "@antares-core/core": "2.2.0"
32
+ "@antares-core/core": "2.4.0"
33
33
  },
34
34
  "license": "MIT",
35
35
  "scripts": {
36
- "build": "tsc -p tsconfig.build.json",
36
+ "build": "tsc -p tsconfig.build.json && node ../../scripts/minify-dist.mjs dist",
37
37
  "typecheck": "tsc -p tsconfig.json --noEmit",
38
38
  "test": "vitest run",
39
39
  "test:watch": "vitest",