@pristine-ts/jwt 0.0.403 → 0.0.404
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/lib/cjs/decorators/jwt-payload.decorators.js.map +1 -1
- package/dist/lib/cjs/errors/invalid-jwt.error.js.map +1 -1
- package/dist/lib/cjs/errors/jwt-authorization-header.error.js.map +1 -1
- package/dist/lib/cjs/guards/jwt-protected.guard.js.map +1 -1
- package/dist/lib/cjs/jwt.module.js.map +1 -1
- package/dist/lib/cjs/managers/jwt.manager.js +18 -18
- package/dist/lib/cjs/managers/jwt.manager.js.map +1 -1
- package/dist/lib/cjs/resolvers/jwt-payload-parameter-decorator.resolver.js.map +1 -1
- package/dist/lib/cjs/tests/jwt.keys.js.map +1 -1
- package/dist/lib/esm/decorators/jwt-payload.decorators.js.map +1 -1
- package/dist/lib/esm/errors/invalid-jwt.error.js.map +1 -1
- package/dist/lib/esm/errors/jwt-authorization-header.error.js.map +1 -1
- package/dist/lib/esm/guards/jwt-protected.guard.js.map +1 -1
- package/dist/lib/esm/jwt.module.js.map +1 -1
- package/dist/lib/esm/managers/jwt.manager.js +18 -18
- package/dist/lib/esm/managers/jwt.manager.js.map +1 -1
- package/dist/lib/esm/resolvers/jwt-payload-parameter-decorator.resolver.js.map +1 -1
- package/dist/lib/esm/tests/jwt.keys.js.map +1 -1
- package/dist/types/errors/invalid-jwt.error.d.ts +1 -2
- package/dist/types/errors/jwt-authorization-header.error.d.ts +1 -2
- package/dist/types/guards/jwt-protected.guard.d.ts +3 -5
- package/dist/types/managers/jwt.manager.d.ts +6 -6
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-payload.decorators.js","sourceRoot":"","sources":["../../../../src/decorators/jwt-payload.decorators.ts"],"names":[],"mappings":";;;AACA,gDAAiD;AAEjD;;GAEG;AACI,MAAM,UAAU,GAAG,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"jwt-payload.decorators.js","sourceRoot":"","sources":["../../../../src/decorators/jwt-payload.decorators.ts"],"names":[],"mappings":";;;AACA,gDAAiD;AAEjD;;GAEG;AACI,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,OAAO;IACL;;OAEG;IACH,MAAW;IACX;;OAEG;IACH,WAA4B;IAC5B;;OAEG;IACH,cAAsB,EACtB,EAAE;QACF,sEAAsE;QACtE,MAAM,eAAe,GAAiC;YACpD,IAAI,EAAE,YAAY;SACnB,CAAC;QAEF,qBAAY,CAAC,kCAAkC,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IACxG,CAAC,CAAA;AACH,CAAC,CAAC;AAtBW,QAAA,UAAU,cAsBrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invalid-jwt.error.js","sourceRoot":"","sources":["../../../../src/errors/invalid-jwt.error.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"invalid-jwt.error.js","sourceRoot":"","sources":["../../../../src/errors/invalid-jwt.error.ts"],"names":[],"mappings":";;;AAAA,gDAA2D;AAE3D;;GAEG;AACH,MAAa,eAAgB,SAAQ,sBAAa;IAEhD;;;;;;;;OAQG;IACH,YAAmB,OAAe,EAAE,aAAoB,EAAE,OAAgB,EAAE,KAAa,EAAE,SAAiB,EAAE,SAAiB;QAC7H,KAAK,CAAC,OAAO,EAAE;YACb,OAAO;YACP,aAAa;YACb,KAAK;YACL,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QAEH,gCAAgC;QAChC,kDAAkD;QAClD,gIAAgI;QAChI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAzBD,0CAyBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-authorization-header.error.js","sourceRoot":"","sources":["../../../../src/errors/jwt-authorization-header.error.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"jwt-authorization-header.error.js","sourceRoot":"","sources":["../../../../src/errors/jwt-authorization-header.error.ts"],"names":[],"mappings":";;;AAAA,gDAA2D;AAE3D;;GAEG;AACH,MAAa,2BAA4B,SAAQ,sBAAa;IAC5D;;;;OAIG;IACH,YAAmB,OAAe,EAAE,OAAgB;QAClD,KAAK,CAAC,OAAO,EAAE;YACb,OAAO;SACR,CAAC,CAAC;QAEH,gCAAgC;QAChC,kDAAkD;QAClD,gIAAgI;QAChI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;CACF;AAhBD,kEAgBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-protected.guard.js","sourceRoot":"","sources":["../../../../src/guards/jwt-protected.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uCAA4C;
|
|
1
|
+
{"version":3,"file":"jwt-protected.guard.js","sourceRoot":"","sources":["../../../../src/guards/jwt-protected.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uCAA4C;AAK5C;;GAEG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAI5B,YAA2C,UAAgD;QAA/B,eAAU,GAAV,UAAU,CAAqB;QAHpF,YAAO,GAAG,eAAe,CAAC;IAIjC,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,OAAgB,EAAE,QAA4B;QACzD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC;iBACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,OAAY;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAE5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AA7BY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,qBAAU,GAAE;IAKE,WAAA,IAAA,iBAAM,EAAC,qBAAqB,CAAC,CAAA;;GAJ/B,iBAAiB,CA6B7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.module.js","sourceRoot":"","sources":["../../../src/jwt.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,wDAAyD;
|
|
1
|
+
{"version":3,"file":"jwt.module.js","sourceRoot":"","sources":["../../../src/jwt.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,wDAAyD;AACzD,6DAAsD;AACtD,8DAAuE;AAEvE,0DAAwC;AACxC,kDAAgC;AAChC,kDAAgC;AAChC,0DAAwC;AACxC,sDAAoC;AACpC,wDAAsC;AACtC,uDAAqC;AAExB,QAAA,SAAS,GAAoB;IACxC,OAAO,EAAE,qCAAgB;IACzB,wBAAwB,EAAE;QACxB;YACE,aAAa,EAAE,qCAAgB,GAAG,YAAY;YAC9C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,OAAO;YACrB,gBAAgB,EAAE;gBAChB,IAAI,2CAA2B,CAAC,wBAAwB,CAAC;aAC1D;SACF;QACD;YACE,aAAa,EAAE,qCAAgB,GAAG,YAAY;YAC9C,UAAU,EAAE,IAAI;SACjB;QACD;YACE,aAAa,EAAE,qCAAgB,GAAG,aAAa;YAC/C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,EAAE;SACjB;QACD;YACE,aAAa,EAAE,qCAAgB,GAAG,aAAa;YAC/C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,EAAE;SACjB;KACF;IACD,aAAa,EAAE;QACb,6BAAgB;KACjB;CACF,CAAA"}
|
|
@@ -37,24 +37,6 @@ let JwtManager = class JwtManager {
|
|
|
37
37
|
this.privateKey = privateKey;
|
|
38
38
|
this.passphrase = passphrase;
|
|
39
39
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Validates that the request contains the Authorization and that it is properly formed and returns the JWT.
|
|
42
|
-
* @param request The request to validate.
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
validateRequestAndReturnToken(request) {
|
|
46
|
-
if (request.headers === undefined || request.hasHeader("Authorization") === false) {
|
|
47
|
-
throw new jwt_authorization_header_error_1.JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
48
|
-
}
|
|
49
|
-
const authorizationHeader = request.getHeader("Authorization");
|
|
50
|
-
if (authorizationHeader === undefined) {
|
|
51
|
-
throw new jwt_authorization_header_error_1.JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
52
|
-
}
|
|
53
|
-
if (authorizationHeader.startsWith("Bearer ") === false) {
|
|
54
|
-
throw new jwt_authorization_header_error_1.JwtAuthorizationHeaderError("The value in Authorization header doesn't start with 'Bearer '", request);
|
|
55
|
-
}
|
|
56
|
-
return authorizationHeader.substr(7, authorizationHeader.length);
|
|
57
|
-
}
|
|
58
40
|
/**
|
|
59
41
|
* Validates that the request is authorized by validating the JWT and returning the decoded JWT.
|
|
60
42
|
* @param request The request to validate that contains the JWT.
|
|
@@ -77,6 +59,24 @@ let JwtManager = class JwtManager {
|
|
|
77
59
|
}
|
|
78
60
|
});
|
|
79
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Validates that the request contains the Authorization and that it is properly formed and returns the JWT.
|
|
64
|
+
* @param request The request to validate.
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
validateRequestAndReturnToken(request) {
|
|
68
|
+
if (request.headers === undefined || request.hasHeader("Authorization") === false) {
|
|
69
|
+
throw new jwt_authorization_header_error_1.JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
70
|
+
}
|
|
71
|
+
const authorizationHeader = request.getHeader("Authorization");
|
|
72
|
+
if (authorizationHeader === undefined) {
|
|
73
|
+
throw new jwt_authorization_header_error_1.JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
74
|
+
}
|
|
75
|
+
if (authorizationHeader.startsWith("Bearer ") === false) {
|
|
76
|
+
throw new jwt_authorization_header_error_1.JwtAuthorizationHeaderError("The value in Authorization header doesn't start with 'Bearer '", request);
|
|
77
|
+
}
|
|
78
|
+
return authorizationHeader.substr(7, authorizationHeader.length);
|
|
79
|
+
}
|
|
80
80
|
};
|
|
81
81
|
exports.JwtManager = JwtManager;
|
|
82
82
|
exports.JwtManager = JwtManager = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.manager.js","sourceRoot":"","sources":["../../../../src/managers/jwt.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4BAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"jwt.manager.js","sourceRoot":"","sources":["../../../../src/managers/jwt.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4BAAyB;AACzB,uCAA4C;AAC5C,gDAA+D;AAE/D,+CAA8C;AAC9C,6FAAqF;AACrF,mEAA4D;AAE5D,8DAAuD;AAEvD;;GAEG;AAII,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB;;;;;;OAMG;IACH,YACuD,SAAiB,EACjB,SAAoB,EACnB,UAAmB,EACnB,UAAmB;QAHpB,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAW;QACnB,eAAU,GAAV,UAAU,CAAS;QACnB,eAAU,GAAV,UAAU,CAAS;IAE3E,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,OAAgB;QACvC,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;gBAE1D,IAAA,qBAAM,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;oBAC5B,UAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC7B,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;oBAClB,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,MAAM,CAAC,IAAI,mCAAe,CAAC,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBACjH,CAAC;oBAED,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAA;YAEJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACK,6BAA6B,CAAC,OAAgB;QACpD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,KAAK,EAAE,CAAC;YAClF,MAAM,IAAI,4DAA2B,CAAC,uDAAuD,EAAE,OAAO,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAE/D,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,4DAA2B,CAAC,uDAAuD,EAAE,OAAO,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,4DAA2B,CAAC,gEAAgE,EAAE,OAAO,CAAC,CAAA;QAClH,CAAC;QAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;CACF,CAAA;AA/DY,gCAAU;qBAAV,UAAU;IAHtB,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAC9B,IAAA,YAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,qBAAU,GAAE;IAUR,WAAA,IAAA,iBAAM,EAAC,0BAA0B,CAAC,CAAA;IAClC,WAAA,IAAA,iBAAM,EAAC,0BAA0B,CAAC,CAAA;IAClC,WAAA,IAAA,iBAAM,EAAC,2BAA2B,CAAC,CAAA;IACnC,WAAA,IAAA,iBAAM,EAAC,2BAA2B,CAAC,CAAA;;GAZ3B,UAAU,CA+DtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-payload-parameter-decorator.resolver.js","sourceRoot":"","sources":["../../../../src/resolvers/jwt-payload-parameter-decorator.resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AACzB,uCAA4C;
|
|
1
|
+
{"version":3,"file":"jwt-payload-parameter-decorator.resolver.js","sourceRoot":"","sources":["../../../../src/resolvers/jwt-payload-parameter-decorator.resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AACzB,uCAA4C;AAK5C,gDAA4G;AAC5G,8DAAuD;AAIvD;;;GAGG;AAII,IAAM,oCAAoC,GAA1C,MAAM,oCAAoC;IAE/C,YAA4D,UAA+B;QAA/B,eAAU,GAAV,UAAU,CAAqB;IAC3F,CAAC;IAED;;;;;;OAMG;IACG,OAAO,CAAC,cAA4C,EAC5C,OAAgB,EAChB,eAAwC,EACxC,QAA4B;;YAExC,2EAA2E;YAC3E,IAAI,OAAO,GAAG,EAAE,CAAC;YAEjB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;YACb,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAED;;;OAGG;IACH,QAAQ,CAAC,cAA2C;QAClD,OAAO,cAAc,IAAI,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,KAAK,YAAY,CAAC;IACzG,CAAC;CACF,CAAA;AAnCY,oFAAoC;+CAApC,oCAAoC;IAHhD,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAC9B,IAAA,YAAG,EAAC,iCAAwB,CAAC,gCAAgC,CAAC;IAC9D,IAAA,qBAAU,GAAE;IAGE,WAAA,IAAA,iBAAM,EAAC,qBAAqB,CAAC,CAAA;;GAF/B,oCAAoC,CAmChD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.keys.js","sourceRoot":"","sources":["../../../../src/tests/jwt.keys.ts"],"names":[],"mappings":";;;AAAA,4DAA4D;AAC/C,QAAA,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"jwt.keys.js","sourceRoot":"","sources":["../../../../src/tests/jwt.keys.ts"],"names":[],"mappings":";;;AAAA,4DAA4D;AAC/C,QAAA,OAAO,GAAG;IACrB,KAAK,EAAE;QACL,iBAAiB,EAAE;YACjB,MAAM,EAAE,8BAA8B;gBACpC,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,YAAY;gBACZ,4BAA4B;YAC9B,OAAO,EAAE,mCAAmC;gBAC1C,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,wDAAwD;gBACxD,iCAAiC;SACpC;QACD,cAAc,EAAE;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,EAAE;SACf;KAEF;CACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-payload.decorators.js","sourceRoot":"","sources":["../../../../src/decorators/jwt-payload.decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"jwt-payload.decorators.js","sourceRoot":"","sources":["../../../../src/decorators/jwt-payload.decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,OAAO;IACL;;OAEG;IACH,MAAW;IACX;;OAEG;IACH,WAA4B;IAC5B;;OAEG;IACH,cAAsB,EACtB,EAAE;QACF,sEAAsE;QACtE,MAAM,eAAe,GAAiC;YACpD,IAAI,EAAE,YAAY;SACnB,CAAC;QAEF,YAAY,CAAC,kCAAkC,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IACxG,CAAC,CAAA;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invalid-jwt.error.js","sourceRoot":"","sources":["../../../../src/errors/invalid-jwt.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"invalid-jwt.error.js","sourceRoot":"","sources":["../../../../src/errors/invalid-jwt.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAU,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAEhD;;;;;;;;OAQG;IACH,YAAmB,OAAe,EAAE,aAAoB,EAAE,OAAgB,EAAE,KAAa,EAAE,SAAiB,EAAE,SAAiB;QAC7H,KAAK,CAAC,OAAO,EAAE;YACb,OAAO;YACP,aAAa;YACb,KAAK;YACL,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QAEH,gCAAgC;QAChC,kDAAkD;QAClD,gIAAgI;QAChI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-authorization-header.error.js","sourceRoot":"","sources":["../../../../src/errors/jwt-authorization-header.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"jwt-authorization-header.error.js","sourceRoot":"","sources":["../../../../src/errors/jwt-authorization-header.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAU,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,aAAa;IAC5D;;;;OAIG;IACH,YAAmB,OAAe,EAAE,OAAgB;QAClD,KAAK,CAAC,OAAO,EAAE;YACb,OAAO;SACR,CAAC,CAAC;QAEH,gCAAgC;QAChC,kDAAkD;QAClD,gIAAgI;QAChI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-protected.guard.js","sourceRoot":"","sources":["../../../../src/guards/jwt-protected.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt-protected.guard.js","sourceRoot":"","sources":["../../../../src/guards/jwt-protected.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAK5C;;GAEG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAI5B,YAA2C,UAAgD;QAA/B,eAAU,GAAV,UAAU,CAAqB;QAHpF,YAAO,GAAG,eAAe,CAAC;IAIjC,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,OAAgB,EAAE,QAA4B;QACzD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC;iBACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,OAAY;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAE5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AA7BY,iBAAiB;IAD7B,UAAU,EAAE;IAKE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAJ/B,iBAAiB,CA6B7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.module.js","sourceRoot":"","sources":["../../../src/jwt.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.module.js","sourceRoot":"","sources":["../../../src/jwt.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,2BAA2B,EAAC,MAAM,4BAA4B,CAAC;AAEvE,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAErC,MAAM,CAAC,MAAM,SAAS,GAAoB;IACxC,OAAO,EAAE,gBAAgB;IACzB,wBAAwB,EAAE;QACxB;YACE,aAAa,EAAE,gBAAgB,GAAG,YAAY;YAC9C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,OAAO;YACrB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,wBAAwB,CAAC;aAC1D;SACF;QACD;YACE,aAAa,EAAE,gBAAgB,GAAG,YAAY;YAC9C,UAAU,EAAE,IAAI;SACjB;QACD;YACE,aAAa,EAAE,gBAAgB,GAAG,aAAa;YAC/C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,EAAE;SACjB;QACD;YACE,aAAa,EAAE,gBAAgB,GAAG,aAAa;YAC/C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,EAAE;SACjB;KACF;IACD,aAAa,EAAE;QACb,gBAAgB;KACjB;CACF,CAAA"}
|
|
@@ -34,24 +34,6 @@ let JwtManager = class JwtManager {
|
|
|
34
34
|
this.privateKey = privateKey;
|
|
35
35
|
this.passphrase = passphrase;
|
|
36
36
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Validates that the request contains the Authorization and that it is properly formed and returns the JWT.
|
|
39
|
-
* @param request The request to validate.
|
|
40
|
-
* @private
|
|
41
|
-
*/
|
|
42
|
-
validateRequestAndReturnToken(request) {
|
|
43
|
-
if (request.headers === undefined || request.hasHeader("Authorization") === false) {
|
|
44
|
-
throw new JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
45
|
-
}
|
|
46
|
-
const authorizationHeader = request.getHeader("Authorization");
|
|
47
|
-
if (authorizationHeader === undefined) {
|
|
48
|
-
throw new JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
49
|
-
}
|
|
50
|
-
if (authorizationHeader.startsWith("Bearer ") === false) {
|
|
51
|
-
throw new JwtAuthorizationHeaderError("The value in Authorization header doesn't start with 'Bearer '", request);
|
|
52
|
-
}
|
|
53
|
-
return authorizationHeader.substr(7, authorizationHeader.length);
|
|
54
|
-
}
|
|
55
37
|
/**
|
|
56
38
|
* Validates that the request is authorized by validating the JWT and returning the decoded JWT.
|
|
57
39
|
* @param request The request to validate that contains the JWT.
|
|
@@ -74,6 +56,24 @@ let JwtManager = class JwtManager {
|
|
|
74
56
|
}
|
|
75
57
|
});
|
|
76
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Validates that the request contains the Authorization and that it is properly formed and returns the JWT.
|
|
61
|
+
* @param request The request to validate.
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
validateRequestAndReturnToken(request) {
|
|
65
|
+
if (request.headers === undefined || request.hasHeader("Authorization") === false) {
|
|
66
|
+
throw new JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
67
|
+
}
|
|
68
|
+
const authorizationHeader = request.getHeader("Authorization");
|
|
69
|
+
if (authorizationHeader === undefined) {
|
|
70
|
+
throw new JwtAuthorizationHeaderError("The Authorization header wasn't found in the Request.", request);
|
|
71
|
+
}
|
|
72
|
+
if (authorizationHeader.startsWith("Bearer ") === false) {
|
|
73
|
+
throw new JwtAuthorizationHeaderError("The value in Authorization header doesn't start with 'Bearer '", request);
|
|
74
|
+
}
|
|
75
|
+
return authorizationHeader.substr(7, authorizationHeader.length);
|
|
76
|
+
}
|
|
77
77
|
};
|
|
78
78
|
JwtManager = __decorate([
|
|
79
79
|
moduleScoped(JwtModuleKeyname),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.manager.js","sourceRoot":"","sources":["../../../../src/managers/jwt.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"jwt.manager.js","sourceRoot":"","sources":["../../../../src/managers/jwt.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAW,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAY,MAAM,EAAC,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAC,2BAA2B,EAAC,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AAII,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB;;;;;;OAMG;IACH,YACuD,SAAiB,EACjB,SAAoB,EACnB,UAAmB,EACnB,UAAmB;QAHpB,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAW;QACnB,eAAU,GAAV,UAAU,CAAS;QACnB,eAAU,GAAV,UAAU,CAAS;IAE3E,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,OAAgB;QACvC,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;gBAE1D,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;oBAC5B,UAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC7B,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;oBAClB,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,MAAM,CAAC,IAAI,eAAe,CAAC,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBACjH,CAAC;oBAED,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAA;YAEJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACK,6BAA6B,CAAC,OAAgB;QACpD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,KAAK,EAAE,CAAC;YAClF,MAAM,IAAI,2BAA2B,CAAC,uDAAuD,EAAE,OAAO,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAE/D,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,2BAA2B,CAAC,uDAAuD,EAAE,OAAO,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,2BAA2B,CAAC,gEAAgE,EAAE,OAAO,CAAC,CAAA;QAClH,CAAC;QAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;CACF,CAAA;AA/DY,UAAU;IAHtB,YAAY,CAAC,gBAAgB,CAAC;IAC9B,GAAG,CAAC,qBAAqB,CAAC;IAC1B,UAAU,EAAE;IAUR,WAAA,MAAM,CAAC,0BAA0B,CAAC,CAAA;IAClC,WAAA,MAAM,CAAC,0BAA0B,CAAC,CAAA;IAClC,WAAA,MAAM,CAAC,2BAA2B,CAAC,CAAA;IACnC,WAAA,MAAM,CAAC,2BAA2B,CAAC,CAAA;;GAZ3B,UAAU,CA+DtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-payload-parameter-decorator.resolver.js","sourceRoot":"","sources":["../../../../src/resolvers/jwt-payload-parameter-decorator.resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt-payload-parameter-decorator.resolver.js","sourceRoot":"","sources":["../../../../src/resolvers/jwt-payload-parameter-decorator.resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAK5C,OAAO,EAAoB,YAAY,EAAW,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAIvD;;;GAGG;AAII,IAAM,oCAAoC,GAA1C,MAAM,oCAAoC;IAE/C,YAA4D,UAA+B;QAA/B,eAAU,GAAV,UAAU,CAAqB;IAC3F,CAAC;IAED;;;;;;OAMG;IACG,OAAO,CAAC,cAA4C,EAC5C,OAAgB,EAChB,eAAwC,EACxC,QAA4B;;YAExC,2EAA2E;YAC3E,IAAI,OAAO,GAAG,EAAE,CAAC;YAEjB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;YACb,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAED;;;OAGG;IACH,QAAQ,CAAC,cAA2C;QAClD,OAAO,cAAc,IAAI,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,KAAK,YAAY,CAAC;IACzG,CAAC;CACF,CAAA;AAnCY,oCAAoC;IAHhD,YAAY,CAAC,gBAAgB,CAAC;IAC9B,GAAG,CAAC,wBAAwB,CAAC,gCAAgC,CAAC;IAC9D,UAAU,EAAE;IAGE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAF/B,oCAAoC,CAmChD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.keys.js","sourceRoot":"","sources":["../../../../src/tests/jwt.keys.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"jwt.keys.js","sourceRoot":"","sources":["../../../../src/tests/jwt.keys.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE;QACL,iBAAiB,EAAE;YACjB,MAAM,EAAE,8BAA8B;gBACpC,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,YAAY;gBACZ,4BAA4B;YAC9B,OAAO,EAAE,mCAAmC;gBAC1C,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,wDAAwD;gBACxD,iCAAiC;SACpC;QACD,cAAc,EAAE;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,EAAE;SACf;KAEF;CACF,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { LoggableError } from "@pristine-ts/common";
|
|
2
|
-
import { Request } from "@pristine-ts/common";
|
|
1
|
+
import { LoggableError, Request } from "@pristine-ts/common";
|
|
3
2
|
/**
|
|
4
3
|
* This Error is thrown when there's you try to decode a JWT in a request but the AuthorizationHeader is missing.
|
|
5
4
|
*/
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { JwtManagerInterface } from "../interfaces/jwt-manager.interface";
|
|
2
|
-
import { IdentityInterface } from "@pristine-ts/common";
|
|
3
|
-
import { GuardInterface } from "@pristine-ts/security";
|
|
4
|
-
import { GuardContextInterface } from "@pristine-ts/security";
|
|
5
|
-
import { Request } from "@pristine-ts/common";
|
|
2
|
+
import { IdentityInterface, Request } from "@pristine-ts/common";
|
|
3
|
+
import { GuardContextInterface, GuardInterface } from "@pristine-ts/security";
|
|
6
4
|
/**
|
|
7
5
|
* This guard is used to verify that a route can only be accessed when a request has a valid JWT.
|
|
8
6
|
*/
|
|
9
7
|
export declare class JwtProtectedGuard implements GuardInterface {
|
|
10
8
|
private readonly jwtManager;
|
|
11
|
-
constructor(jwtManager: JwtManagerInterface);
|
|
12
9
|
keyname: string;
|
|
13
10
|
guardContext?: GuardContextInterface;
|
|
11
|
+
constructor(jwtManager: JwtManagerInterface);
|
|
14
12
|
/**
|
|
15
13
|
* Verifies if the JWT is valid and authorizes access if it is.
|
|
16
14
|
* @param request
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
+
import { Request } from "@pristine-ts/common";
|
|
2
3
|
import { Algorithm } from "jsonwebtoken";
|
|
3
4
|
import { JwtManagerInterface } from "../interfaces/jwt-manager.interface";
|
|
4
|
-
import { Request } from "@pristine-ts/common";
|
|
5
5
|
/**
|
|
6
6
|
* The JwtManager makes decodes and validates JWT token so that they can be used.
|
|
7
7
|
*/
|
|
@@ -18,15 +18,15 @@ export declare class JwtManager implements JwtManagerInterface {
|
|
|
18
18
|
* @param passphrase
|
|
19
19
|
*/
|
|
20
20
|
constructor(publicKey: string, algorithm: Algorithm, privateKey?: string | undefined, passphrase?: string | undefined);
|
|
21
|
+
/**
|
|
22
|
+
* Validates that the request is authorized by validating the JWT and returning the decoded JWT.
|
|
23
|
+
* @param request The request to validate that contains the JWT.
|
|
24
|
+
*/
|
|
25
|
+
validateAndDecode(request: Request): Promise<any>;
|
|
21
26
|
/**
|
|
22
27
|
* Validates that the request contains the Authorization and that it is properly formed and returns the JWT.
|
|
23
28
|
* @param request The request to validate.
|
|
24
29
|
* @private
|
|
25
30
|
*/
|
|
26
31
|
private validateRequestAndReturnToken;
|
|
27
|
-
/**
|
|
28
|
-
* Validates that the request is authorized by validating the JWT and returning the decoded JWT.
|
|
29
|
-
* @param request The request to validate that contains the JWT.
|
|
30
|
-
*/
|
|
31
|
-
validateAndDecode(request: Request): Promise<any>;
|
|
32
32
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pristine-ts/jwt",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.404",
|
|
4
4
|
"description": "",
|
|
5
5
|
"module": "dist/lib/esm/jwt.module.js",
|
|
6
6
|
"main": "dist/lib/cjs/jwt.module.js",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"access": "public"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@pristine-ts/common": "^0.0.
|
|
24
|
-
"@pristine-ts/networking": "^0.0.
|
|
25
|
-
"@pristine-ts/security": "^0.0.
|
|
23
|
+
"@pristine-ts/common": "^0.0.404",
|
|
24
|
+
"@pristine-ts/networking": "^0.0.404",
|
|
25
|
+
"@pristine-ts/security": "^0.0.404",
|
|
26
26
|
"jsonwebtoken": "^9.0.2"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
"src/*.{js,ts}"
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "9abf20c5f2fd4b22b1295f6465ec0b7d19c1724e"
|
|
66
66
|
}
|