@naturalcycles/nodejs-lib 12.82.1 → 12.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/jwt/jwt.service.d.ts +7 -2
- package/dist/jwt/jwt.service.js +6 -3
- package/dist/validation/joi/joi.shared.schemas.d.ts +1 -0
- package/dist/validation/joi/joi.shared.schemas.js +2 -1
- package/package.json +1 -1
- package/src/jwt/jwt.service.ts +8 -2
- package/src/validation/joi/joi.shared.schemas.ts +1 -0
|
@@ -18,6 +18,8 @@ export interface JWTServiceCfg {
|
|
|
18
18
|
privateKey?: string | Buffer;
|
|
19
19
|
/**
|
|
20
20
|
* Recommended: ES256
|
|
21
|
+
* Keys (private/public) should be generated using proper settings
|
|
22
|
+
* that fit the used Algorithm.
|
|
21
23
|
*/
|
|
22
24
|
algorithm: Algorithm;
|
|
23
25
|
/**
|
|
@@ -38,7 +40,10 @@ export interface JWTServiceCfg {
|
|
|
38
40
|
* Wraps popular `jsonwebtoken` library.
|
|
39
41
|
* You should create one instance of JWTService for each pair of private/public key.
|
|
40
42
|
*
|
|
41
|
-
* Generate key pair like this
|
|
43
|
+
* Generate key pair like this.
|
|
44
|
+
* Please note that parameters should be different for different algorithms.
|
|
45
|
+
* For ES256 (default algo in JWTService) key should have `prime256v1` parameter:
|
|
46
|
+
*
|
|
42
47
|
* openssl ecparam -name prime256v1 -genkey -noout -out key.pem
|
|
43
48
|
* openssl ec -in key.pem -pubout > key.pub.pem
|
|
44
49
|
*/
|
|
@@ -46,7 +51,7 @@ export declare class JWTService {
|
|
|
46
51
|
cfg: JWTServiceCfg;
|
|
47
52
|
constructor(cfg: JWTServiceCfg);
|
|
48
53
|
sign<T extends AnyObject>(payload: T, schema?: AnySchemaTyped<T>, opt?: SignOptions): JWTString;
|
|
49
|
-
verify<T extends AnyObject>(token: JWTString, schema?: AnySchemaTyped<T>, opt?: VerifyOptions): T;
|
|
54
|
+
verify<T extends AnyObject>(token: JWTString, schema?: AnySchemaTyped<T>, opt?: VerifyOptions, publicKey?: string): T;
|
|
50
55
|
decode<T extends AnyObject>(token: JWTString, schema?: AnySchemaTyped<T>): {
|
|
51
56
|
header: JwtHeader;
|
|
52
57
|
payload: T;
|
package/dist/jwt/jwt.service.js
CHANGED
|
@@ -11,7 +11,10 @@ const joi_validation_util_1 = require("../validation/joi/joi.validation.util");
|
|
|
11
11
|
* Wraps popular `jsonwebtoken` library.
|
|
12
12
|
* You should create one instance of JWTService for each pair of private/public key.
|
|
13
13
|
*
|
|
14
|
-
* Generate key pair like this
|
|
14
|
+
* Generate key pair like this.
|
|
15
|
+
* Please note that parameters should be different for different algorithms.
|
|
16
|
+
* For ES256 (default algo in JWTService) key should have `prime256v1` parameter:
|
|
17
|
+
*
|
|
15
18
|
* openssl ecparam -name prime256v1 -genkey -noout -out key.pem
|
|
16
19
|
* openssl ec -in key.pem -pubout > key.pub.pem
|
|
17
20
|
*/
|
|
@@ -31,10 +34,10 @@ class JWTService {
|
|
|
31
34
|
...opt,
|
|
32
35
|
});
|
|
33
36
|
}
|
|
34
|
-
verify(token, schema, opt = {}) {
|
|
37
|
+
verify(token, schema, opt = {}, publicKey) {
|
|
35
38
|
(0, js_lib_1._assert)(this.cfg.publicKey, 'JWTService: publicKey is required to be able to verify, but not provided');
|
|
36
39
|
try {
|
|
37
|
-
const data = jsonwebtoken.verify(token, this.cfg.publicKey, {
|
|
40
|
+
const data = jsonwebtoken.verify(token, publicKey || this.cfg.publicKey, {
|
|
38
41
|
algorithms: [this.cfg.algorithm],
|
|
39
42
|
...this.cfg.verifyOptions,
|
|
40
43
|
...opt,
|
|
@@ -8,6 +8,7 @@ export declare const integerSchema: import("./number.extensions").ExtendedNumber
|
|
|
8
8
|
export declare const percentageSchema: import("./number.extensions").ExtendedNumberSchema;
|
|
9
9
|
export declare const dateStringSchema: import("./string.extensions").ExtendedStringSchema;
|
|
10
10
|
export declare const binarySchema: import("joi").BinarySchema;
|
|
11
|
+
export declare const dateObjectSchema: import("joi").ObjectSchema<any>;
|
|
11
12
|
export declare const urlSchema: (scheme?: string | string[]) => StringSchemaTyped;
|
|
12
13
|
export declare function arraySchema<T>(items?: AnySchemaTyped<T, T>): ArraySchemaTyped<T>;
|
|
13
14
|
export declare function objectSchema<IN, OUT = IN>(schema?: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_REGEX = exports.emailSchema = exports.verSchema = exports.unixTimestampMillis2000Schema = exports.unixTimestampMillisSchema = exports.unixTimestamp2000Schema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_REGEX = exports.idBase64UrlSchema = exports.idBase64Schema = exports.idBase62Schema = exports.idSchema = exports.jwtSchema = exports.JWT_REGEX = exports.base64UrlSchema = exports.base64Schema = exports.base62Schema = exports.BASE64URL_REGEX = exports.BASE64_REGEX = exports.BASE62_REGEX = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0;
|
|
3
|
+
exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_REGEX = exports.emailSchema = exports.verSchema = exports.unixTimestampMillis2000Schema = exports.unixTimestampMillisSchema = exports.unixTimestamp2000Schema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_REGEX = exports.idBase64UrlSchema = exports.idBase64Schema = exports.idBase62Schema = exports.idSchema = exports.jwtSchema = exports.JWT_REGEX = exports.base64UrlSchema = exports.base64Schema = exports.base62Schema = exports.BASE64URL_REGEX = exports.BASE64_REGEX = exports.BASE62_REGEX = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.dateObjectSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0;
|
|
4
4
|
const joi_extensions_1 = require("./joi.extensions");
|
|
5
5
|
exports.booleanSchema = joi_extensions_1.Joi.boolean();
|
|
6
6
|
exports.booleanDefaultToFalseSchema = joi_extensions_1.Joi.boolean().default(false);
|
|
@@ -10,6 +10,7 @@ exports.integerSchema = joi_extensions_1.Joi.number().integer();
|
|
|
10
10
|
exports.percentageSchema = joi_extensions_1.Joi.number().integer().min(0).max(100);
|
|
11
11
|
exports.dateStringSchema = exports.stringSchema.dateString();
|
|
12
12
|
exports.binarySchema = joi_extensions_1.Joi.binary();
|
|
13
|
+
exports.dateObjectSchema = joi_extensions_1.Joi.object().instance(Date);
|
|
13
14
|
const urlSchema = (scheme = 'https') => joi_extensions_1.Joi.string().uri({ scheme });
|
|
14
15
|
exports.urlSchema = urlSchema;
|
|
15
16
|
function arraySchema(items) {
|
package/package.json
CHANGED
package/src/jwt/jwt.service.ts
CHANGED
|
@@ -28,6 +28,8 @@ export interface JWTServiceCfg {
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Recommended: ES256
|
|
31
|
+
* Keys (private/public) should be generated using proper settings
|
|
32
|
+
* that fit the used Algorithm.
|
|
31
33
|
*/
|
|
32
34
|
algorithm: Algorithm
|
|
33
35
|
|
|
@@ -54,7 +56,10 @@ export interface JWTServiceCfg {
|
|
|
54
56
|
* Wraps popular `jsonwebtoken` library.
|
|
55
57
|
* You should create one instance of JWTService for each pair of private/public key.
|
|
56
58
|
*
|
|
57
|
-
* Generate key pair like this
|
|
59
|
+
* Generate key pair like this.
|
|
60
|
+
* Please note that parameters should be different for different algorithms.
|
|
61
|
+
* For ES256 (default algo in JWTService) key should have `prime256v1` parameter:
|
|
62
|
+
*
|
|
58
63
|
* openssl ecparam -name prime256v1 -genkey -noout -out key.pem
|
|
59
64
|
* openssl ec -in key.pem -pubout > key.pub.pem
|
|
60
65
|
*/
|
|
@@ -87,6 +92,7 @@ export class JWTService {
|
|
|
87
92
|
token: JWTString,
|
|
88
93
|
schema?: AnySchemaTyped<T>,
|
|
89
94
|
opt: VerifyOptions = {},
|
|
95
|
+
publicKey?: string, // allows to override public key
|
|
90
96
|
): T {
|
|
91
97
|
_assert(
|
|
92
98
|
this.cfg.publicKey,
|
|
@@ -94,7 +100,7 @@ export class JWTService {
|
|
|
94
100
|
)
|
|
95
101
|
|
|
96
102
|
try {
|
|
97
|
-
const data = jsonwebtoken.verify(token, this.cfg.publicKey, {
|
|
103
|
+
const data = jsonwebtoken.verify(token, publicKey || this.cfg.publicKey, {
|
|
98
104
|
algorithms: [this.cfg.algorithm],
|
|
99
105
|
...this.cfg.verifyOptions,
|
|
100
106
|
...opt,
|
|
@@ -17,6 +17,7 @@ export const integerSchema = Joi.number().integer()
|
|
|
17
17
|
export const percentageSchema = Joi.number().integer().min(0).max(100)
|
|
18
18
|
export const dateStringSchema = stringSchema.dateString()
|
|
19
19
|
export const binarySchema = Joi.binary()
|
|
20
|
+
export const dateObjectSchema = Joi.object().instance(Date)
|
|
20
21
|
|
|
21
22
|
export const urlSchema = (scheme: string | string[] = 'https'): StringSchemaTyped =>
|
|
22
23
|
Joi.string().uri({ scheme })
|