@lindorm/aegis 0.1.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.
Files changed (219) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -0
  3. package/dist/classes/Aegis.d.ts +27 -0
  4. package/dist/classes/Aegis.d.ts.map +1 -0
  5. package/dist/classes/Aegis.js +113 -0
  6. package/dist/classes/Aegis.js.map +1 -0
  7. package/dist/classes/AegisVault.d.ts +24 -0
  8. package/dist/classes/AegisVault.d.ts.map +1 -0
  9. package/dist/classes/AegisVault.js +141 -0
  10. package/dist/classes/AegisVault.js.map +1 -0
  11. package/dist/classes/JweKit.d.ts +13 -0
  12. package/dist/classes/JweKit.d.ts.map +1 -0
  13. package/dist/classes/JweKit.js +154 -0
  14. package/dist/classes/JweKit.js.map +1 -0
  15. package/dist/classes/JwsKit.d.ts +11 -0
  16. package/dist/classes/JwsKit.d.ts.map +1 -0
  17. package/dist/classes/JwsKit.js +95 -0
  18. package/dist/classes/JwsKit.js.map +1 -0
  19. package/dist/classes/JwtKit.d.ts +14 -0
  20. package/dist/classes/JwtKit.d.ts.map +1 -0
  21. package/dist/classes/JwtKit.js +127 -0
  22. package/dist/classes/JwtKit.js.map +1 -0
  23. package/dist/classes/index.d.ts +6 -0
  24. package/dist/classes/index.d.ts.map +1 -0
  25. package/dist/classes/index.js +22 -0
  26. package/dist/classes/index.js.map +1 -0
  27. package/dist/errors/AegisError.d.ts +4 -0
  28. package/dist/errors/AegisError.d.ts.map +1 -0
  29. package/dist/errors/AegisError.js +8 -0
  30. package/dist/errors/AegisError.js.map +1 -0
  31. package/dist/errors/AegisVaultError.d.ts +4 -0
  32. package/dist/errors/AegisVaultError.d.ts.map +1 -0
  33. package/dist/errors/AegisVaultError.js +8 -0
  34. package/dist/errors/AegisVaultError.js.map +1 -0
  35. package/dist/errors/JweError.d.ts +4 -0
  36. package/dist/errors/JweError.d.ts.map +1 -0
  37. package/dist/errors/JweError.js +8 -0
  38. package/dist/errors/JweError.js.map +1 -0
  39. package/dist/errors/JwsError.d.ts +4 -0
  40. package/dist/errors/JwsError.d.ts.map +1 -0
  41. package/dist/errors/JwsError.js +8 -0
  42. package/dist/errors/JwsError.js.map +1 -0
  43. package/dist/errors/JwtError.d.ts +4 -0
  44. package/dist/errors/JwtError.d.ts.map +1 -0
  45. package/dist/errors/JwtError.js +8 -0
  46. package/dist/errors/JwtError.js.map +1 -0
  47. package/dist/errors/index.d.ts +6 -0
  48. package/dist/errors/index.d.ts.map +1 -0
  49. package/dist/errors/index.js +22 -0
  50. package/dist/errors/index.js.map +1 -0
  51. package/dist/index.d.ts +4 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +20 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/types/aegis-vault.d.ts +29 -0
  56. package/dist/types/aegis-vault.d.ts.map +1 -0
  57. package/dist/types/aegis-vault.js +3 -0
  58. package/dist/types/aegis-vault.js.map +1 -0
  59. package/dist/types/aegis.d.ts +14 -0
  60. package/dist/types/aegis.d.ts.map +1 -0
  61. package/dist/types/aegis.js +3 -0
  62. package/dist/types/aegis.js.map +1 -0
  63. package/dist/types/header.d.ts +63 -0
  64. package/dist/types/header.d.ts.map +1 -0
  65. package/dist/types/header.js +3 -0
  66. package/dist/types/header.js.map +1 -0
  67. package/dist/types/index.d.ts +11 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/index.js +27 -0
  70. package/dist/types/index.js.map +1 -0
  71. package/dist/types/interfaces/aegis-vault.d.ts +12 -0
  72. package/dist/types/interfaces/aegis-vault.d.ts.map +1 -0
  73. package/dist/types/interfaces/aegis-vault.js +3 -0
  74. package/dist/types/interfaces/aegis-vault.js.map +1 -0
  75. package/dist/types/interfaces/aegis.d.ts +22 -0
  76. package/dist/types/interfaces/aegis.d.ts.map +1 -0
  77. package/dist/types/interfaces/aegis.js +3 -0
  78. package/dist/types/interfaces/aegis.js.map +1 -0
  79. package/dist/types/interfaces/index.d.ts +6 -0
  80. package/dist/types/interfaces/index.d.ts.map +1 -0
  81. package/dist/types/interfaces/index.js +22 -0
  82. package/dist/types/interfaces/index.js.map +1 -0
  83. package/dist/types/interfaces/jwe-kit.d.ts +7 -0
  84. package/dist/types/interfaces/jwe-kit.d.ts.map +1 -0
  85. package/dist/types/interfaces/jwe-kit.js +3 -0
  86. package/dist/types/interfaces/jwe-kit.js.map +1 -0
  87. package/dist/types/interfaces/jws-kit.d.ts +6 -0
  88. package/dist/types/interfaces/jws-kit.d.ts.map +1 -0
  89. package/dist/types/interfaces/jws-kit.js +3 -0
  90. package/dist/types/interfaces/jws-kit.js.map +1 -0
  91. package/dist/types/interfaces/jwt-kit.d.ts +8 -0
  92. package/dist/types/interfaces/jwt-kit.d.ts.map +1 -0
  93. package/dist/types/interfaces/jwt-kit.js +3 -0
  94. package/dist/types/interfaces/jwt-kit.js.map +1 -0
  95. package/dist/types/jwe/index.d.ts +5 -0
  96. package/dist/types/jwe/index.d.ts.map +1 -0
  97. package/dist/types/jwe/index.js +21 -0
  98. package/dist/types/jwe/index.js.map +1 -0
  99. package/dist/types/jwe/jwe-decode.d.ts +9 -0
  100. package/dist/types/jwe/jwe-decode.d.ts.map +1 -0
  101. package/dist/types/jwe/jwe-decode.js +3 -0
  102. package/dist/types/jwe/jwe-decode.js.map +1 -0
  103. package/dist/types/jwe/jwe-decrypt.d.ts +14 -0
  104. package/dist/types/jwe/jwe-decrypt.d.ts.map +1 -0
  105. package/dist/types/jwe/jwe-decrypt.js +3 -0
  106. package/dist/types/jwe/jwe-decrypt.js.map +1 -0
  107. package/dist/types/jwe/jwe-encrypt.d.ts +7 -0
  108. package/dist/types/jwe/jwe-encrypt.d.ts.map +1 -0
  109. package/dist/types/jwe/jwe-encrypt.js +3 -0
  110. package/dist/types/jwe/jwe-encrypt.js.map +1 -0
  111. package/dist/types/jwe/jwe-kit.d.ts +9 -0
  112. package/dist/types/jwe/jwe-kit.d.ts.map +1 -0
  113. package/dist/types/jwe/jwe-kit.js +3 -0
  114. package/dist/types/jwe/jwe-kit.js.map +1 -0
  115. package/dist/types/jws/index.d.ts +5 -0
  116. package/dist/types/jws/index.d.ts.map +1 -0
  117. package/dist/types/jws/index.js +21 -0
  118. package/dist/types/jws/index.js.map +1 -0
  119. package/dist/types/jws/jws-decode.d.ts +7 -0
  120. package/dist/types/jws/jws-decode.d.ts.map +1 -0
  121. package/dist/types/jws/jws-decode.js +3 -0
  122. package/dist/types/jws/jws-decode.js.map +1 -0
  123. package/dist/types/jws/jws-kit.d.ts +9 -0
  124. package/dist/types/jws/jws-kit.d.ts.map +1 -0
  125. package/dist/types/jws/jws-kit.js +3 -0
  126. package/dist/types/jws/jws-kit.js.map +1 -0
  127. package/dist/types/jws/jws-sign.d.ts +9 -0
  128. package/dist/types/jws/jws-sign.d.ts.map +1 -0
  129. package/dist/types/jws/jws-sign.js +3 -0
  130. package/dist/types/jws/jws-sign.js.map +1 -0
  131. package/dist/types/jws/jws-verify.d.ts +14 -0
  132. package/dist/types/jws/jws-verify.d.ts.map +1 -0
  133. package/dist/types/jws/jws-verify.js +3 -0
  134. package/dist/types/jws/jws-verify.js.map +1 -0
  135. package/dist/types/jwt/index.d.ts +8 -0
  136. package/dist/types/jwt/index.d.ts.map +1 -0
  137. package/dist/types/jwt/index.js +24 -0
  138. package/dist/types/jwt/index.js.map +1 -0
  139. package/dist/types/jwt/jwt-claims.d.ts +38 -0
  140. package/dist/types/jwt/jwt-claims.d.ts.map +1 -0
  141. package/dist/types/jwt/jwt-claims.js +3 -0
  142. package/dist/types/jwt/jwt-claims.js.map +1 -0
  143. package/dist/types/jwt/jwt-decode.d.ts +9 -0
  144. package/dist/types/jwt/jwt-decode.d.ts.map +1 -0
  145. package/dist/types/jwt/jwt-decode.js +3 -0
  146. package/dist/types/jwt/jwt-decode.js.map +1 -0
  147. package/dist/types/jwt/jwt-kit.d.ts +9 -0
  148. package/dist/types/jwt/jwt-kit.d.ts.map +1 -0
  149. package/dist/types/jwt/jwt-kit.js +3 -0
  150. package/dist/types/jwt/jwt-kit.js.map +1 -0
  151. package/dist/types/jwt/jwt-parse.d.ts +34 -0
  152. package/dist/types/jwt/jwt-parse.d.ts.map +1 -0
  153. package/dist/types/jwt/jwt-parse.js +3 -0
  154. package/dist/types/jwt/jwt-parse.js.map +1 -0
  155. package/dist/types/jwt/jwt-sign.d.ts +48 -0
  156. package/dist/types/jwt/jwt-sign.d.ts.map +1 -0
  157. package/dist/types/jwt/jwt-sign.js +3 -0
  158. package/dist/types/jwt/jwt-sign.js.map +1 -0
  159. package/dist/types/jwt/jwt-validate.d.ts +32 -0
  160. package/dist/types/jwt/jwt-validate.d.ts.map +1 -0
  161. package/dist/types/jwt/jwt-validate.js +3 -0
  162. package/dist/types/jwt/jwt-validate.js.map +1 -0
  163. package/dist/types/jwt/jwt-verify.d.ts +41 -0
  164. package/dist/types/jwt/jwt-verify.d.ts.map +1 -0
  165. package/dist/types/jwt/jwt-verify.js +3 -0
  166. package/dist/types/jwt/jwt-verify.js.map +1 -0
  167. package/dist/types/level-of-assurance.d.ts +3 -0
  168. package/dist/types/level-of-assurance.d.ts.map +1 -0
  169. package/dist/types/level-of-assurance.js +3 -0
  170. package/dist/types/level-of-assurance.js.map +1 -0
  171. package/dist/types/oidc.d.ts +27 -0
  172. package/dist/types/oidc.d.ts.map +1 -0
  173. package/dist/types/oidc.js +3 -0
  174. package/dist/types/oidc.js.map +1 -0
  175. package/dist/types/operators.d.ts +27 -0
  176. package/dist/types/operators.d.ts.map +1 -0
  177. package/dist/types/operators.js +3 -0
  178. package/dist/types/operators.js.map +1 -0
  179. package/dist/utils/private/create-hash.d.ts +8 -0
  180. package/dist/utils/private/create-hash.d.ts.map +1 -0
  181. package/dist/utils/private/create-hash.js +30 -0
  182. package/dist/utils/private/create-hash.js.map +1 -0
  183. package/dist/utils/private/create-token-signature.d.ts +9 -0
  184. package/dist/utils/private/create-token-signature.d.ts.map +1 -0
  185. package/dist/utils/private/create-token-signature.js +41 -0
  186. package/dist/utils/private/create-token-signature.js.map +1 -0
  187. package/dist/utils/private/jwt-payload.d.ts +20 -0
  188. package/dist/utils/private/jwt-payload.d.ts.map +1 -0
  189. package/dist/utils/private/jwt-payload.js +132 -0
  190. package/dist/utils/private/jwt-payload.js.map +1 -0
  191. package/dist/utils/private/jwt-validate.d.ts +4 -0
  192. package/dist/utils/private/jwt-validate.d.ts.map +1 -0
  193. package/dist/utils/private/jwt-validate.js +45 -0
  194. package/dist/utils/private/jwt-validate.js.map +1 -0
  195. package/dist/utils/private/jwt-verify.d.ts +5 -0
  196. package/dist/utils/private/jwt-verify.d.ts.map +1 -0
  197. package/dist/utils/private/jwt-verify.js +109 -0
  198. package/dist/utils/private/jwt-verify.js.map +1 -0
  199. package/dist/utils/private/token-header.d.ts +5 -0
  200. package/dist/utils/private/token-header.d.ts.map +1 -0
  201. package/dist/utils/private/token-header.js +193 -0
  202. package/dist/utils/private/token-header.js.map +1 -0
  203. package/dist/utils/private/token-type.d.ts +3 -0
  204. package/dist/utils/private/token-type.d.ts.map +1 -0
  205. package/dist/utils/private/token-type.js +11 -0
  206. package/dist/utils/private/token-type.js.map +1 -0
  207. package/dist/utils/private/validate-value.d.ts +3 -0
  208. package/dist/utils/private/validate-value.d.ts.map +1 -0
  209. package/dist/utils/private/validate-value.js +91 -0
  210. package/dist/utils/private/validate-value.js.map +1 -0
  211. package/dist/utils/private/validate.d.ts +4 -0
  212. package/dist/utils/private/validate.d.ts.map +1 -0
  213. package/dist/utils/private/validate.js +19 -0
  214. package/dist/utils/private/validate.js.map +1 -0
  215. package/dist/utils/private/verify-token-signature.d.ts +3 -0
  216. package/dist/utils/private/verify-token-signature.d.ts.map +1 -0
  217. package/dist/utils/private/verify-token-signature.js +42 -0
  218. package/dist/utils/private/verify-token-signature.js.map +1 -0
  219. package/package.json +49 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ # 0.1.0 (2024-05-19)
