@furystack/security 2.1.16 → 3.0.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.
Files changed (105) hide show
  1. package/{dist → esm}/crypto-password-hasher.js +7 -10
  2. package/esm/crypto-password-hasher.js.map +1 -0
  3. package/esm/errors/index.js +4 -0
  4. package/esm/errors/index.js.map +1 -0
  5. package/esm/errors/password-complexity-error.js +11 -0
  6. package/esm/errors/password-complexity-error.js.map +1 -0
  7. package/esm/errors/unauthenticated-error.js +6 -0
  8. package/{dist → esm}/errors/unauthenticated-error.js.map +1 -1
  9. package/esm/helpers.js +12 -0
  10. package/esm/helpers.js.map +1 -0
  11. package/esm/index.js +9 -0
  12. package/esm/index.js.map +1 -0
  13. package/esm/models/index.js +6 -0
  14. package/esm/models/index.js.map +1 -0
  15. package/esm/models/password-check-result.js +2 -0
  16. package/esm/models/password-complexity-result.js +2 -0
  17. package/esm/models/password-complexity-rule.js +2 -0
  18. package/esm/models/password-credential.js +6 -0
  19. package/{dist → esm}/models/password-credential.js.map +1 -1
  20. package/esm/models/password-reset-token.js +3 -0
  21. package/{dist → esm}/models/password-reset-token.js.map +1 -1
  22. package/{dist → esm}/password-authenticator.js +20 -25
  23. package/esm/password-authenticator.js.map +1 -0
  24. package/{dist → esm}/password-complexity-rules/contains-lowercase.js +1 -5
  25. package/esm/password-complexity-rules/contains-lowercase.js.map +1 -0
  26. package/{dist → esm}/password-complexity-rules/contains-uppercase.js +1 -5
  27. package/esm/password-complexity-rules/contains-uppercase.js.map +1 -0
  28. package/esm/password-complexity-rules/index.js +5 -0
  29. package/{dist → esm}/password-complexity-rules/index.js.map +1 -1
  30. package/{dist → esm}/password-complexity-rules/max-length.js +1 -5
  31. package/esm/password-complexity-rules/max-length.js.map +1 -0
  32. package/{dist → esm}/password-complexity-rules/min-length.js +1 -5
  33. package/esm/password-complexity-rules/min-length.js.map +1 -0
  34. package/{dist → esm}/password-hasher.js +3 -6
  35. package/esm/password-hasher.js.map +1 -0
  36. package/{dist → esm}/security-policy-manager.js +6 -9
  37. package/esm/security-policy-manager.js.map +1 -0
  38. package/{dist → esm}/security-policy.js +5 -8
  39. package/esm/security-policy.js.map +1 -0
  40. package/package.json +28 -13
  41. package/src/helpers.ts +0 -1
  42. package/src/password-authenticator.spec.ts +4 -3
  43. package/src/password-authenticator.ts +1 -3
  44. package/src/password-complexity-rules/contains-lowercase.spec.ts +1 -0
  45. package/src/password-complexity-rules/contains-uppercase.spec.ts +1 -0
  46. package/src/password-complexity-rules/max-length.spec.ts +1 -0
  47. package/src/password-complexity-rules/min-length.spec.ts +1 -0
  48. package/src/security-policy-manager.spec.ts +1 -0
  49. package/types/helpers.d.ts +0 -1
  50. package/types/helpers.d.ts.map +1 -1
  51. package/types/password-authenticator.d.ts +1 -3
  52. package/types/password-authenticator.d.ts.map +1 -1
  53. package/dist/crypto-password-hasher.js.map +0 -1
  54. package/dist/errors/index.js +0 -20
  55. package/dist/errors/index.js.map +0 -1
  56. package/dist/errors/password-complexity-error.js +0 -15
  57. package/dist/errors/password-complexity-error.js.map +0 -1
  58. package/dist/errors/unauthenticated-error.js +0 -10
  59. package/dist/helpers.js +0 -17
  60. package/dist/helpers.js.map +0 -1
  61. package/dist/index.js +0 -25
  62. package/dist/index.js.map +0 -1
  63. package/dist/models/index.js +0 -22
  64. package/dist/models/index.js.map +0 -1
  65. package/dist/models/password-check-result.js +0 -3
  66. package/dist/models/password-complexity-result.js +0 -3
  67. package/dist/models/password-complexity-rule.js +0 -3
  68. package/dist/models/password-credential.js +0 -10
  69. package/dist/models/password-reset-token.js +0 -7
  70. package/dist/password-authenticator.js.map +0 -1
  71. package/dist/password-authenticator.spec.js +0 -292
  72. package/dist/password-authenticator.spec.js.map +0 -1
  73. package/dist/password-complexity-rules/contains-lowercase.js.map +0 -1
  74. package/dist/password-complexity-rules/contains-lowercase.spec.js +0 -28
  75. package/dist/password-complexity-rules/contains-lowercase.spec.js.map +0 -1
  76. package/dist/password-complexity-rules/contains-uppercase.js.map +0 -1
  77. package/dist/password-complexity-rules/contains-uppercase.spec.js +0 -28
  78. package/dist/password-complexity-rules/contains-uppercase.spec.js.map +0 -1
  79. package/dist/password-complexity-rules/index.js +0 -21
  80. package/dist/password-complexity-rules/max-length.js.map +0 -1
  81. package/dist/password-complexity-rules/max-length.spec.js +0 -17
  82. package/dist/password-complexity-rules/max-length.spec.js.map +0 -1
  83. package/dist/password-complexity-rules/min-length.js.map +0 -1
  84. package/dist/password-complexity-rules/min-length.spec.js +0 -17
  85. package/dist/password-complexity-rules/min-length.spec.js.map +0 -1
  86. package/dist/password-hasher.js.map +0 -1
  87. package/dist/security-policy-manager.js.map +0 -1
  88. package/dist/security-policy-manager.spec.js +0 -18
  89. package/dist/security-policy-manager.spec.js.map +0 -1
  90. package/dist/security-policy.js.map +0 -1
  91. package/types/password-authenticator.spec.d.ts +0 -2
  92. package/types/password-authenticator.spec.d.ts.map +0 -1
  93. package/types/password-complexity-rules/contains-lowercase.spec.d.ts +0 -2
  94. package/types/password-complexity-rules/contains-lowercase.spec.d.ts.map +0 -1
  95. package/types/password-complexity-rules/contains-uppercase.spec.d.ts +0 -2
  96. package/types/password-complexity-rules/contains-uppercase.spec.d.ts.map +0 -1
  97. package/types/password-complexity-rules/max-length.spec.d.ts +0 -2
  98. package/types/password-complexity-rules/max-length.spec.d.ts.map +0 -1
  99. package/types/password-complexity-rules/min-length.spec.d.ts +0 -2
  100. package/types/password-complexity-rules/min-length.spec.d.ts.map +0 -1
  101. package/types/security-policy-manager.spec.d.ts +0 -2
  102. package/types/security-policy-manager.spec.d.ts.map +0 -1
  103. /package/{dist → esm}/models/password-check-result.js.map +0 -0
  104. /package/{dist → esm}/models/password-complexity-result.js.map +0 -0
  105. /package/{dist → esm}/models/password-complexity-rule.js.map +0 -0
