coding-agent-benchmarks 0.3.0 → 0.3.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 (145) hide show
  1. package/package.json +1 -1
  2. package/dist/User.d.ts +0 -10
  3. package/dist/User.d.ts.map +0 -1
  4. package/dist/User.js +0 -3
  5. package/dist/User.js.map +0 -1
  6. package/dist/config/defaultScenarios.d.ts +0 -6
  7. package/dist/config/defaultScenarios.d.ts.map +0 -1
  8. package/dist/config/defaultScenarios.js +0 -209
  9. package/dist/config/defaultScenarios.js.map +0 -1
  10. package/dist/config/environment.d.ts +0 -51
  11. package/dist/config/environment.d.ts.map +0 -1
  12. package/dist/config/environment.js +0 -57
  13. package/dist/config/environment.js.map +0 -1
  14. package/dist/config/parser.d.ts +0 -6
  15. package/dist/config/parser.d.ts.map +0 -1
  16. package/dist/config/parser.js +0 -87
  17. package/dist/config/parser.js.map +0 -1
  18. package/dist/examples/file-upload-example.d.ts +0 -2
  19. package/dist/examples/file-upload-example.d.ts.map +0 -1
  20. package/dist/examples/file-upload-example.js +0 -37
  21. package/dist/examples/file-upload-example.js.map +0 -1
  22. package/dist/examples/typedEventEmitterExample.d.ts +0 -5
  23. package/dist/examples/typedEventEmitterExample.d.ts.map +0 -1
  24. package/dist/examples/typedEventEmitterExample.js +0 -44
  25. package/dist/examples/typedEventEmitterExample.js.map +0 -1
  26. package/dist/registration/database.d.ts +0 -13
  27. package/dist/registration/database.d.ts.map +0 -1
  28. package/dist/registration/database.js +0 -35
  29. package/dist/registration/database.js.map +0 -1
  30. package/dist/registration/email.d.ts +0 -17
  31. package/dist/registration/email.d.ts.map +0 -1
  32. package/dist/registration/email.js +0 -40
  33. package/dist/registration/email.js.map +0 -1
  34. package/dist/registration/emailService.d.ts +0 -13
  35. package/dist/registration/emailService.d.ts.map +0 -1
  36. package/dist/registration/emailService.js +0 -26
  37. package/dist/registration/emailService.js.map +0 -1
  38. package/dist/registration/example.d.ts +0 -2
  39. package/dist/registration/example.d.ts.map +0 -1
  40. package/dist/registration/example.js +0 -37
  41. package/dist/registration/example.js.map +0 -1
  42. package/dist/registration/index.d.ts +0 -7
  43. package/dist/registration/index.d.ts.map +0 -1
  44. package/dist/registration/index.js +0 -15
  45. package/dist/registration/index.js.map +0 -1
  46. package/dist/registration/password.d.ts +0 -3
  47. package/dist/registration/password.d.ts.map +0 -1
  48. package/dist/registration/password.js +0 -27
  49. package/dist/registration/password.js.map +0 -1
  50. package/dist/registration/passwordHasher.d.ts +0 -8
  51. package/dist/registration/passwordHasher.d.ts.map +0 -1
  52. package/dist/registration/passwordHasher.js +0 -39
  53. package/dist/registration/passwordHasher.js.map +0 -1
  54. package/dist/registration/registrationService.d.ts +0 -14
  55. package/dist/registration/registrationService.d.ts.map +0 -1
  56. package/dist/registration/registrationService.js +0 -49
  57. package/dist/registration/registrationService.js.map +0 -1
  58. package/dist/registration/service.d.ts +0 -14
  59. package/dist/registration/service.d.ts.map +0 -1
  60. package/dist/registration/service.js +0 -48
  61. package/dist/registration/service.js.map +0 -1
  62. package/dist/registration/types.d.ts +0 -22
  63. package/dist/registration/types.d.ts.map +0 -1
  64. package/dist/registration/types.js +0 -3
  65. package/dist/registration/types.js.map +0 -1
  66. package/dist/registration/userRepository.d.ts +0 -12
  67. package/dist/registration/userRepository.d.ts.map +0 -1
  68. package/dist/registration/userRepository.js +0 -28
  69. package/dist/registration/userRepository.js.map +0 -1
  70. package/dist/registration/validator.d.ts +0 -7
  71. package/dist/registration/validator.d.ts.map +0 -1
  72. package/dist/registration/validator.js +0 -44
  73. package/dist/registration/validator.js.map +0 -1
  74. package/dist/registration/validators.d.ts +0 -5
  75. package/dist/registration/validators.d.ts.map +0 -1
  76. package/dist/registration/validators.js +0 -60
  77. package/dist/registration/validators.js.map +0 -1
  78. package/dist/sync/cache.d.ts +0 -14
  79. package/dist/sync/cache.d.ts.map +0 -1
  80. package/dist/sync/cache.js +0 -73
  81. package/dist/sync/cache.js.map +0 -1
  82. package/dist/sync/index.d.ts +0 -7
  83. package/dist/sync/index.d.ts.map +0 -1
  84. package/dist/sync/index.js +0 -20
  85. package/dist/sync/index.js.map +0 -1
  86. package/dist/sync/resolver.d.ts +0 -12
  87. package/dist/sync/resolver.d.ts.map +0 -1
  88. package/dist/sync/resolver.js +0 -43
  89. package/dist/sync/resolver.js.map +0 -1
  90. package/dist/sync/service.d.ts +0 -20
  91. package/dist/sync/service.d.ts.map +0 -1
  92. package/dist/sync/service.js +0 -162
  93. package/dist/sync/service.js.map +0 -1
  94. package/dist/sync/source.d.ts +0 -21
  95. package/dist/sync/source.d.ts.map +0 -1
  96. package/dist/sync/source.js +0 -58
  97. package/dist/sync/source.js.map +0 -1
  98. package/dist/sync/types.d.ts +0 -56
  99. package/dist/sync/types.d.ts.map +0 -1
  100. package/dist/sync/types.js +0 -21
  101. package/dist/sync/types.js.map +0 -1
  102. package/dist/utils/cache.d.ts +0 -11
  103. package/dist/utils/cache.d.ts.map +0 -1
  104. package/dist/utils/cache.js +0 -28
  105. package/dist/utils/cache.js.map +0 -1
  106. package/dist/utils/config-merger.d.ts +0 -11
  107. package/dist/utils/config-merger.d.ts.map +0 -1
  108. package/dist/utils/config-merger.js +0 -36
  109. package/dist/utils/config-merger.js.map +0 -1
  110. package/dist/utils/configParser.d.ts +0 -9
  111. package/dist/utils/configParser.d.ts.map +0 -1
  112. package/dist/utils/configParser.js +0 -51
  113. package/dist/utils/configParser.js.map +0 -1
  114. package/dist/utils/database-providers.d.ts +0 -23
  115. package/dist/utils/database-providers.d.ts.map +0 -1
  116. package/dist/utils/database-providers.js +0 -48
  117. package/dist/utils/database-providers.js.map +0 -1
  118. package/dist/utils/fetchUserData.d.ts +0 -11
  119. package/dist/utils/fetchUserData.d.ts.map +0 -1
  120. package/dist/utils/fetchUserData.js +0 -31
  121. package/dist/utils/fetchUserData.js.map +0 -1
  122. package/dist/utils/file-upload-handler.d.ts +0 -46
  123. package/dist/utils/file-upload-handler.d.ts.map +0 -1
  124. package/dist/utils/file-upload-handler.js +0 -110
  125. package/dist/utils/file-upload-handler.js.map +0 -1
  126. package/dist/utils/statistics.d.ts +0 -9
  127. package/dist/utils/statistics.d.ts.map +0 -1
  128. package/dist/utils/statistics.js +0 -26
  129. package/dist/utils/statistics.js.map +0 -1
  130. package/dist/utils/storage-providers.d.ts +0 -24
  131. package/dist/utils/storage-providers.d.ts.map +0 -1
  132. package/dist/utils/storage-providers.js +0 -38
  133. package/dist/utils/storage-providers.js.map +0 -1
  134. package/dist/utils/transformArray.d.ts +0 -18
  135. package/dist/utils/transformArray.d.ts.map +0 -1
  136. package/dist/utils/transformArray.js +0 -21
  137. package/dist/utils/transformArray.js.map +0 -1
  138. package/dist/utils/userUtils.d.ts +0 -9
  139. package/dist/utils/userUtils.d.ts.map +0 -1
  140. package/dist/utils/userUtils.js +0 -14
  141. package/dist/utils/userUtils.js.map +0 -1
  142. /package/dist/utils/{typedEventEmitter.d.ts → TypedEventEmitter.d.ts} +0 -0
  143. /package/dist/utils/{typedEventEmitter.d.ts.map → TypedEventEmitter.d.ts.map} +0 -0
  144. /package/dist/utils/{typedEventEmitter.js → TypedEventEmitter.js} +0 -0
  145. /package/dist/utils/{typedEventEmitter.js.map → TypedEventEmitter.js.map} +0 -0
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryUserDatabase = void 0;
4
- const crypto_1 = require("crypto");
5
- class InMemoryUserDatabase {
6
- constructor() {
7
- this.users = new Map();
8
- }
9
- async findByEmail(email) {
10
- const normalizedEmail = email.toLowerCase();
11
- for (const user of this.users.values()) {
12
- if (user.email.toLowerCase() === normalizedEmail) {
13
- return user;
14
- }
15
- }
16
- return null;
17
- }
18
- async save(userData) {
19
- const user = {
20
- ...userData,
21
- id: (0, crypto_1.randomBytes)(16).toString('hex'),
22
- createdAt: new Date(),
23
- };
24
- this.users.set(user.id, user);
25
- return user;
26
- }
27
- getAllUsers() {
28
- return Array.from(this.users.values());
29
- }
30
- clear() {
31
- this.users.clear();
32
- }
33
- }
34
- exports.InMemoryUserDatabase = InMemoryUserDatabase;
35
- //# sourceMappingURL=database.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/registration/database.ts"],"names":[],"mappings":";;;AACA,mCAAqC;AAOrC,MAAa,oBAAoB;IAAjC;QACU,UAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAgC/C,CAAC;IA9BC,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAwC;QACjD,MAAM,IAAI,GAAS;YACjB,GAAG,QAAQ;YACX,EAAE,EAAE,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAjCD,oDAiCC"}
@@ -1,17 +0,0 @@
1
- import { User } from './types';
2
- export interface EmailService {
3
- sendWelcomeEmail(user: User): Promise<void>;
4
- }
5
- export declare class ConsoleEmailService implements EmailService {
6
- sendWelcomeEmail(user: User): Promise<void>;
7
- }
8
- export declare class MockEmailService implements EmailService {
9
- private sentEmails;
10
- sendWelcomeEmail(user: User): Promise<void>;
11
- getSentEmails(): Array<{
12
- user: User;
13
- timestamp: Date;
14
- }>;
15
- clear(): void;
16
- }
17
- //# sourceMappingURL=email.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/registration/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,YAAY;IAChD,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBlD;AAED,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,UAAU,CAA8C;IAE1D,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,aAAa,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;IAIvD,KAAK,IAAI,IAAI;CAGd"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockEmailService = exports.ConsoleEmailService = void 0;
4
- class ConsoleEmailService {
5
- async sendWelcomeEmail(user) {
6
- console.log('='.repeat(50));
7
- console.log('WELCOME EMAIL');
8
- console.log('='.repeat(50));
9
- console.log(`To: ${user.email}`);
10
- console.log(`Subject: Welcome to our platform, ${user.name}!`);
11
- console.log('');
12
- console.log(`Dear ${user.name},`);
13
- console.log('');
14
- console.log('Welcome to our platform! We\'re excited to have you on board.');
15
- console.log('');
16
- console.log('Your account has been successfully created.');
17
- console.log(`Account created at: ${user.createdAt.toISOString()}`);
18
- console.log('');
19
- console.log('Best regards,');
20
- console.log('The Team');
21
- console.log('='.repeat(50));
22
- }
23
- }
24
- exports.ConsoleEmailService = ConsoleEmailService;
25
- class MockEmailService {
26
- constructor() {
27
- this.sentEmails = [];
28
- }
29
- async sendWelcomeEmail(user) {
30
- this.sentEmails.push({ user, timestamp: new Date() });
31
- }
32
- getSentEmails() {
33
- return [...this.sentEmails];
34
- }
35
- clear() {
36
- this.sentEmails = [];
37
- }
38
- }
39
- exports.MockEmailService = MockEmailService;
40
- //# sourceMappingURL=email.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/registration/email.ts"],"names":[],"mappings":";;;AAMA,MAAa,mBAAmB;IAC9B,KAAK,CAAC,gBAAgB,CAAC,IAAU;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF;AAnBD,kDAmBC;AAED,MAAa,gBAAgB;IAA7B;QACU,eAAU,GAA2C,EAAE,CAAC;IAalE,CAAC;IAXC,KAAK,CAAC,gBAAgB,CAAC,IAAU;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;CACF;AAdD,4CAcC"}
@@ -1,13 +0,0 @@
1
- import { User } from './types';
2
- export interface EmailService {
3
- sendWelcomeEmail(user: User): Promise<void>;
4
- }
5
- export declare class ConsoleEmailService implements EmailService {
6
- sendWelcomeEmail(user: User): Promise<void>;
7
- }
8
- export declare class MockEmailService implements EmailService {
9
- private readonly sentEmails;
10
- sendWelcomeEmail(user: User): Promise<void>;
11
- getSentEmails(): readonly User[];
12
- }
13
- //# sourceMappingURL=emailService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emailService.d.ts","sourceRoot":"","sources":["../../src/registration/emailService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,YAAY;IAChD,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAOlD;AAED,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IAEnC,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,aAAa,IAAI,SAAS,IAAI,EAAE;CAGjC"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockEmailService = exports.ConsoleEmailService = void 0;
4
- class ConsoleEmailService {
5
- async sendWelcomeEmail(user) {
6
- console.log('=== Welcome Email ===');
7
- console.log(`To: ${user.email}`);
8
- console.log(`Subject: Welcome ${user.name}!`);
9
- console.log(`Body: Thank you for registering. Your account has been created successfully.`);
10
- console.log('=====================');
11
- }
12
- }
13
- exports.ConsoleEmailService = ConsoleEmailService;
14
- class MockEmailService {
15
- constructor() {
16
- this.sentEmails = [];
17
- }
18
- async sendWelcomeEmail(user) {
19
- this.sentEmails.push(user);
20
- }
21
- getSentEmails() {
22
- return this.sentEmails;
23
- }
24
- }
25
- exports.MockEmailService = MockEmailService;
26
- //# sourceMappingURL=emailService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emailService.js","sourceRoot":"","sources":["../../src/registration/emailService.ts"],"names":[],"mappings":";;;AAMA,MAAa,mBAAmB;IAC9B,KAAK,CAAC,gBAAgB,CAAC,IAAU;QAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;CACF;AARD,kDAQC;AAED,MAAa,gBAAgB;IAA7B;QACmB,eAAU,GAAW,EAAE,CAAC;IAS3C,CAAC;IAPC,KAAK,CAAC,gBAAgB,CAAC,IAAU;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAVD,4CAUC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=example.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/registration/example.ts"],"names":[],"mappings":""}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const index_1 = require("./index");
4
- const runExample = async () => {
5
- const validator = new index_1.InputValidator();
6
- const passwordHasher = new index_1.PasswordHasher();
7
- const userRepository = new index_1.InMemoryUserRepository();
8
- const emailService = new index_1.ConsoleEmailService();
9
- const registrationService = new index_1.RegistrationService(validator, passwordHasher, userRepository, emailService);
10
- const validUser = {
11
- email: 'user@example.com',
12
- password: 'SecureP@ss123',
13
- name: 'John Doe',
14
- };
15
- console.log('Attempting to register user:', validUser.email);
16
- const result = await registrationService.register(validUser);
17
- if (result.success) {
18
- console.log('✓ Registration successful!');
19
- console.log('User ID:', result.user?.id);
20
- }
21
- else {
22
- console.log('✗ Registration failed:', result.errors);
23
- }
24
- console.log('\nAttempting duplicate registration...');
25
- const duplicateResult = await registrationService.register(validUser);
26
- console.log('Duplicate result:', duplicateResult.errors);
27
- const invalidUser = {
28
- email: 'invalid-email',
29
- password: 'weak',
30
- name: '',
31
- };
32
- console.log('\nAttempting to register invalid user...');
33
- const invalidResult = await registrationService.register(invalidUser);
34
- console.log('Validation errors:', invalidResult.errors);
35
- };
36
- runExample().catch(console.error);
37
- //# sourceMappingURL=example.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/registration/example.ts"],"names":[],"mappings":";;AAAA,mCAOiB;AAEjB,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;IAC3C,MAAM,SAAS,GAAG,IAAI,sBAAc,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,IAAI,sBAAc,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,8BAAsB,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,2BAAmB,EAAE,CAAC;IAE/C,MAAM,mBAAmB,GAAG,IAAI,2BAAmB,CACjD,SAAS,EACT,cAAc,EACd,cAAc,EACd,YAAY,CACb,CAAC;IAEF,MAAM,SAAS,GAAc;QAC3B,KAAK,EAAE,kBAAkB;QACzB,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,UAAU;KACjB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAc;QAC7B,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- export { RegistrationService } from './registrationService';
2
- export { InputValidator } from './validator';
3
- export { PasswordHasher } from './passwordHasher';
4
- export { InMemoryUserRepository, UserRepository } from './userRepository';
5
- export { ConsoleEmailService, MockEmailService, EmailService } from './emailService';
6
- export { UserInput, User, ValidationResult, RegistrationResult } from './types';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockEmailService = exports.ConsoleEmailService = exports.InMemoryUserRepository = exports.PasswordHasher = exports.InputValidator = exports.RegistrationService = void 0;
4
- var registrationService_1 = require("./registrationService");
5
- Object.defineProperty(exports, "RegistrationService", { enumerable: true, get: function () { return registrationService_1.RegistrationService; } });
6
- var validator_1 = require("./validator");
7
- Object.defineProperty(exports, "InputValidator", { enumerable: true, get: function () { return validator_1.InputValidator; } });
8
- var passwordHasher_1 = require("./passwordHasher");
9
- Object.defineProperty(exports, "PasswordHasher", { enumerable: true, get: function () { return passwordHasher_1.PasswordHasher; } });
10
- var userRepository_1 = require("./userRepository");
11
- Object.defineProperty(exports, "InMemoryUserRepository", { enumerable: true, get: function () { return userRepository_1.InMemoryUserRepository; } });
12
- var emailService_1 = require("./emailService");
13
- Object.defineProperty(exports, "ConsoleEmailService", { enumerable: true, get: function () { return emailService_1.ConsoleEmailService; } });
14
- Object.defineProperty(exports, "MockEmailService", { enumerable: true, get: function () { return emailService_1.MockEmailService; } });
15
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registration/index.ts"],"names":[],"mappings":";;;AAAA,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AACvB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,mDAA0E;AAAjE,wHAAA,sBAAsB,OAAA;AAC/B,+CAAqF;AAA5E,mHAAA,mBAAmB,OAAA;AAAE,gHAAA,gBAAgB,OAAA"}
@@ -1,3 +0,0 @@
1
- export declare const hashPassword: (password: string) => Promise<string>;
2
- export declare const verifyPassword: (password: string, storedHash: string) => Promise<boolean>;
3
- //# sourceMappingURL=password.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/registration/password.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAKnE,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAWjB,CAAC"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.verifyPassword = exports.hashPassword = void 0;
4
- const crypto_1 = require("crypto");
5
- const util_1 = require("util");
6
- const pbkdf2Async = (0, util_1.promisify)(crypto_1.pbkdf2);
7
- const SALT_LENGTH = 32;
8
- const ITERATIONS = 100000;
9
- const KEY_LENGTH = 64;
10
- const DIGEST = 'sha512';
11
- const hashPassword = async (password) => {
12
- const salt = (0, crypto_1.randomBytes)(SALT_LENGTH);
13
- const hash = await pbkdf2Async(password, salt, ITERATIONS, KEY_LENGTH, DIGEST);
14
- return `${salt.toString('hex')}:${hash.toString('hex')}`;
15
- };
16
- exports.hashPassword = hashPassword;
17
- const verifyPassword = async (password, storedHash) => {
18
- const [saltHex, hashHex] = storedHash.split(':');
19
- if (!saltHex || !hashHex) {
20
- return false;
21
- }
22
- const salt = Buffer.from(saltHex, 'hex');
23
- const hash = await pbkdf2Async(password, salt, ITERATIONS, KEY_LENGTH, DIGEST);
24
- return hash.toString('hex') === hashHex;
25
- };
26
- exports.verifyPassword = verifyPassword;
27
- //# sourceMappingURL=password.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/registration/password.ts"],"names":[],"mappings":";;;AAAA,mCAA6C;AAC7C,+BAAiC;AAEjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,eAAM,CAAC,CAAC;AAEtC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAEjB,MAAM,YAAY,GAAG,KAAK,EAAE,QAAgB,EAAmB,EAAE;IACtE,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,WAAW,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/E,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3D,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,QAAgB,EAChB,UAAkB,EACA,EAAE;IACpB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/E,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;AAC1C,CAAC,CAAC;AAdW,QAAA,cAAc,kBAczB"}
@@ -1,8 +0,0 @@
1
- export declare class PasswordHasher {
2
- private readonly iterations;
3
- private readonly keyLength;
4
- private readonly digest;
5
- hash(password: string): Promise<string>;
6
- verify(password: string, storedHash: string): Promise<boolean>;
7
- }
8
- //# sourceMappingURL=passwordHasher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passwordHasher.d.ts","sourceRoot":"","sources":["../../src/registration/passwordHasher.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAE7B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAerE"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PasswordHasher = void 0;
4
- const crypto_1 = require("crypto");
5
- class PasswordHasher {
6
- constructor() {
7
- this.iterations = 100000;
8
- this.keyLength = 64;
9
- this.digest = 'sha512';
10
- }
11
- async hash(password) {
12
- return new Promise((resolve, reject) => {
13
- const salt = (0, crypto_1.randomBytes)(32).toString('hex');
14
- (0, crypto_1.pbkdf2)(password, salt, this.iterations, this.keyLength, this.digest, (err, derivedKey) => {
15
- if (err) {
16
- reject(err);
17
- return;
18
- }
19
- const hash = derivedKey.toString('hex');
20
- resolve(`${salt}:${hash}`);
21
- });
22
- });
23
- }
24
- async verify(password, storedHash) {
25
- return new Promise((resolve, reject) => {
26
- const [salt, originalHash] = storedHash.split(':');
27
- (0, crypto_1.pbkdf2)(password, salt, this.iterations, this.keyLength, this.digest, (err, derivedKey) => {
28
- if (err) {
29
- reject(err);
30
- return;
31
- }
32
- const hash = derivedKey.toString('hex');
33
- resolve(hash === originalHash);
34
- });
35
- });
36
- }
37
- }
38
- exports.PasswordHasher = PasswordHasher;
39
- //# sourceMappingURL=passwordHasher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passwordHasher.js","sourceRoot":"","sources":["../../src/registration/passwordHasher.ts"],"names":[],"mappings":";;;AAAA,mCAAyD;AAEzD,MAAa,cAAc;IAA3B;QACmB,eAAU,GAAG,MAAM,CAAC;QACpB,cAAS,GAAG,EAAE,CAAC;QACf,WAAM,GAAG,QAAQ,CAAC;IAiCrC,CAAC;IA/BC,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAA,eAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;gBACvF,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;gBACT,CAAC;gBAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,UAAkB;QAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEnD,IAAA,eAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;gBACvF,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;gBACT,CAAC;gBAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApCD,wCAoCC"}
@@ -1,14 +0,0 @@
1
- import { UserInput, RegistrationResult } from './types';
2
- import { InputValidator } from './validator';
3
- import { PasswordHasher } from './passwordHasher';
4
- import { UserRepository } from './userRepository';
5
- import { EmailService } from './emailService';
6
- export declare class RegistrationService {
7
- private readonly validator;
8
- private readonly passwordHasher;
9
- private readonly userRepository;
10
- private readonly emailService;
11
- constructor(validator: InputValidator, passwordHasher: PasswordHasher, userRepository: UserRepository, emailService: EmailService);
12
- register(input: UserInput): Promise<RegistrationResult>;
13
- }
14
- //# sourceMappingURL=registrationService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registrationService.d.ts","sourceRoot":"","sources":["../../src/registration/registrationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAHZ,SAAS,EAAE,cAAc,EACzB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY;IAGvC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwC9D"}
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RegistrationService = void 0;
4
- class RegistrationService {
5
- constructor(validator, passwordHasher, userRepository, emailService) {
6
- this.validator = validator;
7
- this.passwordHasher = passwordHasher;
8
- this.userRepository = userRepository;
9
- this.emailService = emailService;
10
- }
11
- async register(input) {
12
- const validationResult = this.validator.validate(input);
13
- if (!validationResult.isValid) {
14
- return {
15
- success: false,
16
- errors: validationResult.errors,
17
- };
18
- }
19
- const existingUser = await this.userRepository.findByEmail(input.email);
20
- if (existingUser) {
21
- return {
22
- success: false,
23
- errors: ['Email already registered'],
24
- };
25
- }
26
- try {
27
- const passwordHash = await this.passwordHasher.hash(input.password);
28
- const user = await this.userRepository.save({
29
- email: input.email,
30
- passwordHash,
31
- name: input.name,
32
- });
33
- await this.emailService.sendWelcomeEmail(user);
34
- return {
35
- success: true,
36
- user,
37
- errors: [],
38
- };
39
- }
40
- catch (error) {
41
- return {
42
- success: false,
43
- errors: [`Registration failed: ${error}`],
44
- };
45
- }
46
- }
47
- }
48
- exports.RegistrationService = RegistrationService;
49
- //# sourceMappingURL=registrationService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registrationService.js","sourceRoot":"","sources":["../../src/registration/registrationService.ts"],"names":[],"mappings":";;;AAMA,MAAa,mBAAmB;IAC9B,YACmB,SAAyB,EACzB,cAA8B,EAC9B,cAA8B,EAC9B,YAA0B;QAH1B,cAAS,GAAT,SAAS,CAAgB;QACzB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;IAC1C,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,KAAgB;QAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,gBAAgB,CAAC,MAAM;aAChC,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,0BAA0B,CAAC;aACrC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEpE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,YAAY;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE/C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,wBAAwB,KAAK,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAhDD,kDAgDC"}
@@ -1,14 +0,0 @@
1
- import { UserInput, RegistrationResult } from './types';
2
- import { UserDatabase } from './database';
3
- import { EmailService } from './email';
4
- export interface RegistrationServiceOptions {
5
- database: UserDatabase;
6
- emailService: EmailService;
7
- }
8
- export declare class RegistrationService {
9
- private database;
10
- private emailService;
11
- constructor(options: RegistrationServiceOptions);
12
- registerUser(input: UserInput): Promise<RegistrationResult>;
13
- }
14
- //# sourceMappingURL=service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/registration/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAe;gBAEvB,OAAO,EAAE,0BAA0B;IAKzC,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAuClE"}
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RegistrationService = void 0;
4
- const validators_1 = require("./validators");
5
- const password_1 = require("./password");
6
- class RegistrationService {
7
- constructor(options) {
8
- this.database = options.database;
9
- this.emailService = options.emailService;
10
- }
11
- async registerUser(input) {
12
- try {
13
- const validation = (0, validators_1.validateUserInput)(input);
14
- if (!validation.isValid) {
15
- return {
16
- success: false,
17
- error: validation.errors.join('; '),
18
- };
19
- }
20
- const existingUser = await this.database.findByEmail(input.email);
21
- if (existingUser) {
22
- return {
23
- success: false,
24
- error: 'Email already registered',
25
- };
26
- }
27
- const passwordHash = await (0, password_1.hashPassword)(input.password);
28
- const user = await this.database.save({
29
- email: input.email,
30
- name: input.name.trim(),
31
- passwordHash,
32
- });
33
- await this.emailService.sendWelcomeEmail(user);
34
- return {
35
- success: true,
36
- user,
37
- };
38
- }
39
- catch (error) {
40
- return {
41
- success: false,
42
- error: error instanceof Error ? error.message : 'Registration failed',
43
- };
44
- }
45
- }
46
- }
47
- exports.RegistrationService = RegistrationService;
48
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/registration/service.ts"],"names":[],"mappings":";;;AACA,6CAAiD;AACjD,yCAA0C;AAS1C,MAAa,mBAAmB;IAI9B,YAAY,OAAmC;QAC7C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAgB;QACjC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,8BAAiB,EAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;iBACpC,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,0BAA0B;iBAClC,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAA,uBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAExD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACpC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;gBACvB,YAAY;aACb,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE/C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;aACL,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;aACtE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAhDD,kDAgDC"}
@@ -1,22 +0,0 @@
1
- export interface UserInput {
2
- readonly email: string;
3
- readonly password: string;
4
- readonly name: string;
5
- }
6
- export interface User {
7
- readonly id: string;
8
- readonly email: string;
9
- readonly passwordHash: string;
10
- readonly name: string;
11
- readonly createdAt: Date;
12
- }
13
- export interface ValidationResult {
14
- readonly isValid: boolean;
15
- readonly errors: readonly string[];
16
- }
17
- export interface RegistrationResult {
18
- readonly success: boolean;
19
- readonly user?: User;
20
- readonly errors: readonly string[];
21
- }
22
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registration/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registration/types.ts"],"names":[],"mappings":""}
@@ -1,12 +0,0 @@
1
- import { User } from './types';
2
- export interface UserRepository {
3
- findByEmail(email: string): Promise<User | null>;
4
- save(user: Omit<User, 'id' | 'createdAt'>): Promise<User>;
5
- }
6
- export declare class InMemoryUserRepository implements UserRepository {
7
- private readonly users;
8
- findByEmail(email: string): Promise<User | null>;
9
- save(userData: Omit<User, 'id' | 'createdAt'>): Promise<User>;
10
- private generateId;
11
- }
12
- //# sourceMappingURL=userRepository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userRepository.d.ts","sourceRoot":"","sources":["../../src/registration/userRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IAEhD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMhD,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnE,OAAO,CAAC,UAAU;CAGnB"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryUserRepository = void 0;
4
- const crypto_1 = require("crypto");
5
- class InMemoryUserRepository {
6
- constructor() {
7
- this.users = new Map();
8
- }
9
- async findByEmail(email) {
10
- const users = Array.from(this.users.values());
11
- const user = users.find((u) => u.email.toLowerCase() === email.toLowerCase());
12
- return user ?? null;
13
- }
14
- async save(userData) {
15
- const user = {
16
- id: this.generateId(),
17
- createdAt: new Date(),
18
- ...userData,
19
- };
20
- this.users.set(user.id, user);
21
- return user;
22
- }
23
- generateId() {
24
- return (0, crypto_1.randomBytes)(16).toString('hex');
25
- }
26
- }
27
- exports.InMemoryUserRepository = InMemoryUserRepository;
28
- //# sourceMappingURL=userRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userRepository.js","sourceRoot":"","sources":["../../src/registration/userRepository.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAQrC,MAAa,sBAAsB;IAAnC;QACmB,UAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAsBxD,CAAC;IApBC,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAwC;QACjD,MAAM,IAAI,GAAS;YACjB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,GAAG,QAAQ;SACZ,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU;QAChB,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;CACF;AAvBD,wDAuBC"}
@@ -1,7 +0,0 @@
1
- import { UserInput, ValidationResult } from './types';
2
- export declare class InputValidator {
3
- validate(input: UserInput): ValidationResult;
4
- private isValidEmail;
5
- private isStrongPassword;
6
- }
7
- //# sourceMappingURL=validator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/registration/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKtD,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB;IA2B5C,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;CAYzB"}