vona-module-a-jwt 5.0.29 → 5.1.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/LICENSE +0 -0
- package/dist/.metadata/index.d.ts +1 -0
- package/dist/.metadata/index.d.ts.map +1 -0
- package/dist/.metadata/this.d.ts +1 -0
- package/dist/.metadata/this.d.ts.map +1 -0
- package/dist/bean/bean.jwt.d.ts +2 -1
- package/dist/bean/bean.jwt.d.ts.map +1 -0
- package/dist/config/config.d.ts +1 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/dto/jwtToken.d.ts +1 -0
- package/dist/dto/jwtToken.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -63
- package/dist/index.js.map +1 -0
- package/dist/lib/authHeader.d.ts +1 -0
- package/dist/lib/authHeader.d.ts.map +1 -0
- package/dist/lib/checkErrorJwtExpired.d.ts +2 -0
- package/dist/lib/checkErrorJwtExpired.d.ts.map +1 -0
- package/dist/lib/const.d.ts +2 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/service/jwtClient.d.ts +4 -1
- package/dist/service/jwtClient.d.ts.map +1 -0
- package/dist/service/jwtExtract.d.ts +2 -1
- package/dist/service/jwtExtract.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/jwt.d.ts +7 -1
- package/dist/types/jwt.d.ts.map +1 -0
- package/package.json +21 -16
- package/src/.metadata/index.ts +146 -0
- package/src/.metadata/this.ts +2 -0
- package/src/bean/bean.jwt.ts +52 -0
- package/src/config/config.ts +47 -0
- package/src/dto/jwtToken.ts +20 -0
- package/src/index.ts +3 -0
- package/src/lib/authHeader.ts +7 -0
- package/src/lib/checkErrorJwtExpired.ts +8 -0
- package/src/lib/const.ts +1 -0
- package/src/lib/index.ts +3 -0
- package/src/service/jwtClient.ts +109 -0
- package/src/service/jwtExtract.ts +37 -0
- package/src/types/index.ts +1 -0
- package/src/types/jwt.ts +66 -0
package/LICENSE
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"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"}
|
package/dist/.metadata/this.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"this.d.ts","sourceRoot":"","sources":["../../src/.metadata/this.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/bean/bean.jwt.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IAuthenticateStrategyState } from 'vona-module-a-auth';
|
|
2
|
-
import type { IJwtClientRecord, IJwtSignOptions, IJwtToken, IPayloadData } from '../types/jwt.ts';
|
|
3
2
|
import { BeanBase } from 'vona';
|
|
3
|
+
import type { IJwtClientRecord, IJwtSignOptions, IJwtToken, IPayloadData } from '../types/jwt.ts';
|
|
4
4
|
import { ServiceJwtClient } from '../service/jwtClient.ts';
|
|
5
5
|
export declare class BeanJwt extends BeanBase {
|
|
6
6
|
get(clientName?: keyof IJwtClientRecord): ServiceJwtClient;
|
|
@@ -11,3 +11,4 @@ export declare class BeanJwt extends BeanBase {
|
|
|
11
11
|
createOauthCode(payloadData: IPayloadData, options?: IJwtSignOptions): Promise<string>;
|
|
12
12
|
extractAuthTokenFromAllWays(): string | undefined;
|
|
13
13
|
}
|
|
14
|
+
//# sourceMappingURL=bean.jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bean.jwt.d.ts","sourceRoot":"","sources":["../../src/bean/bean.jwt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAGrE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAElG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,qBACa,OAAQ,SAAQ,QAAQ;IACnC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,gBAAgB;IAIjC,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAgBhF,mBAAmB,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe;IAIxE,oBAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe;IAIzE,gBAAgB,CAAC,WAAW,EAAE,0BAA0B,EAAE,OAAO,CAAC,EAAE,eAAe;IAInF,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe;IAI1E,2BAA2B;CAG5B"}
|
package/dist/config/config.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,GAyCzD,SAAS,CACf"}
|
package/dist/dto/jwtToken.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwtToken.d.ts","sourceRoot":"","sources":["../../src/dto/jwtToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAK9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;CAAG;AAEpE,qBACa,WAAY,YAAW,SAAS;IAE3C,WAAW,EAAE,MAAM,CAAC;IAGpB,YAAY,EAAE,MAAM,CAAC;IAGrB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { BeanInfo, BeanBase, deepExtend, cast, BeanScopeBase } from 'vona';
|
|
2
|
+
import { __decorate, __metadata } from 'tslib';
|
|
2
3
|
import ms from 'ms';
|
|
3
4
|
import { Service, Bean, Scope } from 'vona-module-a-bean';
|
|
5
|
+
import { catchError } from '@cabloy/utils';
|
|
4
6
|
import jwt from 'jsonwebtoken';
|
|
5
7
|
import { Api } from 'vona-module-a-openapiutils';
|
|
6
8
|
import { Dto } from 'vona-module-a-web';
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
let ServiceJwtClient = (_dec$4 = Service(), _dec2$4 = BeanInfo({
|
|
10
|
-
module: "a-jwt"
|
|
11
|
-
}), _dec$4(_class$4 = _dec2$4(_class$4 = class ServiceJwtClient extends BeanBase {
|
|
10
|
+
let ServiceJwtClient = class ServiceJwtClient extends BeanBase {
|
|
12
11
|
constructor(...args) {
|
|
13
12
|
super(...args);
|
|
14
13
|
this._jwtInstance = void 0;
|
|
@@ -43,6 +42,14 @@ let ServiceJwtClient = (_dec$4 = Service(), _dec2$4 = BeanInfo({
|
|
|
43
42
|
return this.scope.config.field.payload.data;
|
|
44
43
|
}
|
|
45
44
|
async sign(payloadData, options) {
|
|
45
|
+
const [res, error] = await catchError(() => {
|
|
46
|
+
return this._signInner(payloadData, options);
|
|
47
|
+
});
|
|
48
|
+
this.$loggerChild('jwt').debug(() => `jwt.sign: client:${this._clientName}, token:${res}${error ? `, error: ${error.message}` : ''}`);
|
|
49
|
+
if (error) throw error;
|
|
50
|
+
return res;
|
|
51
|
+
}
|
|
52
|
+
async _signInner(payloadData, options) {
|
|
46
53
|
return new Promise((resolve, reject) => {
|
|
47
54
|
const payload = {
|
|
48
55
|
[this.fieldClient]: this._clientName,
|
|
@@ -68,10 +75,20 @@ let ServiceJwtClient = (_dec$4 = Service(), _dec2$4 = BeanInfo({
|
|
|
68
75
|
}
|
|
69
76
|
async verify(token, options) {
|
|
70
77
|
if (!token && this._clientName === 'access') token = this.scope.service.jwtExtract.fromAllWays();
|
|
78
|
+
const [res, error] = await catchError(() => {
|
|
79
|
+
return this._verifyInner(token, options);
|
|
80
|
+
});
|
|
81
|
+
this.$loggerChild('jwt').debug(() => `jwt.verify: client:${this._clientName}, token:${token}${error ? `, error: ${error.message}` : ''}`);
|
|
82
|
+
if (error) throw error;
|
|
83
|
+
return res;
|
|
84
|
+
}
|
|
85
|
+
async _verifyInner(token, options) {
|
|
71
86
|
if (!token) return undefined;
|
|
72
87
|
return new Promise((resolve, reject) => {
|
|
73
88
|
this._jwtInstance.verify(token, this._clientOptions.secret, this._clientOptions.verifyOptions, (err, decoded) => {
|
|
74
|
-
if (err)
|
|
89
|
+
if (err) {
|
|
90
|
+
return reject(err);
|
|
91
|
+
}
|
|
75
92
|
const payload = cast(decoded);
|
|
76
93
|
// check field client
|
|
77
94
|
if (payload[this.fieldClient] !== this._clientName) return this.app.throw(401);
|
|
@@ -88,12 +105,12 @@ let ServiceJwtClient = (_dec$4 = Service(), _dec2$4 = BeanInfo({
|
|
|
88
105
|
if (Array.isArray(pathTarget) && !pathTarget.includes(path)) return false;
|
|
89
106
|
return pathTarget === path;
|
|
90
107
|
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
var _dec$3, _dec2$3, _class$3;
|
|
94
|
-
let BeanJwt = (_dec$3 = Bean(), _dec2$3 = BeanInfo({
|
|
108
|
+
};
|
|
109
|
+
ServiceJwtClient = __decorate([Service(), BeanInfo({
|
|
95
110
|
module: "a-jwt"
|
|
96
|
-
}),
|
|
111
|
+
})], ServiceJwtClient);
|
|
112
|
+
|
|
113
|
+
let BeanJwt = class BeanJwt extends BeanBase {
|
|
97
114
|
get(clientName) {
|
|
98
115
|
return this.app.bean._getBeanSelector(ServiceJwtClient, clientName);
|
|
99
116
|
}
|
|
@@ -129,7 +146,10 @@ let BeanJwt = (_dec$3 = Bean(), _dec2$3 = BeanInfo({
|
|
|
129
146
|
extractAuthTokenFromAllWays() {
|
|
130
147
|
return this.scope.service.jwtExtract.fromAllWays();
|
|
131
148
|
}
|
|
132
|
-
}
|
|
149
|
+
};
|
|
150
|
+
BeanJwt = __decorate([Bean(), BeanInfo({
|
|
151
|
+
module: "a-jwt"
|
|
152
|
+
})], BeanJwt);
|
|
133
153
|
|
|
134
154
|
const re = /(\S+)\s+(\S+)/;
|
|
135
155
|
function parseAuthHeader(headerValue) {
|
|
@@ -141,10 +161,7 @@ function parseAuthHeader(headerValue) {
|
|
|
141
161
|
};
|
|
142
162
|
}
|
|
143
163
|
|
|
144
|
-
|
|
145
|
-
let ServiceJwtExtract = (_dec$2 = Service(), _dec2$2 = BeanInfo({
|
|
146
|
-
module: "a-jwt"
|
|
147
|
-
}), _dec$2(_class$2 = _dec2$2(_class$2 = class ServiceJwtExtract extends BeanBase {
|
|
164
|
+
let ServiceJwtExtract = class ServiceJwtExtract extends BeanBase {
|
|
148
165
|
fromHeader() {
|
|
149
166
|
if (!this.scope.config.field.extract.header) return;
|
|
150
167
|
return this.ctx.request.headers[this.scope.config.field.extract.header];
|
|
@@ -152,8 +169,10 @@ let ServiceJwtExtract = (_dec$2 = Service(), _dec2$2 = BeanInfo({
|
|
|
152
169
|
fromQuery() {
|
|
153
170
|
return this.ctx.request.query[this.scope.config.field.extract.query];
|
|
154
171
|
}
|
|
155
|
-
fromAuthHeaderWithScheme() {
|
|
156
|
-
|
|
172
|
+
fromAuthHeaderWithScheme(headerValue) {
|
|
173
|
+
if (!headerValue) {
|
|
174
|
+
headerValue = this.ctx.request.headers[this.scope.config.field.extract.headerAuth];
|
|
175
|
+
}
|
|
157
176
|
const auth = parseAuthHeader(headerValue);
|
|
158
177
|
if (!auth || auth.scheme.toLocaleLowerCase() !== this.scope.config.field.extract.headerAuthScheme.toLocaleLowerCase()) return;
|
|
159
178
|
return auth.value;
|
|
@@ -168,50 +187,24 @@ let ServiceJwtExtract = (_dec$2 = Service(), _dec2$2 = BeanInfo({
|
|
|
168
187
|
if (!token) token = this.fromCookie();
|
|
169
188
|
return token;
|
|
170
189
|
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function _applyDecoratedDescriptor(i, e, r, n, l) {
|
|
174
|
-
var a = {};
|
|
175
|
-
return Object.keys(n).forEach(function (i) {
|
|
176
|
-
a[i] = n[i];
|
|
177
|
-
}), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = true), a = r.slice().reverse().reduce(function (r, n) {
|
|
178
|
-
return n(i, e, r) || r;
|
|
179
|
-
}, a), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
|
|
180
|
-
}
|
|
181
|
-
function _initializerDefineProperty(e, i, r, l) {
|
|
182
|
-
r && Object.defineProperty(e, i, {
|
|
183
|
-
enumerable: r.enumerable,
|
|
184
|
-
configurable: r.configurable,
|
|
185
|
-
writable: r.writable,
|
|
186
|
-
value: r.initializer ? r.initializer.call(l) : void 0
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
var _dec$1, _dec2$1, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class$1, _class2, _descriptor, _descriptor2, _descriptor3;
|
|
191
|
-
let DtoJwtToken = (_dec$1 = Dto(), _dec2$1 = BeanInfo({
|
|
190
|
+
};
|
|
191
|
+
ServiceJwtExtract = __decorate([Service(), BeanInfo({
|
|
192
192
|
module: "a-jwt"
|
|
193
|
-
}),
|
|
193
|
+
})], ServiceJwtExtract);
|
|
194
|
+
|
|
195
|
+
let DtoJwtToken = class DtoJwtToken {
|
|
194
196
|
constructor() {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
197
|
+
this.accessToken = void 0;
|
|
198
|
+
this.refreshToken = void 0;
|
|
199
|
+
this.expiresIn = void 0;
|
|
198
200
|
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
enumerable: true,
|
|
207
|
-
writable: true,
|
|
208
|
-
initializer: null
|
|
209
|
-
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "expiresIn", [_dec7, _dec8], {
|
|
210
|
-
configurable: true,
|
|
211
|
-
enumerable: true,
|
|
212
|
-
writable: true,
|
|
213
|
-
initializer: null
|
|
214
|
-
}), _class2)) || _class$1) || _class$1);
|
|
201
|
+
};
|
|
202
|
+
__decorate([Api.field(), __metadata("design:type", String)], DtoJwtToken.prototype, "accessToken", void 0);
|
|
203
|
+
__decorate([Api.field(), __metadata("design:type", String)], DtoJwtToken.prototype, "refreshToken", void 0);
|
|
204
|
+
__decorate([Api.field(), __metadata("design:type", Number)], DtoJwtToken.prototype, "expiresIn", void 0);
|
|
205
|
+
DtoJwtToken = __decorate([Dto(), BeanInfo({
|
|
206
|
+
module: "a-jwt"
|
|
207
|
+
})], DtoJwtToken);
|
|
215
208
|
|
|
216
209
|
function config(_app, env) {
|
|
217
210
|
return {
|
|
@@ -273,13 +266,20 @@ function config(_app, env) {
|
|
|
273
266
|
};
|
|
274
267
|
}
|
|
275
268
|
|
|
276
|
-
|
|
277
|
-
|
|
269
|
+
let ScopeModuleAJwt = class ScopeModuleAJwt extends BeanScopeBase {};
|
|
270
|
+
ScopeModuleAJwt = __decorate([Scope(), BeanInfo({
|
|
278
271
|
module: "a-jwt"
|
|
279
|
-
}),
|
|
280
|
-
|
|
272
|
+
})], ScopeModuleAJwt);
|
|
281
273
|
/** scope: end */
|
|
282
274
|
|
|
283
275
|
const ErrorMessageJwtExpired = 'jwt expired';
|
|
284
276
|
|
|
285
|
-
|
|
277
|
+
// throw error only when ErrorMessageJwtExpired
|
|
278
|
+
function checkErrorJwtExpired(err, headers) {
|
|
279
|
+
if (err && err.message === ErrorMessageJwtExpired && (headers['x-vona-jwt-authtoken'] === true || headers['x-vona-jwt-authtoken'] === 'true')) {
|
|
280
|
+
throw err;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export { BeanJwt, DtoJwtToken, ErrorMessageJwtExpired, ScopeModuleAJwt, ServiceJwtClient, ServiceJwtExtract, checkErrorJwtExpired, config, parseAuthHeader };
|
|
285
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/service/jwtClient.ts","../src/bean/bean.jwt.ts","../src/lib/authHeader.ts","../src/service/jwtExtract.ts","../src/dto/jwtToken.ts","../src/config/config.ts","../src/.metadata/index.ts","../src/lib/const.ts","../src/lib/checkErrorJwtExpired.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["ServiceJwtClient","BeanBase","constructor","args","_jwtInstance","_clientName","_clientOptions","instance","__init__","clientName","_createClient","configJwt","scope","config","configClient","clients","Error","secret","base","app","server","keys","deepExtend","jwt","fieldClient","field","payload","client","fieldPath","path","fieldData","data","sign","payloadData","options","res","error","catchError","_signInner","$loggerChild","debug","message","Promise","resolve","reject","signOptions","dev","Object","assign","expiresIn","refresh","temp","tempAuthToken","err","encoded","verify","token","service","jwtExtract","fromAllWays","_verifyInner","undefined","verifyOptions","decoded","cast","throw","_checkVerifyPath","pathTarget","pathReal","String","ctx","route","routePathRaw","Array","isArray","includes","__decorate","Service","__z_BeanInfo","module","BeanJwt","get","bean","_getBeanSelector","create","accessToken","refreshToken","access","Math","floor","ms","createTempAuthToken","createOauthAuthToken","createOauthState","createOauthCode","extractAuthTokenFromAllWays","Bean","re","parseAuthHeader","headerValue","matches","match","scheme","value","ServiceJwtExtract","fromHeader","extract","header","request","headers","fromQuery","query","fromAuthHeaderWithScheme","headerAuth","auth","toLocaleLowerCase","headerAuthScheme","fromCookie","cookies","cookie","DtoJwtToken","Api","prototype","Dto","_app","env","issuer","APP_NAME","oauth","oauthstate","code","ScopeModuleAJwt","BeanScopeBase","Scope","ErrorMessageJwtExpired","checkErrorJwtExpired"],"mappings":"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"}
|
package/dist/lib/authHeader.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authHeader.d.ts","sourceRoot":"","sources":["../../src/lib/authHeader.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,GAAG;;;qBAIhD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkErrorJwtExpired.d.ts","sourceRoot":"","sources":["../../src/lib/checkErrorJwtExpired.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,KAAK,GAAG,SAAS,EAAE,OAAO,EAAE,GAAG,QAIxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/lib/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,gBAAgB,CAAC"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { IJwtClientRecord, IJwtSignOptions, IJwtVerifyOptions, IPayloadData } from '../types/jwt.ts';
|
|
2
1
|
import jwt from 'jsonwebtoken';
|
|
3
2
|
import { BeanBase } from 'vona';
|
|
3
|
+
import type { IJwtClientRecord, IJwtSignOptions, IJwtVerifyOptions, IPayloadData } from '../types/jwt.ts';
|
|
4
4
|
export declare class ServiceJwtClient extends BeanBase {
|
|
5
5
|
private _jwtInstance;
|
|
6
6
|
private _clientName;
|
|
@@ -12,6 +12,9 @@ export declare class ServiceJwtClient extends BeanBase {
|
|
|
12
12
|
private get fieldPath();
|
|
13
13
|
private get fieldData();
|
|
14
14
|
sign(payloadData: IPayloadData, options?: IJwtSignOptions): Promise<string>;
|
|
15
|
+
private _signInner;
|
|
15
16
|
verify(token?: string, options?: IJwtVerifyOptions): Promise<IPayloadData | undefined>;
|
|
17
|
+
private _verifyInner;
|
|
16
18
|
_checkVerifyPath(pathTarget: string | string[] | undefined, pathReal: string | undefined): boolean;
|
|
17
19
|
}
|
|
20
|
+
//# sourceMappingURL=jwtClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwtClient.d.ts","sourceRoot":"","sources":["../../src/service/jwtClient.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAoB,MAAM,MAAM,CAAC;AAGlD,OAAO,KAAK,EAAqB,gBAAgB,EAAe,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE1I,qBACa,gBAAiB,SAAQ,QAAQ;IAC5C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,cAAc,CAAoB;IAE1C,IAAI,QAAQ,IAAI,OAAO,GAAG,CAEzB;IAED,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,gBAAgB;IAItD,OAAO,CAAC,aAAa;IAWrB,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,SAAS,GAEpB;IAEK,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;YASnE,UAAU;IAqBlB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;YAU9E,YAAY;IAkB1B,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;CAMzF"}
|
|
@@ -2,7 +2,8 @@ import { BeanBase } from 'vona';
|
|
|
2
2
|
export declare class ServiceJwtExtract extends BeanBase {
|
|
3
3
|
fromHeader(): string | undefined;
|
|
4
4
|
fromQuery(): string;
|
|
5
|
-
fromAuthHeaderWithScheme(): string | undefined;
|
|
5
|
+
fromAuthHeaderWithScheme(headerValue?: string): string | undefined;
|
|
6
6
|
fromCookie(): string | undefined;
|
|
7
7
|
fromAllWays(): string | undefined;
|
|
8
8
|
}
|
|
9
|
+
//# sourceMappingURL=jwtExtract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwtExtract.d.ts","sourceRoot":"","sources":["../../src/service/jwtExtract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAKhC,qBACa,iBAAkB,SAAQ,QAAQ;IAC7C,UAAU,IAAI,MAAM,GAAG,SAAS;IAKhC,SAAS;IAIT,wBAAwB,CAAC,WAAW,CAAC,EAAE,MAAM;IAS7C,UAAU;IAIV,WAAW;CAOZ"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
package/dist/types/jwt.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SignOptions, VerifyOptions } from 'jsonwebtoken';
|
|
2
2
|
import type { StringValue } from 'ms';
|
|
3
|
-
|
|
3
|
+
import 'vona';
|
|
4
4
|
export interface IJwtToken {
|
|
5
5
|
accessToken: string;
|
|
6
6
|
refreshToken: string;
|
|
@@ -53,3 +53,9 @@ export interface IPayloadData {
|
|
|
53
53
|
}
|
|
54
54
|
export interface IJwtPayload {
|
|
55
55
|
}
|
|
56
|
+
declare module 'vona' {
|
|
57
|
+
interface ILoggerChildRecord {
|
|
58
|
+
jwt: never;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/types/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEtC,OAAO,MAAM,CAAC;AAEd,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE;QACL,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAC;YACf,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;YACnB,gBAAgB,EAAE,MAAM,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,aAAa,EAAE;QACb,WAAW,EAAE;YAAE,SAAS,EAAE,WAAW,GAAG,MAAM,CAAA;SAAE,CAAC;KAClD,CAAC;IACF,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,YAAY;CAAG;AAEhC,MAAM,WAAW,WAAW;CAAG;AAE/B,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,kBAAkB;QACjC,GAAG,EAAE,KAAK,CAAC;KACZ;CACF"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona-module-a-jwt",
|
|
3
|
-
"
|
|
4
|
-
"version": "5.0.29",
|
|
5
|
-
"title": "a-jwt",
|
|
6
|
-
"vonaModule": {
|
|
7
|
-
"dependencies": {}
|
|
8
|
-
},
|
|
3
|
+
"version": "5.1.1",
|
|
9
4
|
"description": "",
|
|
10
|
-
"author": "",
|
|
11
5
|
"keywords": [
|
|
12
6
|
"Vona Module"
|
|
13
7
|
],
|
|
8
|
+
"author": "",
|
|
9
|
+
"files": [
|
|
10
|
+
"assets",
|
|
11
|
+
"dist",
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
14
|
+
"type": "module",
|
|
14
15
|
"exports": {
|
|
15
16
|
".": {
|
|
16
17
|
"types": [
|
|
@@ -21,10 +22,13 @@
|
|
|
21
22
|
},
|
|
22
23
|
"./package.json": "./package.json"
|
|
23
24
|
},
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
25
|
+
"scripts": {
|
|
26
|
+
"clean": "rimraf dist tsconfig.build.tsbuildinfo",
|
|
27
|
+
"tsc:publish": "npm run clean && vona :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
|
|
28
|
+
"prepublishOnly": "npm run tsc:publish",
|
|
29
|
+
"prepack": "clean-package",
|
|
30
|
+
"postpack": "clean-package restore && npm run clean"
|
|
31
|
+
},
|
|
28
32
|
"dependencies": {
|
|
29
33
|
"@types/jsonwebtoken": "^9.0.10",
|
|
30
34
|
"@types/ms": "^2.1.0",
|
|
@@ -35,8 +39,9 @@
|
|
|
35
39
|
"clean-package": "^2.2.0",
|
|
36
40
|
"rimraf": "^6.0.1"
|
|
37
41
|
},
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
}
|
|
42
|
-
|
|
42
|
+
"title": "a-jwt",
|
|
43
|
+
"vonaModule": {
|
|
44
|
+
"dependencies": {}
|
|
45
|
+
},
|
|
46
|
+
"gitHead": "991189da4443b789fcf77872990b901ccf43bccb"
|
|
47
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// eslint-disable
|
|
2
|
+
import type { TypeSymbolKeyFieldsMore } from 'vona-module-a-orm';
|
|
3
|
+
import type { TypeEntityOptionsFields } from 'vona-module-a-openapi';
|
|
4
|
+
/** bean: begin */
|
|
5
|
+
export * from '../bean/bean.jwt.ts';
|
|
6
|
+
|
|
7
|
+
import 'vona';
|
|
8
|
+
declare module 'vona' {
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
declare module 'vona-module-a-jwt' {
|
|
13
|
+
|
|
14
|
+
export interface BeanJwt {
|
|
15
|
+
/** @internal */
|
|
16
|
+
get scope(): ScopeModuleAJwt;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** bean: end */
|
|
20
|
+
/** bean: begin */
|
|
21
|
+
import type { BeanJwt } from '../bean/bean.jwt.ts';
|
|
22
|
+
import 'vona';
|
|
23
|
+
declare module 'vona' {
|
|
24
|
+
export interface IBeanRecordGlobal {
|
|
25
|
+
'jwt': BeanJwt;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** bean: end */
|
|
29
|
+
/** service: begin */
|
|
30
|
+
export * from '../service/jwtClient.ts';
|
|
31
|
+
export * from '../service/jwtExtract.ts';
|
|
32
|
+
|
|
33
|
+
import 'vona-module-a-bean';
|
|
34
|
+
declare module 'vona-module-a-bean' {
|
|
35
|
+
|
|
36
|
+
export interface IServiceRecord {
|
|
37
|
+
'a-jwt:jwtClient': never;
|
|
38
|
+
'a-jwt:jwtExtract': never;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
declare module 'vona-module-a-jwt' {
|
|
44
|
+
|
|
45
|
+
export interface ServiceJwtClient {
|
|
46
|
+
/** @internal */
|
|
47
|
+
get scope(): ScopeModuleAJwt;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface ServiceJwtClient {
|
|
51
|
+
get $beanFullName(): 'a-jwt.service.jwtClient';
|
|
52
|
+
get $onionName(): 'a-jwt:jwtClient';
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface ServiceJwtExtract {
|
|
57
|
+
/** @internal */
|
|
58
|
+
get scope(): ScopeModuleAJwt;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface ServiceJwtExtract {
|
|
62
|
+
get $beanFullName(): 'a-jwt.service.jwtExtract';
|
|
63
|
+
get $onionName(): 'a-jwt:jwtExtract';
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** service: end */
|
|
68
|
+
/** service: begin */
|
|
69
|
+
import type { ServiceJwtClient } from '../service/jwtClient.ts';
|
|
70
|
+
import type { ServiceJwtExtract } from '../service/jwtExtract.ts';
|
|
71
|
+
export interface IModuleService {
|
|
72
|
+
'jwtClient': ServiceJwtClient;
|
|
73
|
+
'jwtExtract': ServiceJwtExtract;
|
|
74
|
+
}
|
|
75
|
+
/** service: end */
|
|
76
|
+
/** service: begin */
|
|
77
|
+
|
|
78
|
+
import 'vona';
|
|
79
|
+
declare module 'vona' {
|
|
80
|
+
export interface IBeanRecordGeneral {
|
|
81
|
+
'a-jwt.service.jwtClient': ServiceJwtClient;
|
|
82
|
+
'a-jwt.service.jwtExtract': ServiceJwtExtract;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** service: end */
|
|
86
|
+
/** dto: begin */
|
|
87
|
+
export * from '../dto/jwtToken.ts';
|
|
88
|
+
import type { IDtoOptionsJwtToken } from '../dto/jwtToken.ts';
|
|
89
|
+
import 'vona-module-a-web';
|
|
90
|
+
declare module 'vona-module-a-web' {
|
|
91
|
+
|
|
92
|
+
export interface IDtoRecord {
|
|
93
|
+
'a-jwt:jwtToken': IDtoOptionsJwtToken;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
declare module 'vona-module-a-jwt' {
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
/** dto: end */
|
|
102
|
+
/** dto: begin */
|
|
103
|
+
import type { DtoJwtToken } from '../dto/jwtToken.ts';
|
|
104
|
+
declare module 'vona-module-a-jwt' {
|
|
105
|
+
|
|
106
|
+
export interface IDtoOptionsJwtToken {
|
|
107
|
+
fields?: TypeEntityOptionsFields<DtoJwtToken, IDtoOptionsJwtToken[TypeSymbolKeyFieldsMore]>;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** dto: end */
|
|
111
|
+
/** config: begin */
|
|
112
|
+
export * from '../config/config.ts';
|
|
113
|
+
import type { config } from '../config/config.ts';
|
|
114
|
+
/** config: end */
|
|
115
|
+
/** scope: begin */
|
|
116
|
+
import { BeanScopeBase, type BeanScopeUtil, type TypeModuleConfig } from 'vona';
|
|
117
|
+
import { Scope } from 'vona-module-a-bean';
|
|
118
|
+
|
|
119
|
+
@Scope()
|
|
120
|
+
export class ScopeModuleAJwt extends BeanScopeBase {}
|
|
121
|
+
|
|
122
|
+
export interface ScopeModuleAJwt {
|
|
123
|
+
util: BeanScopeUtil;
|
|
124
|
+
config: TypeModuleConfig<typeof config>;
|
|
125
|
+
service: IModuleService;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
import 'vona';
|
|
129
|
+
declare module 'vona' {
|
|
130
|
+
export interface IBeanScopeRecord {
|
|
131
|
+
'a-jwt': ScopeModuleAJwt;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface IBeanScopeContainer {
|
|
135
|
+
jwt: ScopeModuleAJwt;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface IBeanScopeConfig {
|
|
139
|
+
'a-jwt': ReturnType<typeof config>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
/** scope: end */
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { IAuthenticateStrategyState } from 'vona-module-a-auth';
|
|
2
|
+
|
|
3
|
+
import ms from 'ms';
|
|
4
|
+
import { BeanBase } from 'vona';
|
|
5
|
+
import { Bean } from 'vona-module-a-bean';
|
|
6
|
+
|
|
7
|
+
import type { IJwtClientRecord, IJwtSignOptions, IJwtToken, IPayloadData } from '../types/jwt.ts';
|
|
8
|
+
|
|
9
|
+
import { ServiceJwtClient } from '../service/jwtClient.ts';
|
|
10
|
+
|
|
11
|
+
@Bean()
|
|
12
|
+
export class BeanJwt extends BeanBase {
|
|
13
|
+
get(clientName?: keyof IJwtClientRecord) {
|
|
14
|
+
return this.app.bean._getBeanSelector(ServiceJwtClient, clientName);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async create(payloadData: IPayloadData, options?: IJwtSignOptions): Promise<IJwtToken> {
|
|
18
|
+
// accessToken
|
|
19
|
+
const accessToken = await this.get('access').sign(payloadData, options);
|
|
20
|
+
// refreshToken
|
|
21
|
+
const refreshToken = await this.get('refresh').sign(payloadData, options);
|
|
22
|
+
// expiresIn
|
|
23
|
+
let expiresIn = this.scope.config.clients.access.signOptions.expiresIn!;
|
|
24
|
+
if (typeof expiresIn === 'string') expiresIn = Math.floor(ms(expiresIn) / 1000);
|
|
25
|
+
// ok
|
|
26
|
+
return {
|
|
27
|
+
accessToken,
|
|
28
|
+
refreshToken,
|
|
29
|
+
expiresIn,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async createTempAuthToken(payloadData: IPayloadData, options?: IJwtSignOptions) {
|
|
34
|
+
return await this.get('access').sign(payloadData, Object.assign({}, options, { temp: true }));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async createOauthAuthToken(payloadData: IPayloadData, options?: IJwtSignOptions) {
|
|
38
|
+
return await this.get('oauth').sign(payloadData, options);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async createOauthState(payloadData: IAuthenticateStrategyState, options?: IJwtSignOptions) {
|
|
42
|
+
return await this.get('oauthstate').sign(payloadData as IPayloadData, options);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async createOauthCode(payloadData: IPayloadData, options?: IJwtSignOptions) {
|
|
46
|
+
return await this.get('code').sign(payloadData, options);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
extractAuthTokenFromAllWays() {
|
|
50
|
+
return this.scope.service.jwtExtract.fromAllWays();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { VonaApplication, VonaConfigEnv } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { ConfigJwt } from '../types/jwt.ts';
|
|
4
|
+
|
|
5
|
+
export function config(_app: VonaApplication, env: VonaConfigEnv) {
|
|
6
|
+
return {
|
|
7
|
+
field: {
|
|
8
|
+
payload: {
|
|
9
|
+
client: 'client',
|
|
10
|
+
path: 'path',
|
|
11
|
+
data: 'data',
|
|
12
|
+
},
|
|
13
|
+
extract: {
|
|
14
|
+
header: '',
|
|
15
|
+
headerAuth: 'authorization',
|
|
16
|
+
headerAuthScheme: 'bearer',
|
|
17
|
+
query: 'auth_token',
|
|
18
|
+
cookie: 'token',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
tempAuthToken: {
|
|
22
|
+
signOptions: { expiresIn: 10 * 60 },
|
|
23
|
+
},
|
|
24
|
+
base: {
|
|
25
|
+
secret: undefined,
|
|
26
|
+
signOptions: { issuer: env.APP_NAME },
|
|
27
|
+
verifyOptions: { issuer: env.APP_NAME },
|
|
28
|
+
},
|
|
29
|
+
clients: {
|
|
30
|
+
access: {
|
|
31
|
+
signOptions: { expiresIn: 2 * 60 * 60 },
|
|
32
|
+
},
|
|
33
|
+
refresh: {
|
|
34
|
+
signOptions: { expiresIn: 7 * 24 * 60 * 60 },
|
|
35
|
+
},
|
|
36
|
+
oauth: {
|
|
37
|
+
signOptions: { expiresIn: 5 * 60 },
|
|
38
|
+
},
|
|
39
|
+
oauthstate: {
|
|
40
|
+
signOptions: { expiresIn: 5 * 60 },
|
|
41
|
+
},
|
|
42
|
+
code: {
|
|
43
|
+
signOptions: { expiresIn: 3 * 60 },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
} as ConfigJwt;
|
|
47
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IDecoratorDtoOptions } from 'vona-module-a-web';
|
|
2
|
+
|
|
3
|
+
import { Api } from 'vona-module-a-openapiutils';
|
|
4
|
+
import { Dto } from 'vona-module-a-web';
|
|
5
|
+
|
|
6
|
+
import type { IJwtToken } from '../types/jwt.ts';
|
|
7
|
+
|
|
8
|
+
export interface IDtoOptionsJwtToken extends IDecoratorDtoOptions {}
|
|
9
|
+
|
|
10
|
+
@Dto<IDtoOptionsJwtToken>()
|
|
11
|
+
export class DtoJwtToken implements IJwtToken {
|
|
12
|
+
@Api.field()
|
|
13
|
+
accessToken: string;
|
|
14
|
+
|
|
15
|
+
@Api.field()
|
|
16
|
+
refreshToken: string;
|
|
17
|
+
|
|
18
|
+
@Api.field()
|
|
19
|
+
expiresIn: number;
|
|
20
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ErrorMessageJwtExpired } from './const.ts';
|
|
2
|
+
|
|
3
|
+
// throw error only when ErrorMessageJwtExpired
|
|
4
|
+
export function checkErrorJwtExpired(err: Error | undefined, headers: any) {
|
|
5
|
+
if (err && err.message === ErrorMessageJwtExpired && (headers['x-vona-jwt-authtoken'] === true || headers['x-vona-jwt-authtoken'] === 'true')) {
|
|
6
|
+
throw err;
|
|
7
|
+
}
|
|
8
|
+
}
|
package/src/lib/const.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const ErrorMessageJwtExpired = 'jwt expired';
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { catchError } from '@cabloy/utils';
|
|
2
|
+
import jwt from 'jsonwebtoken';
|
|
3
|
+
import { BeanBase, cast, deepExtend } from 'vona';
|
|
4
|
+
import { Service } from 'vona-module-a-bean';
|
|
5
|
+
|
|
6
|
+
import type { IJwtClientOptions, IJwtClientRecord, IJwtPayload, IJwtSignOptions, IJwtVerifyOptions, IPayloadData } from '../types/jwt.ts';
|
|
7
|
+
|
|
8
|
+
@Service()
|
|
9
|
+
export class ServiceJwtClient extends BeanBase {
|
|
10
|
+
private _jwtInstance: typeof jwt;
|
|
11
|
+
private _clientName: keyof IJwtClientRecord;
|
|
12
|
+
private _clientOptions: IJwtClientOptions;
|
|
13
|
+
|
|
14
|
+
get instance(): typeof jwt {
|
|
15
|
+
return this._jwtInstance;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
protected __init__(clientName?: keyof IJwtClientRecord) {
|
|
19
|
+
this._createClient(clientName);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private _createClient(clientName?: keyof IJwtClientRecord) {
|
|
23
|
+
clientName = clientName || 'access';
|
|
24
|
+
const configJwt = this.scope.config;
|
|
25
|
+
const configClient = configJwt.clients[clientName];
|
|
26
|
+
if (!configClient) throw new Error(`jwt client not found: ${clientName}`);
|
|
27
|
+
const secret = configJwt.base.secret ?? this.app.config.server.keys[0];
|
|
28
|
+
this._clientOptions = deepExtend({}, configJwt.base, { secret }, configClient);
|
|
29
|
+
this._clientName = clientName;
|
|
30
|
+
this._jwtInstance = jwt;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private get fieldClient() {
|
|
34
|
+
return this.scope.config.field.payload.client;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private get fieldPath() {
|
|
38
|
+
return this.scope.config.field.payload.path;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private get fieldData() {
|
|
42
|
+
return this.scope.config.field.payload.data;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async sign(payloadData: IPayloadData, options?: IJwtSignOptions): Promise<string> {
|
|
46
|
+
const [res, error] = await catchError(() => {
|
|
47
|
+
return this._signInner(payloadData, options);
|
|
48
|
+
});
|
|
49
|
+
this.$loggerChild('jwt').debug(() => `jwt.sign: client:${this._clientName}, token:${res}${error ? `, error: ${error.message}` : ''}`);
|
|
50
|
+
if (error) throw error;
|
|
51
|
+
return res;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private async _signInner(payloadData: IPayloadData, options?: IJwtSignOptions): Promise<string> {
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const payload: IJwtPayload = {
|
|
57
|
+
[this.fieldClient]: this._clientName,
|
|
58
|
+
[this.fieldData]: payloadData,
|
|
59
|
+
};
|
|
60
|
+
if (options?.path) payload[this.fieldPath] = options.path;
|
|
61
|
+
let signOptions = this._clientOptions.signOptions;
|
|
62
|
+
if (options?.dev) {
|
|
63
|
+
signOptions = Object.assign({}, signOptions, { expiresIn: this.scope.config.clients.refresh.signOptions.expiresIn });
|
|
64
|
+
}
|
|
65
|
+
if (options?.temp) {
|
|
66
|
+
signOptions = Object.assign({}, signOptions, { expiresIn: this.scope.config.tempAuthToken.signOptions.expiresIn });
|
|
67
|
+
}
|
|
68
|
+
this._jwtInstance.sign(payload, this._clientOptions.secret!, signOptions, (err, encoded) => {
|
|
69
|
+
if (err) return reject(err);
|
|
70
|
+
resolve(encoded!);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async verify(token?: string, options?: IJwtVerifyOptions): Promise<IPayloadData | undefined> {
|
|
76
|
+
if (!token && this._clientName === 'access') token = this.scope.service.jwtExtract.fromAllWays();
|
|
77
|
+
const [res, error] = await catchError(() => {
|
|
78
|
+
return this._verifyInner(token, options);
|
|
79
|
+
});
|
|
80
|
+
this.$loggerChild('jwt').debug(() => `jwt.verify: client:${this._clientName}, token:${token}${error ? `, error: ${error.message}` : ''}`);
|
|
81
|
+
if (error) throw error;
|
|
82
|
+
return res;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private async _verifyInner(token?: string, options?: IJwtVerifyOptions): Promise<IPayloadData | undefined> {
|
|
86
|
+
if (!token) return undefined;
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
this._jwtInstance.verify(token, this._clientOptions.secret!, this._clientOptions.verifyOptions, (err, decoded) => {
|
|
89
|
+
if (err) {
|
|
90
|
+
return reject(err);
|
|
91
|
+
}
|
|
92
|
+
const payload = cast<IJwtPayload>(decoded);
|
|
93
|
+
// check field client
|
|
94
|
+
if (payload[this.fieldClient] !== this._clientName) return this.app.throw(401);
|
|
95
|
+
// check field path
|
|
96
|
+
if (!this._checkVerifyPath(payload[this.fieldPath], options?.path)) return this.app.throw(401);
|
|
97
|
+
// passed
|
|
98
|
+
resolve(payload[this.fieldData]);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
_checkVerifyPath(pathTarget: string | string[] | undefined, pathReal: string | undefined) {
|
|
104
|
+
if (!pathTarget) return true;
|
|
105
|
+
const path = pathReal ?? String(this.ctx.route.routePathRaw);
|
|
106
|
+
if (Array.isArray(pathTarget) && !pathTarget.includes(path)) return false;
|
|
107
|
+
return pathTarget === path;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BeanBase } from 'vona';
|
|
2
|
+
import { Service } from 'vona-module-a-bean';
|
|
3
|
+
|
|
4
|
+
import { parseAuthHeader } from '../lib/authHeader.ts';
|
|
5
|
+
|
|
6
|
+
@Service()
|
|
7
|
+
export class ServiceJwtExtract extends BeanBase {
|
|
8
|
+
fromHeader(): string | undefined {
|
|
9
|
+
if (!this.scope.config.field.extract.header) return;
|
|
10
|
+
return this.ctx.request.headers[this.scope.config.field.extract.header] as string | undefined;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
fromQuery() {
|
|
14
|
+
return this.ctx.request.query[this.scope.config.field.extract.query];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
fromAuthHeaderWithScheme(headerValue?: string) {
|
|
18
|
+
if (!headerValue) {
|
|
19
|
+
headerValue = this.ctx.request.headers[this.scope.config.field.extract.headerAuth] as string | undefined;
|
|
20
|
+
}
|
|
21
|
+
const auth = parseAuthHeader(headerValue);
|
|
22
|
+
if (!auth || auth.scheme.toLocaleLowerCase() !== this.scope.config.field.extract.headerAuthScheme.toLocaleLowerCase()) return;
|
|
23
|
+
return auth.value;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
fromCookie() {
|
|
27
|
+
return this.ctx.cookies.get(this.scope.config.field.extract.cookie);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
fromAllWays() {
|
|
31
|
+
let token: string | undefined = this.fromQuery();
|
|
32
|
+
if (!token) token = this.fromAuthHeaderWithScheme();
|
|
33
|
+
if (!token) token = this.fromHeader();
|
|
34
|
+
if (!token) token = this.fromCookie();
|
|
35
|
+
return token;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './jwt.ts';
|
package/src/types/jwt.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { SignOptions, VerifyOptions } from 'jsonwebtoken';
|
|
2
|
+
import type { StringValue } from 'ms';
|
|
3
|
+
|
|
4
|
+
import 'vona';
|
|
5
|
+
|
|
6
|
+
export interface IJwtToken {
|
|
7
|
+
accessToken: string;
|
|
8
|
+
refreshToken: string;
|
|
9
|
+
expiresIn: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface IJwtClientRecord {
|
|
13
|
+
access: never;
|
|
14
|
+
refresh: never;
|
|
15
|
+
oauth: never;
|
|
16
|
+
oauthstate: never;
|
|
17
|
+
code: never;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface IJwtSignOptions {
|
|
21
|
+
path?: string | string[];
|
|
22
|
+
dev?: boolean;
|
|
23
|
+
temp?: boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface IJwtVerifyOptions {
|
|
27
|
+
path?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface IJwtClientOptions {
|
|
31
|
+
secret?: string;
|
|
32
|
+
signOptions: SignOptions;
|
|
33
|
+
verifyOptions?: VerifyOptions;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ConfigJwt {
|
|
37
|
+
field: {
|
|
38
|
+
payload: {
|
|
39
|
+
client: string;
|
|
40
|
+
path: string;
|
|
41
|
+
data: string;
|
|
42
|
+
};
|
|
43
|
+
extract: {
|
|
44
|
+
header: string;
|
|
45
|
+
headerAuth: string;
|
|
46
|
+
headerAuthScheme: string;
|
|
47
|
+
query: string;
|
|
48
|
+
cookie: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
tempAuthToken: {
|
|
52
|
+
signOptions: { expiresIn: StringValue | number };
|
|
53
|
+
};
|
|
54
|
+
base: IJwtClientOptions;
|
|
55
|
+
clients: Record<keyof IJwtClientRecord, IJwtClientOptions>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface IPayloadData {}
|
|
59
|
+
|
|
60
|
+
export interface IJwtPayload {}
|
|
61
|
+
|
|
62
|
+
declare module 'vona' {
|
|
63
|
+
export interface ILoggerChildRecord {
|
|
64
|
+
jwt: never;
|
|
65
|
+
}
|
|
66
|
+
}
|