vona-module-a-jwt 5.0.30 → 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 +13 -3
- 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 +2 -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 +1 -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
|
@@ -169,8 +169,10 @@ let ServiceJwtExtract = class ServiceJwtExtract extends BeanBase {
|
|
|
169
169
|
fromQuery() {
|
|
170
170
|
return this.ctx.request.query[this.scope.config.field.extract.query];
|
|
171
171
|
}
|
|
172
|
-
fromAuthHeaderWithScheme() {
|
|
173
|
-
|
|
172
|
+
fromAuthHeaderWithScheme(headerValue) {
|
|
173
|
+
if (!headerValue) {
|
|
174
|
+
headerValue = this.ctx.request.headers[this.scope.config.field.extract.headerAuth];
|
|
175
|
+
}
|
|
174
176
|
const auth = parseAuthHeader(headerValue);
|
|
175
177
|
if (!auth || auth.scheme.toLocaleLowerCase() !== this.scope.config.field.extract.headerAuthScheme.toLocaleLowerCase()) return;
|
|
176
178
|
return auth.value;
|
|
@@ -272,4 +274,12 @@ ScopeModuleAJwt = __decorate([Scope(), BeanInfo({
|
|
|
272
274
|
|
|
273
275
|
const ErrorMessageJwtExpired = 'jwt expired';
|
|
274
276
|
|
|
275
|
-
|
|
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;
|
|
@@ -17,3 +17,4 @@ export declare class ServiceJwtClient extends BeanBase {
|
|
|
17
17
|
private _verifyInner;
|
|
18
18
|
_checkVerifyPath(pathTarget: string | string[] | undefined, pathReal: string | undefined): boolean;
|
|
19
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,7 +1,6 @@
|
|
|
1
1
|
import type { SignOptions, VerifyOptions } from 'jsonwebtoken';
|
|
2
2
|
import type { StringValue } from 'ms';
|
|
3
3
|
import 'vona';
|
|
4
|
-
export declare const ErrorMessageJwtExpired = "jwt expired";
|
|
5
4
|
export interface IJwtToken {
|
|
6
5
|
accessToken: string;
|
|
7
6
|
refreshToken: string;
|
|
@@ -59,3 +58,4 @@ declare module 'vona' {
|
|
|
59
58
|
jwt: never;
|
|
60
59
|
}
|
|
61
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.30",
|
|
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
|
+
}
|