@@ -1,21 +1,18 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
6
  };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.CryptoPasswordHasher = void 0;
10
- const inject_1 = require("@furystack/inject");
11
- const crypto_1 = require("crypto");
7
+ import { Injectable } from '@furystack/inject';
8
+ import { randomBytes, pbkdf2 } from 'crypto';
12
9
  let CryptoPasswordHasher = class CryptoPasswordHasher {
13
10
  constructor() {
14
11
  this.iterations = 1000;
15
12
  this.keylen = 64;
16
13
  }
17
14
  async verifyCredential(password, { passwordHash, salt }) {
18
- const newHash = await new Promise((resolve, reject) => (0, crypto_1.pbkdf2)(password, salt, this.iterations, this.keylen, 'sha512', (err, key) => err ? reject(err) : resolve(key.toString('hex'))));
15
+ const newHash = await new Promise((resolve, reject) => pbkdf2(password, salt, this.iterations, this.keylen, 'sha512', (err, key) => err ? reject(err) : resolve(key.toString('hex'))));
19
16
  if (newHash === passwordHash) {
20
17
  return {
21
18
  isValid: true,
@@ -27,8 +24,8 @@ let CryptoPasswordHasher = class CryptoPasswordHasher {
27
24
  };
28
25
  }
29
26
  async createCredential(userName, password) {
30
- const salt = (0, crypto_1.randomBytes)(16).toString('hex');
31
- const passwordHash = await new Promise((resolve, reject) => (0, crypto_1.pbkdf2)(password, salt, this.iterations, this.keylen, 'sha512', (err, key) => err ? reject(err) : resolve(key.toString('hex'))));
27
+ const salt = randomBytes(16).toString('hex');
28
+ const passwordHash = await new Promise((resolve, reject) => pbkdf2(password, salt, this.iterations, this.keylen, 'sha512', (err, key) => err ? reject(err) : resolve(key.toString('hex'))));
32
29
  return {
33
30
  userName,
34
31
  salt,
@@ -38,7 +35,7 @@ let CryptoPasswordHasher = class CryptoPasswordHasher {
38
35
  }
39
36
  };
40
37
  CryptoPasswordHasher = __decorate([
41
- (0, inject_1.Injectable)({ lifetime: 'singleton' })
38
+ Injectable({ lifetime: 'singleton' })
42
39
  ], CryptoPasswordHasher);
43
- exports.CryptoPasswordHasher = CryptoPasswordHasher;
40
+ export { CryptoPasswordHasher };
44
41
  //# sourceMappingURL=crypto-password-hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-password-hasher.js","sourceRoot":"","sources":["../src/crypto-password-hasher.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI5C,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAAjC;QACmB,eAAU,GAAG,IAAI,CAAA;QACjB,WAAM,GAAG,EAAE,CAAA;IAmC9B,CAAC;IAjCQ,KAAK,CAAC,gBAAgB,CAC3B,QAAgB,EAChB,EAAE,YAAY,EAAE,IAAI,EAAsB;QAE1C,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACpD,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAC1E,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACjD,CACF,CAAA;QACD,IAAI,OAAO,KAAK,YAAY,EAAE;YAC5B,OAAO;gBACL,OAAO,EAAE,IAAI;aACd,CAAA;SACF;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,uBAAuB;SAChC,CAAA;IACH,CAAC;IACM,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,QAAgB;QAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACjE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAC1E,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACjD,CACF,CAAA;QACD,OAAO;YACL,QAAQ;YACR,IAAI;YACJ,YAAY;YACZ,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAA;IACH,CAAC;CACF,CAAA;AArCY,oBAAoB;IADhC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,oBAAoB,CAqChC;SArCY,oBAAoB"}
@@ -0,0 +1,4 @@
1
+ export * from './password-complexity-error';
2
+ export * from './unauthenticated-error';
3
+ export * from './password-complexity-error';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,11 @@
1
+ export class PasswordComplexityError extends Error {
2
+ /**
3
+ * @param result A detailed error result array
4
+ * @param message The Error message
5
+ */
6
+ constructor(result, message) {
7
+ super(message);
8
+ this.result = result;
9
+ }
10
+ }
11
+ //# sourceMappingURL=password-complexity-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-complexity-error.js","sourceRoot":"","sources":["../../src/errors/password-complexity-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD;;;OAGG;IACH,YAA4B,MAAgD,EAAE,OAAgB;QAC5F,KAAK,CAAC,OAAO,CAAC,CAAA;QADY,WAAM,GAAN,MAAM,CAA0C;IAE5E,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Error that can be thrown if an authentication is required but not provided
3
+ */
4
+ export class UnauthenticatedError extends Error {
5
+ }
6
+ //# sourceMappingURL=unauthenticated-error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unauthenticated-error.js","sourceRoot":"","sources":["../../src/errors/unauthenticated-error.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,oBAAqB,SAAQ,KAAK;CAAG;AAAlD,oDAAkD"}
1
+ {"version":3,"file":"unauthenticated-error.js","sourceRoot":"","sources":["../../src/errors/unauthenticated-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;CAAG"}
package/esm/helpers.js ADDED
@@ -0,0 +1,12 @@
1
+ import { SecurityPolicy } from './security-policy';
2
+ /**
3
+ * Sets up the @furystack/security with the provided settings
4
+ * @param injector The Injector instance
5
+ * @param {Partial<SecurityPolicy>} policy The security policy to use
6
+ */
7
+ export const usePasswordPolicy = (injector, policy) => {
8
+ const plainPolicy = new SecurityPolicy();
9
+ policy && Object.assign(plainPolicy, policy);
10
+ injector.setExplicitInstance(plainPolicy, SecurityPolicy);
11
+ };
12
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAkB,EAAE,MAAgC,EAAE,EAAE;IACxF,MAAM,WAAW,GAAG,IAAI,cAAc,EAAE,CAAA;IACxC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;AAC3D,CAAC,CAAA"}
package/esm/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export * from './crypto-password-hasher';
2
+ export * from './errors';
3
+ export * from './models';
4
+ export * from './password-authenticator';
5
+ export * from './password-complexity-rules';
6
+ export * from './password-hasher';
7
+ export * from './security-policy-manager';
8
+ export * from './helpers';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AAEzC,cAAc,WAAW,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './password-check-result';
2
+ export * from './password-complexity-result';
3
+ export * from './password-complexity-rule';
4
+ export * from './password-credential';
5
+ export * from './password-reset-token';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=password-check-result.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=password-complexity-result.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=password-complexity-rule.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Entry that stores credential info for password login
3
+ */
4
+ export class PasswordCredential {
5
+ }
6
+ //# sourceMappingURL=password-credential.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"password-credential.js","sourceRoot":"","sources":["../../src/models/password-credential.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,kBAAkB;CAmB9B;AAnBD,gDAmBC"}
1
+ {"version":3,"file":"password-credential.js","sourceRoot":"","sources":["../../src/models/password-credential.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,kBAAkB;CAmB9B"}
@@ -0,0 +1,3 @@
1
+ export class PasswordResetToken {
2
+ }
3
+ //# sourceMappingURL=password-reset-token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"password-reset-token.js","sourceRoot":"","sources":["../../src/models/password-reset-token.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;CAa9B;AAbD,gDAaC"}
1
+ {"version":3,"file":"password-reset-token.js","sourceRoot":"","sources":["../../src/models/password-reset-token.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;CAa9B"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -8,18 +7,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
7
  var __metadata = (this && this.__metadata) || function (k, v) {
9
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
9
  };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PasswordAuthenticator = void 0;
13
- const core_1 = require("@furystack/core");
14
- const inject_1 = require("@furystack/inject");
15
- const security_policy_manager_1 = require("./security-policy-manager");
16
- const errors_1 = require("./errors");
17
- const models_1 = require("./models");
18
- const password_complexity_error_1 = require("./errors/password-complexity-error");
10
+ import { StoreManager } from '@furystack/core';
11
+ import { Injectable, Injected, Injector } from '@furystack/inject';
12
+ import { SecurityPolicyManager } from './security-policy-manager';
13
+ import { UnauthenticatedError } from './errors';
14
+ import { PasswordCredential, PasswordResetToken } from './models';
15
+ import { PasswordComplexityError } from './errors/password-complexity-error';
19
16
  let PasswordAuthenticator = class PasswordAuthenticator {
20
17
  constructor() {
21
- this.getPasswordStore = () => this.injector.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
22
- this.getTokenStore = () => this.injector.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordResetToken, 'token');
18
+ this.getPasswordStore = () => this.injector.getInstance(StoreManager).getStoreFor(PasswordCredential, 'userName');
19
+ this.getTokenStore = () => this.injector.getInstance(StoreManager).getStoreFor(PasswordResetToken, 'token');
23
20
  this.getHasher = () => this.injector.getInstance(this.policyManager.policy.hasher);
24
21
  }
25
22
  /**
@@ -46,8 +43,7 @@ let PasswordAuthenticator = class PasswordAuthenticator {
46
43
  }
47
44
  /**
48
45
  *
49
- * Sets the password for the specific user
50
- *
46
+ *Sets the password for the specific user
51
47
  * @param userName The user to set the password for
52
48
  * @param lastPassword The last user password
53
49
  * @param plainPassword The password as a plain string
@@ -55,11 +51,11 @@ let PasswordAuthenticator = class PasswordAuthenticator {
55
51
  async setPasswordForUser(userName, lastPassword, plainPassword) {
56
52
  const complexityResult = await this.policyManager.matchPasswordComplexityRules(plainPassword);
57
53
  if (!complexityResult.match) {
58
- throw new password_complexity_error_1.PasswordComplexityError(complexityResult.errors);
54
+ throw new PasswordComplexityError(complexityResult.errors);
59
55
  }
60
56
  const lastResult = await this.checkPasswordForUser(userName, lastPassword);
61
57
  if (!lastResult.isValid) {
62
- throw new errors_1.UnauthenticatedError();
58
+ throw new UnauthenticatedError();
63
59
  }
64
60
  const store = this.getPasswordStore();
65
61
  const newCredential = await this.getHasher().createCredential(userName, plainPassword);
@@ -69,22 +65,21 @@ let PasswordAuthenticator = class PasswordAuthenticator {
69
65
  }
70
66
  /**
71
67
  * Resets the password with a Password Reset token entry
72
- *
73
68
  * @param resetToken The Reset Token value
74
69
  * @param plainPassword The new password in plain string
75
70
  */
76
71
  async resetPasswordForUser(resetToken, plainPassword) {
77
72
  const token = await this.getTokenStore().get(resetToken);
78
73
  if (!token) {
79
- throw new errors_1.UnauthenticatedError();
74
+ throw new UnauthenticatedError();
80
75
  }
81
76
  if (this.policyManager.hasTokenExpired(token)) {
82
77
  await this.getTokenStore().remove(resetToken); // clean up token
83
- throw new errors_1.UnauthenticatedError();
78
+ throw new UnauthenticatedError();
84
79
  }
85
80
  const complexityResult = await this.policyManager.matchPasswordComplexityRules(plainPassword);
86
81
  if (!complexityResult.match) {
87
- throw new password_complexity_error_1.PasswordComplexityError(complexityResult.errors);
82
+ throw new PasswordComplexityError(complexityResult.errors);
88
83
  }
89
84
  const newCredential = await this.getHasher().createCredential(token.userName, plainPassword);
90
85
  const store = this.getPasswordStore();
@@ -94,15 +89,15 @@ let PasswordAuthenticator = class PasswordAuthenticator {
94
89
  }
95
90
  };
96
91
  __decorate([
97
- (0, inject_1.Injected)(inject_1.Injector),
98
- __metadata("design:type", inject_1.Injector)
92
+ Injected(Injector),
93
+ __metadata("design:type", Injector)
99
94
  ], PasswordAuthenticator.prototype, "injector", void 0);
100
95
  __decorate([
101
- (0, inject_1.Injected)(security_policy_manager_1.SecurityPolicyManager),
102
- __metadata("design:type", security_policy_manager_1.SecurityPolicyManager)
96
+ Injected(SecurityPolicyManager),
97
+ __metadata("design:type", SecurityPolicyManager)
103
98
  ], PasswordAuthenticator.prototype, "policyManager", void 0);
104
99
  PasswordAuthenticator = __decorate([
105
- (0, inject_1.Injectable)({ lifetime: 'singleton' })
100
+ Injectable({ lifetime: 'singleton' })
106
101
  ], PasswordAuthenticator);
107
- exports.PasswordAuthenticator = PasswordAuthenticator;
102
+ export { PasswordAuthenticator };
108
103
  //# sourceMappingURL=password-authenticator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-authenticator.js","sourceRoot":"","sources":["../src/password-authenticator.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createContainsLowercasePolicy = void 0;
4
1
  /**
5
2
  * @param lowerCaseCount The minimum lower case characters length
6
3
  * @returns The created Password Policy object
7
4
  */
8
- const createContainsLowercasePolicy = (lowerCaseCount) => ({
5
+ export const createContainsLowercasePolicy = (lowerCaseCount) => ({
9
6
  name: 'containsLowercase',
10
7
  check: async (passwordString) => {
11
8
  const actualLowerCaseCount = passwordString.length >= lowerCaseCount
@@ -25,5 +22,4 @@ const createContainsLowercasePolicy = (lowerCaseCount) => ({
25
22
  };
26
23
  },
27
24
  });
28
- exports.createContainsLowercasePolicy = createContainsLowercasePolicy;
29
25
  //# sourceMappingURL=contains-lowercase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contains-lowercase.js","sourceRoot":"","sources":["../../src/password-complexity-rules/contains-lowercase.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,cAAsB,EAA0B,EAAE,CAAC,CAAC;IAChG,IAAI,EAAE,mBAA4B;IAClC,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,oBAAoB,GACxB,cAAc,CAAC,MAAM,IAAI,cAAc;YACrC,CAAC,CAAC,cAAc;iBACX,SAAS,CAAC,KAAK,CAAC;iBAChB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;iBAC9B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM;YAClC,CAAC,CAAC,CAAC,CAAA;QACP,MAAM,OAAO,GAAG,oBAAoB,IAAI,cAAc,CAAA;QACtD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO;YACL,OAAO;YACP,OAAO,EAAE,wCAAwC,cAAc,wBAAwB;YACvF,IAAI,EAAE,mBAAmB;SAC1B,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createContainsUppercasePolicy = void 0;
4
1
  /**
5
2
  * @param upperCaseCount The minimum upper case characters length
6
3
  * @returns The created Password Policy object
7
4
  */
8
- const createContainsUppercasePolicy = (upperCaseCount) => ({
5
+ export const createContainsUppercasePolicy = (upperCaseCount) => ({
9
6
  name: 'containsUppercase',
10
7
  check: async (passwordString) => {
11
8
  const actualUpperCaseCount = passwordString
@@ -23,5 +20,4 @@ const createContainsUppercasePolicy = (upperCaseCount) => ({
23
20
  };
24
21
  },
25
22
  });
26
- exports.createContainsUppercasePolicy = createContainsUppercasePolicy;
27
23
  //# sourceMappingURL=contains-uppercase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contains-uppercase.js","sourceRoot":"","sources":["../../src/password-complexity-rules/contains-uppercase.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,cAAsB,EAA0B,EAAE,CAAC,CAAC;IAChG,IAAI,EAAE,mBAA4B;IAClC,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,oBAAoB,GAAG,cAAc;aACxC,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;QAChC,MAAM,OAAO,GAAG,oBAAoB,IAAI,cAAc,CAAA;QACtD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO;YACL,OAAO;YACP,OAAO,EAAE,wCAAwC,cAAc,wBAAwB;YACvF,IAAI,EAAE,mBAAmB;SAC1B,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './contains-lowercase';
2
+ export * from './contains-uppercase';
3
+ export * from './max-length';
4
+ export * from './min-length';
5
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/password-complexity-rules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAoC;AACpC,uDAAoC;AACpC,+CAA4B;AAC5B,+CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/password-complexity-rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA"}
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMaxLengthComplexityRule = void 0;
4
1
  /**
5
2
  * @param maxLength The maximum password length
6
3
  * @returns The created Password Policy object
7
4
  */
8
- const createMaxLengthComplexityRule = (maxLength) => ({
5
+ export const createMaxLengthComplexityRule = (maxLength) => ({
9
6
  name: 'maxLength',
10
7
  check: async (passwordString) => {
11
8
  const success = passwordString.length <= maxLength;
@@ -15,5 +12,4 @@ const createMaxLengthComplexityRule = (maxLength) => ({
15
12
  return { success, message: `The password has to be maximum ${maxLength} character length`, rule: 'maxLength' };
16
13
  },
17
14
  });
18
- exports.createMaxLengthComplexityRule = createMaxLengthComplexityRule;
19
15
  //# sourceMappingURL=max-length.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-length.js","sourceRoot":"","sources":["../../src/password-complexity-rules/max-length.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,SAAiB,EAA0B,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,WAAoB;IAC1B,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,IAAI,SAAS,CAAA;QAClD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kCAAkC,SAAS,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAChH,CAAC;CACF,CAAC,CAAA"}
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMinLengthComplexityRule = void 0;
4
1
  /**
5
2
  * @param minLength The minimum password length
6
3
  * @returns The created Password Policy object
7
4
  */
8
- const createMinLengthComplexityRule = (minLength) => ({
5
+ export const createMinLengthComplexityRule = (minLength) => ({
9
6
  name: 'minLength',
10
7
  check: async (passwordString) => {
11
8
  const success = passwordString.length >= minLength;
@@ -15,5 +12,4 @@ const createMinLengthComplexityRule = (minLength) => ({
15
12
  return { success, message: `The password has to be at least ${minLength} character length`, rule: 'minLength' };
16
13
  },
17
14
  });
18
- exports.createMinLengthComplexityRule = createMinLengthComplexityRule;
19
15
  //# sourceMappingURL=min-length.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"min-length.js","sourceRoot":"","sources":["../../src/password-complexity-rules/min-length.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,SAAiB,EAA0B,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,WAAoB;IAC1B,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,IAAI,SAAS,CAAA;QAClD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mCAAmC,SAAS,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACjH,CAAC;CACF,CAAC,CAAA"}
@@ -1,13 +1,10 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
6
  };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.PasswordHasher = void 0;
10
- const inject_1 = require("@furystack/inject");
7
+ import { Injectable } from '@furystack/inject';
11
8
  let PasswordHasher = class PasswordHasher {
12
9
  createCredential(_userName, _password) {
13
10
  throw Error('Set up hasher - TODO');
@@ -17,7 +14,7 @@ let PasswordHasher = class PasswordHasher {
17
14
  }
18
15
  };
19
16
  PasswordHasher = __decorate([
20
- (0, inject_1.Injectable)({ lifetime: 'singleton' })
17
+ Injectable({ lifetime: 'singleton' })
21
18
  ], PasswordHasher);
22
- exports.PasswordHasher = PasswordHasher;
19
+ export { PasswordHasher };
23
20
  //# sourceMappingURL=password-hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-hasher.js","sourceRoot":"","sources":["../src/password-hasher.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAI9C,IAAa,cAAc,GAA3B,MAAa,cAAc;IAClB,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;QAC1D,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IAEM,gBAAgB,CAAC,SAAiB,EAAE,WAA+B;QACxE,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF,CAAA;AARY,cAAc;IAD1B,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,cAAc,CAQ1B;SARY,cAAc"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -8,10 +7,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
7
  var __metadata = (this && this.__metadata) || function (k, v) {
9
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
9
  };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SecurityPolicyManager = void 0;
13
- const inject_1 = require("@furystack/inject");
14
- const security_policy_1 = require("./security-policy");
10
+ import { Injectable, Injected } from '@furystack/inject';
11
+ import { SecurityPolicy } from './security-policy';
15
12
  let SecurityPolicyManager = class SecurityPolicyManager {
16
13
  /**
17
14
  * @param password The Plain password string
@@ -50,11 +47,11 @@ let SecurityPolicyManager = class SecurityPolicyManager {
50
47
  }
51
48
  };
52
49
  __decorate([
53
- (0, inject_1.Injected)(security_policy_1.SecurityPolicy),
54
- __metadata("design:type", security_policy_1.SecurityPolicy)
50
+ Injected(SecurityPolicy),
51
+ __metadata("design:type", SecurityPolicy)
55
52
  ], SecurityPolicyManager.prototype, "policy", void 0);
56
53
  SecurityPolicyManager = __decorate([
57
- (0, inject_1.Injectable)({ lifetime: 'singleton' })
54
+ Injectable({ lifetime: 'singleton' })
58
55
  ], SecurityPolicyManager);
59
- exports.SecurityPolicyManager = SecurityPolicyManager;
56
+ export { SecurityPolicyManager };
60
57
  //# sourceMappingURL=security-policy-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-policy-manager.js","sourceRoot":"","sources":["../src/security-policy-manager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGlD,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAChC;;;OAGG;IACI,KAAK,CAAC,4BAA4B,CAAC,QAAgB;QACxD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAA;QACxD,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,OAAO;gBACL,KAAK,EAAE,KAAc;gBACrB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAGnF;aACH,CAAA;SACF;QAED,OAAO;YACL,KAAK,EAAE,IAAa;SACrB,CAAA;IACH,CAAC;IAEM,kBAAkB,CAAC,UAA8B;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;YACvC,OAAO,KAAK,CAAA;SACb;QACD,MAAM,oBAAoB,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;QAC9D,oBAAoB,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACjG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,OAAO,GAAG,GAAG,oBAAoB,CAAA;IACnC,CAAC;IAEM,eAAe,CAAC,KAAyB;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YAC5C,OAAO,KAAK,CAAA;SACb;QACD,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACjD,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAA;QAClG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,OAAO,GAAG,GAAG,eAAe,CAAA;IAC9B,CAAC;CAIF,CAAA;AADiB;IADf,QAAQ,CAAC,cAAc,CAAC;8BACA,cAAc;qDAAA;AA5C5B,qBAAqB;IADjC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,qBAAqB,CA6CjC;SA7CY,qBAAqB"}
@@ -1,20 +1,17 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
6
  };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SecurityPolicy = void 0;
10
- const inject_1 = require("@furystack/inject");
11
- const crypto_password_hasher_1 = require("./crypto-password-hasher");
7
+ import { Injectable } from '@furystack/inject';
8
+ import { CryptoPasswordHasher } from './crypto-password-hasher';
12
9
  let SecurityPolicy = class SecurityPolicy {
13
10
  constructor() {
14
11
  /**
15
12
  * A Hasher instance for password hash generation
16
13
  */
17
- this.hasher = crypto_password_hasher_1.CryptoPasswordHasher;
14
+ this.hasher = CryptoPasswordHasher;
18
15
  /**
19
16
  * Array of password complexity rules to apply
20
17
  */
@@ -34,7 +31,7 @@ let SecurityPolicy = class SecurityPolicy {
34
31
  }
35
32
  };
36
33
  SecurityPolicy = __decorate([
37
- (0, inject_1.Injectable)({ lifetime: 'singleton' })
34
+ Injectable({ lifetime: 'singleton' })
38
35
  ], SecurityPolicy);
39
- exports.SecurityPolicy = SecurityPolicy;
36
+ export { SecurityPolicy };
40
37
  //# sourceMappingURL=security-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-policy.js","sourceRoot":"","sources":["../src/security-policy.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAK/D,IAAa,cAAc,GAA3B,MAAa,cAAc;IAA3B;QACE;;WAEG;QACH,WAAM,GAAkC,oBAAoB,CAAA;QAE5D;;WAEG;QACH,4BAAuB,GAA6B,EAAE,CAAA;QAEtD;;WAEG;QACH,2BAAsB,GAAG,CAAC,CAAA;QAE1B;;WAEG;QACH,wBAAmB,GAAuB,OAAO,CAAA,CAAC,4CAA4C;QAE9F;;WAEG;QACH,gCAA2B,GAAG,EAAE,CAAA;IAClC,CAAC;CAAA,CAAA;AAzBY,cAAc;IAD1B,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,cAAc,CAyB1B;SAzBY,cAAc"}
package/package.json CHANGED
@@ -1,18 +1,32 @@
1
1
  {
2
2
  "name": "@furystack/security",
3
- "version": "2.1.16",
3
+ "version": "3.0.1",
4
4
  "description": "Security, password management and authorization related stuff for FuryStack",
5
- "main": "dist/index.js",
6
- "typings": "./types/index.d.ts",
7
- "files": [
8
- "dist",
9
- "types",
10
- "src"
11
- ],
5
+ "type": "module",
12
6
  "scripts": {
13
7
  "fix:prettier": "prettier \"{,!(dist|temp)/**/}*.{ts,tsx}\" --write",
8
+ "build:es6": "tsc --outDir ./esm",
14
9
  "build": "tsc -b"
15
10
  },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./esm/index.js",
14
+ "types": "./types/index.d.ts"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "typesVersions": {
19
+ "*": {
20
+ "*": [
21
+ "types/*"
22
+ ]
23
+ }
24
+ },
25
+ "files": [
26
+ "esm",
27
+ "types",
28
+ "src"
29
+ ],
16
30
  "repository": {
17
31
  "type": "git",
18
32
  "url": "https://github.com/furystack/furystack.git"
@@ -30,13 +44,14 @@
30
44
  "url": "https://github.com/furystack/furystack/issues"
31
45
  },
32
46
  "dependencies": {
33
- "@furystack/core": "^11.3.1",
34
- "@furystack/inject": "^7.1.9",
35
- "@furystack/utils": "^3.1.8"
47
+ "@furystack/core": "^12.0.1",
48
+ "@furystack/inject": "^8.0.1",
49
+ "@furystack/utils": "^4.0.1"
36
50
  },
37
51
  "homepage": "https://github.com/furystack/furystack",
38
52
  "devDependencies": {
39
- "@types/jest": "^29.5.0",
40
- "@types/node": "^18.15.11"
53
+ "@types/node": "^18.15.11",
54
+ "typescript": "^5.0.4",
55
+ "vitest": "^0.30.1"
41
56
  }
42
57
  }
package/src/helpers.ts CHANGED
@@ -3,7 +3,6 @@ import { SecurityPolicy } from './security-policy'
3
3
 
4
4
  /**
5
5
  * Sets up the @furystack/security with the provided settings
6
- *
7
6
  * @param injector The Injector instance
8
7
  * @param {Partial<SecurityPolicy>} policy The security policy to use
9
8
  */
@@ -9,6 +9,7 @@ import { createMinLengthComplexityRule } from './password-complexity-rules'
9
9
  import { SecurityPolicyManager } from './security-policy-manager'
10
10
  import { PasswordComplexityError, UnauthenticatedError } from './errors'
11
11
  import { randomBytes } from 'crypto'
12
+ import { describe, it, expect, vi } from 'vitest'
12
13
 
13
14
  const randomString = () => randomBytes(32).toString('hex')
14
15
 
@@ -138,7 +139,7 @@ describe('PasswordAuthenticator', () => {
138
139
  const hasher = authenticator.getHasher()
139
140
  const passwordStore = i.getInstance(StoreManager).getStoreFor(PasswordCredential, 'userName')
140
141
  const policyManager = i.getInstance(SecurityPolicyManager)
141
- const pmSpy = jest.spyOn(policyManager, 'matchPasswordComplexityRules')
142
+ const pmSpy = vi.spyOn(policyManager, 'matchPasswordComplexityRules')
142
143
 
143
144
  const entry = await hasher.createCredential(userName, lastPassword)
144
145
 
@@ -174,7 +175,7 @@ describe('PasswordAuthenticator', () => {
174
175
  const hasher = authenticator.getHasher()
175
176
  const passwordStore = i.getInstance(StoreManager).getStoreFor(PasswordCredential, 'userName')
176
177
  const policyManager = i.getInstance(SecurityPolicyManager)
177
- const pmSpy = jest.spyOn(policyManager, 'matchPasswordComplexityRules')
178
+ const pmSpy = vi.spyOn(policyManager, 'matchPasswordComplexityRules')
178
179
 
179
180
  const entry = await hasher.createCredential(userName, lastPassword)
180
181
 
@@ -214,7 +215,7 @@ describe('PasswordAuthenticator', () => {
214
215
  const hasher = authenticator.getHasher()
215
216
  const passwordStore = i.getInstance(StoreManager).getStoreFor(PasswordCredential, 'userName')
216
217
  const policyManager = i.getInstance(SecurityPolicyManager)
217
- const pmSpy = jest.spyOn(policyManager, 'matchPasswordComplexityRules')
218
+ const pmSpy = vi.spyOn(policyManager, 'matchPasswordComplexityRules')
218
219
 
219
220
  const entry = await hasher.createCredential(userName, lastPassword)
220
221