7
+
8
+ ### Features
9
+
10
+ - initialise aegis package ([b0eb954](https://github.com/lindorm-io/monorepo/commit/b0eb954d9015bd965a3120980edaceaff55e9ccb))
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @lindorm/aegis
@@ -0,0 +1,27 @@
1
+ import { AegisOptions, IAegis, IAegisJwe, IAegisJws, IAegisJwt } from "../types";
2
+ export declare class Aegis implements IAegis {
3
+ private readonly clockTolerance;
4
+ private readonly encAlgorithm;
5
+ private readonly encryption;
6
+ private readonly issuer;
7
+ private readonly kryptosMayOverrideEncryption;
8
+ private readonly logger;
9
+ private readonly sigAlgorithm;
10
+ private readonly vault;
11
+ constructor(options: AegisOptions);
12
+ get jwe(): IAegisJwe;
13
+ get jws(): IAegisJws;
14
+ get jwt(): IAegisJwt;
15
+ private jweKit;
16
+ private jweEncrypt;
17
+ private jweDecrypt;
18
+ private jwsKit;
19
+ private jwsSign;
20
+ private jwsVerify;
21
+ private jwtKit;
22
+ private jwtSign;
23
+ private jwtVerify;
24
+ private kryptosEnc;
25
+ private kryptosSig;
26
+ }
27
+ //# sourceMappingURL=Aegis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Aegis.d.ts","sourceRoot":"","sources":["../../src/classes/Aegis.ts"],"names":[],"mappings":"AASA,OAAO,EACL,YAAY,EAGZ,MAAM,EACN,SAAS,EACT,SAAS,EACT,SAAS,EAYV,MAAM,UAAU,CAAC;AAKlB,qBAAa,KAAM,YAAW,MAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAU;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAEjB,OAAO,EAAE,YAAY;IAYxC,IAAW,GAAG,IAAI,SAAS,CAK1B;IAED,IAAW,GAAG,IAAI,SAAS,CAK1B;IAED,IAAW,GAAG,IAAI,SAAS,CAK1B;YAIa,MAAM;YAWN,UAAU;YAQV,UAAU;YAOV,MAAM;YAMN,OAAO;YAQP,SAAS;YAOT,MAAM;YAWN,OAAO;YAQP,SAAS;YAUT,UAAU;YAaV,UAAU;CAazB"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Aegis = void 0;
4
+ const JweKit_1 = require("./JweKit");
5
+ const JwsKit_1 = require("./JwsKit");
6
+ const JwtKit_1 = require("./JwtKit");
7
+ class Aegis {
8
+ clockTolerance;
9
+ encAlgorithm;
10
+ encryption;
11
+ issuer;
12
+ kryptosMayOverrideEncryption;
13
+ logger;
14
+ sigAlgorithm;
15
+ vault;
16
+ constructor(options) {
17
+ this.logger = options.logger.child(["AegisKit"]);
18
+ this.vault = options.vault;
19
+ this.issuer = options.issuer;
20
+ this.clockTolerance = options.clockTolerance ?? 0;
21
+ this.encAlgorithm = options.encAlgorithm;
22
+ this.encryption = options.encryption ?? "A256GCM";
23
+ this.kryptosMayOverrideEncryption = options.kryptosMayOverrideEncryption ?? true;
24
+ this.sigAlgorithm = options.sigAlgorithm;
25
+ }
26
+ get jwe() {
27
+ return {
28
+ encrypt: this.jweEncrypt.bind(this),
29
+ decrypt: this.jweDecrypt.bind(this),
30
+ };
31
+ }
32
+ get jws() {
33
+ return {
34
+ sign: this.jwsSign.bind(this),
35
+ verify: this.jwsVerify.bind(this),
36
+ };
37
+ }
38
+ get jwt() {
39
+ return {
40
+ sign: this.jwtSign.bind(this),
41
+ verify: this.jwtVerify.bind(this),
42
+ };
43
+ }
44
+ async jweKit(operation) {
45
+ const kryptos = await this.kryptosEnc(operation);
46
+ return new JweKit_1.JweKit({
47
+ encryption: this.encryption,
48
+ kryptos,
49
+ kryptosMayOverrideEncryption: this.kryptosMayOverrideEncryption,
50
+ logger: this.logger,
51
+ });
52
+ }
53
+ async jweEncrypt(data, options) {
54
+ const jweKit = await this.jweKit("encrypt");
55
+ return jweKit.encrypt(data, options);
56
+ }
57
+ async jweDecrypt(jwe) {
58
+ const jweKit = await this.jweKit("decrypt");
59
+ return jweKit.decrypt(jwe);
60
+ }
61
+ async jwsKit(operation) {
62
+ const kryptos = await this.kryptosSig(operation);
63
+ return new JwsKit_1.JwsKit({ kryptos, logger: this.logger });
64
+ }
65
+ async jwsSign(data, options) {
66
+ const jwsKit = await this.jwsKit("sign");
67
+ return jwsKit.sign(data, options);
68
+ }
69
+ async jwsVerify(jws) {
70
+ const jwsKit = await this.jwsKit("verify");
71
+ return jwsKit.verify(jws);
72
+ }
73
+ async jwtKit(operation) {
74
+ const kryptos = await this.kryptosSig(operation);
75
+ return new JwtKit_1.JwtKit({
76
+ clockTolerance: this.clockTolerance,
77
+ issuer: this.issuer,
78
+ kryptos,
79
+ logger: this.logger,
80
+ });
81
+ }
82
+ async jwtSign(content, options) {
83
+ const jwtKit = await this.jwtKit("sign");
84
+ return jwtKit.sign(content, options);
85
+ }
86
+ async jwtVerify(jwt, verify) {
87
+ const jwtKit = await this.jwtKit("verify");
88
+ return jwtKit.verify(jwt, verify);
89
+ }
90
+ async kryptosEnc(operation) {
91
+ const kryptos = await this.vault.find({
92
+ algorithm: this.encAlgorithm,
93
+ issuer: this.issuer,
94
+ operation,
95
+ use: "enc",
96
+ });
97
+ this.logger.silly("Kryptos found", { kryptos: kryptos.toJSON() });
98
+ return kryptos;
99
+ }
100
+ async kryptosSig(operation) {
101
+ const kryptos = await this.vault.find({
102
+ algorithm: this.sigAlgorithm,
103
+ issuer: this.issuer,
104
+ operation,
105
+ private: true,
106
+ use: "sig",
107
+ });
108
+ this.logger.silly("Kryptos found", { kryptos: kryptos.toJSON() });
109
+ return kryptos;
110
+ }
111
+ }
112
+ exports.Aegis = Aegis;
113
+ //# sourceMappingURL=Aegis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Aegis.js","sourceRoot":"","sources":["../../src/classes/Aegis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { IKryptos } from "@lindorm/kryptos";
2
+ import { AegisVaultOptions, AegisVaultQuery, IAegisVault, VaultConfig } from "../types";
3
+ export declare class AegisVault implements IAegisVault {
4
+ private readonly _conduit;
5
+ private readonly _config;
6
+ private readonly _external;
7
+ private readonly _logger;
8
+ private _vault;
9
+ constructor(options: AegisVaultOptions);
10
+ get config(): Array<VaultConfig>;
11
+ get vault(): Array<IKryptos>;
12
+ setup(): Promise<void>;
13
+ refresh(): Promise<void>;
14
+ add(kryptos: Array<IKryptos> | IKryptos): void;
15
+ find(query: AegisVaultQuery): Promise<IKryptos>;
16
+ filter(query: AegisVaultQuery): Promise<Array<IKryptos>>;
17
+ private addExternalConfig;
18
+ private filteredKeys;
19
+ private getJwks;
20
+ private issuerConfig;
21
+ private loadExternalConfig;
22
+ private refreshExternal;
23
+ }
24
+ //# sourceMappingURL=AegisVault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AegisVault.d.ts","sourceRoot":"","sources":["../../src/classes/AegisVault.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAW,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EAGX,WAAW,EAEZ,MAAM,UAAU,CAAC;AAElB,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,MAAM,CAAkB;gBAEb,OAAO,EAAE,iBAAiB;IAmB7C,IAAW,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAEtC;IAED,IAAW,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAElC;IAIY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI;IAoBxC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAO/C,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAgBvD,iBAAiB;IAmB/B,OAAO,CAAC,YAAY;YAoBN,OAAO;YAyBP,YAAY;YAcZ,kBAAkB;YAQlB,eAAe;CAK9B"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AegisVault = void 0;
4
+ const conduit_1 = require("@lindorm/conduit");
5
+ const is_1 = require("@lindorm/is");
6
+ const kryptos_1 = require("@lindorm/kryptos");
7
+ const errors_1 = require("../errors");
8
+ class AegisVault {
9
+ _conduit;
10
+ _config;
11
+ _external;
12
+ _logger;
13
+ _vault;
14
+ constructor(options) {
15
+ this._logger = options.logger.child(["AegisVault"]);
16
+ this._conduit = new conduit_1.Conduit({
17
+ alias: "AegisVault",
18
+ logger: this._logger,
19
+ middleware: [(0, conduit_1.conduitChangeResponseDataMiddleware)()],
20
+ retryOptions: {
21
+ maxAttempts: 10,
22
+ },
23
+ });
24
+ this._external = options.external ?? [];
25
+ this._config = [];
26
+ this._vault = [];
27
+ }
28
+ get config() {
29
+ return this._config;
30
+ }
31
+ get vault() {
32
+ return this._vault;
33
+ }
34
+ async setup() {
35
+ await this.loadExternalConfig();
36
+ await this.refresh();
37
+ }
38
+ async refresh() {
39
+ this._logger.verbose("Refreshing vault");
40
+ for (const config of this._config) {
41
+ await this.refreshExternal(config);
42
+ }
43
+ }
44
+ add(kryptos) {
45
+ const array = (0, is_1.isArray)(kryptos) ? kryptos : [kryptos];
46
+ for (const item of array) {
47
+ if (!item.id) {
48
+ throw new errors_1.AegisVaultError("Id is required when adding Kryptos");
49
+ }
50
+ if (!item.issuer) {
51
+ throw new errors_1.AegisVaultError("Issuer is required when adding Kryptos");
52
+ }
53
+ if (item.isExpired) {
54
+ throw new errors_1.AegisVaultError("Kryptos is expired");
55
+ }
56
+ this._vault = this._vault.filter((i) => i.id !== item.id).concat(item);
57
+ }
58
+ }
59
+ async find(query) {
60
+ const [key] = await this.filter(query);
61
+ if (key)
62
+ return key;
63
+ throw new errors_1.AegisVaultError("Kryptos not found using query");
64
+ }
65
+ async filter(query) {
66
+ const filtered = this.filteredKeys(query);
67
+ if (filtered.length)
68
+ return filtered;
69
+ if (!query.issuer) {
70
+ throw new errors_1.AegisVaultError("Unable to find Kryptos without issuer");
71
+ }
72
+ const config = await this.issuerConfig(query.issuer);
73
+ await this.refreshExternal(config);
74
+ return this.filteredKeys(query);
75
+ }
76
+ async addExternalConfig(options) {
77
+ if ((0, is_1.isUrlLike)(options.issuer) && (0, is_1.isUrlLike)(options.jwksUri)) {
78
+ this._config.push({ issuer: options.issuer, jwksUri: options.jwksUri });
79
+ return;
80
+ }
81
+ if (!(0, is_1.isUrlLike)(options.openIdConfigurationUri)) {
82
+ throw new errors_1.AegisVaultError("Invalid issuer options");
83
+ }
84
+ const { data: { issuer, jwksUri }, } = await this._conduit.get(options.openIdConfigurationUri);
85
+ this._config.push({ issuer, jwksUri });
86
+ }
87
+ filteredKeys(query) {
88
+ return this._vault
89
+ .filter((i) => i.isActive)
90
+ .filter((i) => ((0, is_1.isString)(query.issuer) ? query.issuer === i.issuer : true))
91
+ .filter((i) => ((0, is_1.isString)(query.id) ? i.id === query.id : true))
92
+ .filter((i) => ((0, is_1.isString)(query.algorithm) ? i.algorithm === query.algorithm : true))
93
+ .filter((i) => ((0, is_1.isBoolean)(query.external) ? i.isExternal === query.external : true))
94
+ .filter((i) => (0, is_1.isString)(query.operation) && i.operations.length
95
+ ? i.operations.includes(query.operation)
96
+ : true)
97
+ .filter((i) => ((0, is_1.isString)(query.ownerId) ? i.ownerId === query.ownerId : true))
98
+ .filter((i) => ((0, is_1.isBoolean)(query.private) ? i.hasPrivateKey : true))
99
+ .filter((i) => ((0, is_1.isBoolean)(query.public) ? i.hasPublicKey : true))
100
+ .filter((i) => ((0, is_1.isString)(query.type) ? i.type === query.type : true))
101
+ .filter((i) => ((0, is_1.isString)(query.use) ? i.use === query.use : true))
102
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
103
+ }
104
+ async getJwks(issuer) {
105
+ this._logger.verbose("Finding JWKS", { issuer });
106
+ const config = await this.issuerConfig(issuer);
107
+ const { data: { keys }, } = await this._conduit.get(config.jwksUri);
108
+ const result = [];
109
+ for (const jwk of keys) {
110
+ const iss = jwk.iss ?? config.issuer;
111
+ const jku = jwk.jku ?? config.jwksUri;
112
+ const kryptos = kryptos_1.Kryptos.make({ ...jwk, iss, jku });
113
+ if (kryptos.isExpired)
114
+ continue;
115
+ result.push(kryptos);
116
+ }
117
+ return result;
118
+ }
119
+ async issuerConfig(issuer) {
120
+ if (this._external.length && !this._config.length) {
121
+ await this.loadExternalConfig();
122
+ }
123
+ const config = this._config.find((c) => c.issuer === issuer);
124
+ if (!config) {
125
+ throw new errors_1.AegisVaultError("Issuer not found in config");
126
+ }
127
+ return config;
128
+ }
129
+ async loadExternalConfig() {
130
+ this._logger.verbose("Loading external config");
131
+ for (const options of this._external) {
132
+ await this.addExternalConfig(options);
133
+ }
134
+ }
135
+ async refreshExternal(config) {
136
+ const keys = await this.getJwks(config.issuer);
137
+ this._vault = this._vault.filter((i) => i.issuer !== config.issuer).concat(keys);
138
+ }
139
+ }
140
+ exports.AegisVault = AegisVault;
141
+ //# sourceMappingURL=AegisVault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AegisVault.js","sourceRoot":"","sources":["../../src/classes/AegisVault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { DecodedJwe, DecryptedJwe, EncryptedJwe, IJweKit, JweEncryptOptions, JweKitOptions } from "../types";
2
+ export declare class JweKit implements IJweKit {
3
+ private readonly encryption;
4
+ private readonly logger;
5
+ private readonly kryptos;
6
+ private readonly kryptosMayOverrideEncryption;
7
+ constructor(options: JweKitOptions);
8
+ encrypt(data: string, options?: JweEncryptOptions): EncryptedJwe;
9
+ decrypt(jwe: string): DecryptedJwe;
10
+ static decode(jwe: string): DecodedJwe;
11
+ private contentType;
12
+ }
13
+ //# sourceMappingURL=JweKit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JweKit.d.ts","sourceRoot":"","sources":["../../src/classes/JweKit.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,UAAU,EACV,YAAY,EAEZ,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,aAAa,EAEd,MAAM,UAAU,CAAC;AAOlB,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAU;gBAEpC,OAAO,EAAE,aAAa;IAQlC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,YAAY;IAqEpE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;WA4E3B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IAiB7C,OAAO,CAAC,WAAW;CASpB"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JweKit = void 0;
4
+ const aes_1 = require("@lindorm/aes");
5
+ const b64_1 = require("@lindorm/b64");
6
+ const utils_1 = require("@lindorm/utils");
7
+ const crypto_1 = require("crypto");
8
+ const errors_1 = require("../errors");
9
+ const token_header_1 = require("../utils/private/token-header");
10
+ class JweKit {
11
+ encryption;
12
+ logger;
13
+ kryptos;
14
+ kryptosMayOverrideEncryption;
15
+ constructor(options) {
16
+ this.logger = options.logger.child(["JweKit"]);
17
+ this.kryptos = options.kryptos;
18
+ this.encryption = options.encryption = "A256GCM";
19
+ this.kryptosMayOverrideEncryption = options.kryptosMayOverrideEncryption ?? false;
20
+ }
21
+ encrypt(data, options = {}) {
22
+ const encryption = this.kryptosMayOverrideEncryption && this.kryptos.encryption
23
+ ? this.kryptos.encryption
24
+ : this.encryption;
25
+ const aes = new aes_1.AesKit({
26
+ encryption,
27
+ format: "base64url",
28
+ kryptos: this.kryptos,
29
+ });
30
+ const { authTag, content, hkdfSalt, initialisationVector, pbkdfIterations, pbkdfSalt, publicEncryptionJwk, publicEncryptionKey, } = aes.encrypt(data, "object");
31
+ const jwksUri = this.kryptos.jwksUri;
32
+ const keyId = this.kryptos.id;
33
+ const objectId = options.objectId ?? (0, crypto_1.randomUUID)();
34
+ const critical = [
35
+ "algorithm",
36
+ "encryption",
37
+ ];
38
+ if (publicEncryptionJwk)
39
+ critical.push("publicEncryptionJwk");
40
+ if (hkdfSalt)
41
+ critical.push("hkdfSalt");
42
+ if (pbkdfIterations)
43
+ critical.push("pbkdfIterations");
44
+ if (pbkdfSalt)
45
+ critical.push("pbkdfSalt");
46
+ const headerOptions = {
47
+ algorithm: this.kryptos.algorithm,
48
+ contentType: this.contentType(data),
49
+ critical,
50
+ encryption,
51
+ headerType: "JWE",
52
+ hkdfSalt: hkdfSalt ? b64_1.B64.encode(hkdfSalt, "base64url") : undefined,
53
+ jwksUri,
54
+ keyId,
55
+ objectId,
56
+ pbkdfIterations,
57
+ pbkdfSalt: pbkdfSalt ? b64_1.B64.encode(pbkdfSalt, "base64url") : undefined,
58
+ publicEncryptionJwk,
59
+ };
60
+ const header = (0, token_header_1._encodeTokenHeader)(headerOptions);
61
+ this.logger.silly("Token header encoded", { header, options: headerOptions });
62
+ const token = (0, utils_1.removeUndefined)([
63
+ header,
64
+ publicEncryptionKey ? b64_1.B64.encode(publicEncryptionKey, "base64url") : "",
65
+ b64_1.B64.encode(initialisationVector, "base64url"),
66
+ b64_1.B64.encode(content, "base64url"),
67
+ authTag ? b64_1.B64.encode(authTag, "base64url") : undefined,
68
+ ]).join(".");
69
+ this.logger.silly("Token created", { keyId, token });
70
+ return { token };
71
+ }
72
+ decrypt(jwe) {
73
+ const encryption = this.kryptosMayOverrideEncryption && this.kryptos.encryption
74
+ ? this.kryptos.encryption
75
+ : this.encryption;
76
+ const decoded = JweKit.decode(jwe);
77
+ if (decoded.header.typ !== "JWE") {
78
+ throw new errors_1.JweError("Invalid token", {
79
+ data: { typ: decoded.header.typ },
80
+ });
81
+ }
82
+ if (this.kryptos.algorithm !== decoded.header.alg) {
83
+ throw new errors_1.JweError("Invalid token", {
84
+ data: { alg: decoded.header.alg },
85
+ debug: { expected: this.kryptos.algorithm },
86
+ });
87
+ }
88
+ const header = (0, token_header_1._parseTokenHeader)(decoded.header);
89
+ const aes = new aes_1.AesKit({
90
+ encryption,
91
+ format: "base64url",
92
+ kryptos: this.kryptos,
93
+ });
94
+ const authTag = decoded.authTag ? b64_1.B64.toBuffer(decoded.authTag) : undefined;
95
+ const content = b64_1.B64.toBuffer(decoded.content);
96
+ const hkdfSalt = header.hkdfSalt
97
+ ? b64_1.B64.toBuffer(header.hkdfSalt, "base64url")
98
+ : undefined;
99
+ const initialisationVector = b64_1.B64.toBuffer(decoded.initialisationVector);
100
+ const pbkdfIterations = header.pbkdfIterations;
101
+ const pbkdfSalt = header.pbkdfSalt
102
+ ? b64_1.B64.toBuffer(header.pbkdfSalt, "base64url")
103
+ : undefined;
104
+ const publicEncryptionKey = decoded.publicEncryptionKey
105
+ ? b64_1.B64.toBuffer(decoded.publicEncryptionKey)
106
+ : undefined;
107
+ const publicEncryptionJwk = header.publicEncryptionJwk;
108
+ if (header.critical.includes("publicEncryptionJwk") && !publicEncryptionJwk) {
109
+ throw new errors_1.JweError("Missing public encryption JWK");
110
+ }
111
+ if (header.critical.includes("hkdfSalt") && !hkdfSalt) {
112
+ throw new errors_1.JweError("Missing salt");
113
+ }
114
+ if (header.critical.includes("pbkdfIterations") && !pbkdfIterations) {
115
+ throw new errors_1.JweError("Missing iterations");
116
+ }
117
+ if (header.critical.includes("pbkdfSalt") && !pbkdfSalt) {
118
+ throw new errors_1.JweError("Missing salt");
119
+ }
120
+ const payload = aes.decrypt({
121
+ authTag,
122
+ content,
123
+ encryption,
124
+ hkdfSalt,
125
+ initialisationVector,
126
+ pbkdfIterations,
127
+ pbkdfSalt,
128
+ publicEncryptionJwk,
129
+ publicEncryptionKey,
130
+ });
131
+ this.logger.silly("Token decrypted", { payload });
132
+ return { __jwe: decoded, header, payload };
133
+ }
134
+ static decode(jwe) {
135
+ const [header, publicEncryptionKey, initialisationVector, content, authTag] = jwe.split(".");
136
+ const result = {
137
+ header: (0, token_header_1._decodeTokenHeader)(header),
138
+ publicEncryptionKey: publicEncryptionKey?.length ? publicEncryptionKey : undefined,
139
+ initialisationVector,
140
+ content,
141
+ authTag: authTag?.length ? authTag : undefined,
142
+ };
143
+ return result;
144
+ }
145
+ contentType(input) {
146
+ if (!input.startsWith("eyJ") && !input.includes(".")) {
147
+ return "text/plain";
148
+ }
149
+ const [header] = input.split(".");
150
+ return (0, token_header_1._decodeTokenHeader)(header).typ;
151
+ }
152
+ }
153
+ exports.JweKit = JweKit;
154
+ //# sourceMappingURL=JweKit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JweKit.js","sourceRoot":"","sources":["../../src/classes/JweKit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import { DecodedJws, IJwsKit, JwsKitOptions, SignJwsOptions, SignedJws, VerifiedJws } from "../types";
3
+ export declare class JwsKit implements IJwsKit {
4
+ private readonly logger;
5
+ private readonly kryptos;
6
+ constructor(options: JwsKitOptions);
7
+ sign<T extends Buffer | string>(data: T, options?: SignJwsOptions): SignedJws;
8
+ verify<T extends Buffer | string>(jws: string): VerifiedJws<T>;
9
+ static decode(jws: string): DecodedJws;
10
+ }
11
+ //# sourceMappingURL=JwsKit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JwsKit.d.ts","sourceRoot":"","sources":["../../src/classes/JwsKit.ts"],"names":[],"mappings":";AAMA,OAAO,EACL,UAAU,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,SAAS,EAET,WAAW,EAEZ,MAAM,UAAU,CAAC;AASlB,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;gBAEhB,OAAO,EAAE,aAAa;IAKlC,IAAI,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACnC,IAAI,EAAE,CAAC,EACP,OAAO,GAAE,cAAmB,GAC3B,SAAS;IAiDL,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;WAwCvD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;CAY9C"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JwsKit = void 0;
4
+ const b64_1 = require("@lindorm/b64");
5
+ const is_1 = require("@lindorm/is");
6
+ const crypto_1 = require("crypto");
7
+ const errors_1 = require("../errors");
8
+ const create_token_signature_1 = require("../utils/private/create-token-signature");
9
+ const token_header_1 = require("../utils/private/token-header");
10
+ const verify_token_signature_1 = require("../utils/private/verify-token-signature");
11
+ class JwsKit {
12
+ logger;
13
+ kryptos;
14
+ constructor(options) {
15
+ this.logger = options.logger.child(["JwsKit"]);
16
+ this.kryptos = options.kryptos;
17
+ }
18
+ sign(data, options = {}) {
19
+ const algorithm = this.kryptos.algorithm;
20
+ const jwksUri = this.kryptos.jwksUri;
21
+ const keyId = this.kryptos.id;
22
+ const objectId = options.objectId ?? (0, crypto_1.randomUUID)();
23
+ const contentType = options.contentType
24
+ ? options.contentType
25
+ : (0, is_1.isString)(data)
26
+ ? "text/plain"
27
+ : "application/buffer";
28
+ const headerOptions = {
29
+ algorithm,
30
+ contentType,
31
+ headerType: "JWS",
32
+ jwksUri,
33
+ keyId,
34
+ objectId,
35
+ };
36
+ const header = (0, token_header_1._encodeTokenHeader)(headerOptions);
37
+ this.logger.silly("Token header encoded", { header, options: headerOptions });
38
+ const payload = (0, is_1.isBuffer)(data)
39
+ ? data.toString("base64url")
40
+ : b64_1.B64.encode(data, "base64url");
41
+ this.logger.silly("Token payload encoded", { payload, options });
42
+ const signature = (0, create_token_signature_1._createTokenSignature)({
43
+ header,
44
+ payload,
45
+ kryptos: this.kryptos,
46
+ });
47
+ this.logger.silly("Token signature created", { signature });
48
+ const token = `${header}.${payload}.${signature}`;
49
+ this.logger.silly("Token signed", {
50
+ keyId,
51
+ objectId,
52
+ token,
53
+ });
54
+ return { objectId, token };
55
+ }
56
+ verify(jws) {
57
+ const decoded = JwsKit.decode(jws);
58
+ if (decoded.header.typ !== "JWS") {
59
+ throw new errors_1.JwsError("Invalid token", {
60
+ data: { typ: decoded.header.typ },
61
+ });
62
+ }
63
+ if (this.kryptos.algorithm !== decoded.header.alg) {
64
+ throw new errors_1.JwsError("Invalid token", {
65
+ data: { alg: decoded.header.alg },
66
+ debug: { expected: this.kryptos.algorithm },
67
+ });
68
+ }
69
+ const verified = (0, verify_token_signature_1._verifyTokenSignature)(this.kryptos, jws);
70
+ this.logger.silly("Token signature verified", { verified, token: jws });
71
+ if (!verified) {
72
+ throw new errors_1.JwsError("Invalid token", {
73
+ data: { verified, token: jws },
74
+ });
75
+ }
76
+ const header = (0, token_header_1._parseTokenHeader)(decoded.header);
77
+ const payload = header.contentType === "text/plain"
78
+ ? decoded.payload
79
+ : b64_1.B64.toBuffer(decoded.payload, "base64url");
80
+ this.logger.silly("Token verified", { header, payload });
81
+ return { __jws: decoded, header, payload: payload };
82
+ }
83
+ static decode(jws) {
84
+ const [header, payload, signature] = jws.split(".");
85
+ const decodedHeader = (0, token_header_1._decodeTokenHeader)(header);
86
+ const result = {
87
+ header: decodedHeader,
88
+ payload: decodedHeader.cty === "text/plain" ? b64_1.B64.toString(payload) : payload,
89
+ signature,
90
+ };
91
+ return result;
92
+ }
93
+ }
94
+ exports.JwsKit = JwsKit;
95
+ //# sourceMappingURL=JwsKit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JwsKit.js","sourceRoot":"","sources":["../../src/classes/JwsKit.ts"],"names":[],"mappings":"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"}