@digitaldefiance/suite-core-lib 1.3.27 → 2.1.3

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 (95) hide show
  1. package/README.md +117 -3
  2. package/package.json +7 -4
  3. package/src/builders/index.d.ts +6 -0
  4. package/src/builders/index.d.ts.map +1 -0
  5. package/src/builders/index.js +9 -0
  6. package/src/builders/index.js.map +1 -0
  7. package/src/builders/role-builder.d.ts +19 -0
  8. package/src/builders/role-builder.d.ts.map +1 -0
  9. package/src/builders/role-builder.js +57 -0
  10. package/src/builders/role-builder.js.map +1 -0
  11. package/src/builders/user-builder.d.ts +23 -0
  12. package/src/builders/user-builder.d.ts.map +1 -0
  13. package/src/builders/user-builder.js +63 -0
  14. package/src/builders/user-builder.js.map +1 -0
  15. package/src/core/errors.d.ts +14 -0
  16. package/src/core/errors.d.ts.map +1 -0
  17. package/src/core/errors.js +29 -0
  18. package/src/core/errors.js.map +1 -0
  19. package/src/core/index.d.ts +7 -0
  20. package/src/core/index.d.ts.map +1 -0
  21. package/src/core/index.js +10 -0
  22. package/src/core/index.js.map +1 -0
  23. package/src/core/result.d.ts +34 -0
  24. package/src/core/result.d.ts.map +1 -0
  25. package/src/core/result.js +35 -0
  26. package/src/core/result.js.map +1 -0
  27. package/src/core/types.d.ts +17 -0
  28. package/src/core/types.d.ts.map +1 -0
  29. package/src/core/types.js +6 -0
  30. package/src/core/types.js.map +1 -0
  31. package/src/enumerations/suite-core-string-key.d.ts +13 -0
  32. package/src/enumerations/suite-core-string-key.d.ts.map +1 -1
  33. package/src/enumerations/suite-core-string-key.js +13 -0
  34. package/src/enumerations/suite-core-string-key.js.map +1 -1
  35. package/src/errors/admin-role-not-found.d.ts +2 -2
  36. package/src/errors/admin-role-not-found.d.ts.map +1 -1
  37. package/src/errors/admin-role-not-found.js +3 -3
  38. package/src/errors/admin-role-not-found.js.map +1 -1
  39. package/src/errors/core-typed-handleable.d.ts +2 -2
  40. package/src/errors/core-typed-handleable.d.ts.map +1 -1
  41. package/src/errors/core-typed-handleable.js +3 -3
  42. package/src/errors/core-typed-handleable.js.map +1 -1
  43. package/src/errors/email-token-expired.js +2 -2
  44. package/src/errors/email-token-expired.js.map +1 -1
  45. package/src/errors/fec-error.d.ts +3 -3
  46. package/src/errors/fec-error.d.ts.map +1 -1
  47. package/src/errors/fec-error.js +1 -2
  48. package/src/errors/fec-error.js.map +1 -1
  49. package/src/errors/invalid-email.d.ts +3 -3
  50. package/src/errors/invalid-email.d.ts.map +1 -1
  51. package/src/errors/invalid-email.js +1 -1
  52. package/src/errors/invalid-email.js.map +1 -1
  53. package/src/errors/member-role-not-found.d.ts +2 -2
  54. package/src/errors/member-role-not-found.d.ts.map +1 -1
  55. package/src/errors/member-role-not-found.js +3 -3
  56. package/src/errors/member-role-not-found.js.map +1 -1
  57. package/src/errors/pbkdf2-error.d.ts +3 -3
  58. package/src/errors/pbkdf2-error.d.ts.map +1 -1
  59. package/src/errors/pbkdf2-error.js +1 -1
  60. package/src/errors/pbkdf2-error.js.map +1 -1
  61. package/src/errors/system-role-not-found.d.ts +2 -2
  62. package/src/errors/system-role-not-found.d.ts.map +1 -1
  63. package/src/errors/system-role-not-found.js +5 -5
  64. package/src/errors/system-role-not-found.js.map +1 -1
  65. package/src/errors/translatable-suite-handleable.d.ts +2 -10
  66. package/src/errors/translatable-suite-handleable.d.ts.map +1 -1
  67. package/src/errors/translatable-suite-handleable.js +7 -24
  68. package/src/errors/translatable-suite-handleable.js.map +1 -1
  69. package/src/errors/translatable-suite.d.ts.map +1 -1
  70. package/src/errors/translatable-suite.js +1 -10
  71. package/src/errors/translatable-suite.js.map +1 -1
  72. package/src/i18n-setup.d.ts +6 -34
  73. package/src/i18n-setup.d.ts.map +1 -1
  74. package/src/i18n-setup.js +131 -95
  75. package/src/i18n-setup.js.map +1 -1
  76. package/src/index.d.ts +3 -0
  77. package/src/index.d.ts.map +1 -1
  78. package/src/index.js +3 -0
  79. package/src/index.js.map +1 -1
  80. package/src/lib/formatters.d.ts +16 -0
  81. package/src/lib/formatters.d.ts.map +1 -0
  82. package/src/lib/formatters.js +29 -0
  83. package/src/lib/formatters.js.map +1 -0
  84. package/src/lib/index.d.ts +7 -0
  85. package/src/lib/index.d.ts.map +1 -0
  86. package/src/lib/index.js +10 -0
  87. package/src/lib/index.js.map +1 -0
  88. package/src/lib/validators-with-constants.d.ts +73 -0
  89. package/src/lib/validators-with-constants.d.ts.map +1 -0
  90. package/src/lib/validators-with-constants.js +64 -0
  91. package/src/lib/validators-with-constants.js.map +1 -0
  92. package/src/lib/validators.d.ts +37 -0
  93. package/src/lib/validators.d.ts.map +1 -0
  94. package/src/lib/validators.js +74 -0
  95. package/src/lib/validators.js.map +1 -0
package/README.md CHANGED
@@ -247,7 +247,76 @@ The **@digitaldefiance/node-ecies** and **@digitaldefiance/node-express-suite**
247
247
  - Mobile and desktop SDKs for React Native, Flutter, Electron, and Tauri
248
248
  - DevOps and deployment tooling including Docker, Kubernetes, and CI/CD pipelines
249
249
 
250
- ## 🧪 Testing & Quality
250
+ ## 🆕 What's New in v2.1
251
+
252
+ ### New Modules
253
+
254
+ #### Builders - Fluent APIs
255
+ ```typescript
256
+ import { UserBuilder, RoleBuilder } from '@digitaldefiance/suite-core-lib';
257
+
258
+ const user = UserBuilder.create()
259
+ .withUsername('admin')
260
+ .withEmail('admin@example.com')
261
+ .withEmailVerified(true)
262
+ .build();
263
+
264
+ const role = RoleBuilder.create()
265
+ .withName(Role.Admin)
266
+ .asAdmin()
267
+ .build();
268
+ ```
269
+
270
+ #### Core - Result Pattern & Type Exports
271
+ ```typescript
272
+ import { Result, success, failure, isSuccess } from '@digitaldefiance/suite-core-lib';
273
+
274
+ function processUser(id: string): Result<User, UserNotFoundError> {
275
+ const user = findUser(id);
276
+ return user ? success(user) : failure(new UserNotFoundError(id));
277
+ }
278
+
279
+ if (isSuccess(result)) {
280
+ console.log('User:', result.data);
281
+ } else {
282
+ console.error('Error:', result.error);
283
+ }
284
+ ```
285
+
286
+ #### Lib - Validators & Formatters
287
+ ```typescript
288
+ import {
289
+ isValidUsername,
290
+ isValidEmail,
291
+ isValidPassword,
292
+ createValidators,
293
+ createConstants
294
+ } from '@digitaldefiance/suite-core-lib';
295
+
296
+ // Use default validators with built-in constants
297
+ if (!isValidUsername('test123')) {
298
+ throw new InvalidUsernameError('test123');
299
+ }
300
+
301
+ // Create validators with custom constants
302
+ const myConstants = createConstants('myapp.com', {
303
+ UsernameRegex: /^[a-z0-9_]{4,20}$/,
304
+ UsernameMinLength: 4,
305
+ UsernameMaxLength: 20,
306
+ });
307
+
308
+ const validators = createValidators(myConstants);
309
+ if (!validators.isValidUsername('user_name')) {
310
+ throw new Error('Invalid username');
311
+ }
312
+ ```
313
+
314
+ ### Improved Architecture
315
+
316
+ - **70% Code Reduction**: `TranslatableSuiteHandleableError` now extends i18n-lib base classes
317
+ - **Organized Structure**: New `builders/`, `core/`, `lib/` folders
318
+ - **Custom Constants**: Validators accept custom `IConstants` for flexibility
319
+ - **Better Type Safety**: Enhanced TypeScript types throughout
251
320
 
252
321
  ## 🛠️ Runtime Configuration Registry
253
322
 
@@ -283,15 +352,24 @@ All constants are immutable and accessible via the registry/config API. See `src
283
352
  # Run the comprehensive test suite
284
353
  yarn test
285
354
 
286
- # 104 tests covering:
355
+ # 409 tests covering:
287
356
  # ✅ Type safety and interface validation
288
357
  # ✅ Cryptographic security functions
289
358
  # ✅ Multi-language localization
290
359
  # ✅ Error handling and edge cases
291
360
  # ✅ Integration scenarios
292
- # ✅ Performance benchmarks
361
+ # ✅ Builders and fluent APIs
362
+ # ✅ Result pattern and core utilities
363
+ # ✅ Validators with custom constants
293
364
  ```
294
365
 
366
+ ### Coverage Metrics (v2.1.3)
367
+
368
+ - **Statements**: 98.47%
369
+ - **Branches**: 94.56%
370
+ - **Functions**: 88.09%
371
+ - **Lines**: 98.63%
372
+
295
373
  ## 🤝 Contributing
296
374
 
297
375
  We welcome contributions to help build the future of secure user management! Areas where contributions are especially appreciated:
@@ -326,6 +404,42 @@ MIT © [Digital Defiance](https://github.com/digitaldefiance)
326
404
 
327
405
  ## ChangeLog
328
406
 
407
+ ## V2.1.3: New Modules & Architecture Improvements
408
+
409
+ ### New Features
410
+ - **Builders Module**: UserBuilder, RoleBuilder with fluent APIs
411
+ - **Core Module**: Result<T,E> pattern, type exports, error exports
412
+ - **Lib Module**: Validators, formatters, custom constants support
413
+ - **Custom Constants**: `createValidators(constants)` for flexible validation rules
414
+
415
+ ### Architecture Improvements
416
+ - TranslatableSuiteHandleableError extends i18n-lib base (70% code reduction)
417
+ - Organized folder structure: builders/, core/, lib/
418
+ - Enhanced type safety throughout
419
+
420
+ ### Quality Improvements
421
+ - 409 tests (was 313)
422
+ - 94.56% branch coverage (was 59.3%)
423
+ - 98.47% statement coverage (was 92.86%)
424
+ - 88.09% function coverage (was 67.53%)
425
+
426
+ ### Documentation
427
+ - Complete migration guide in [MIGRATION_V2.md](./docs/MIGRATION_V2.md)
428
+ - Comprehensive examples in [V2_IMPROVEMENTS_COMPLETE.md](./docs/V2_IMPROVEMENTS_COMPLETE.md)
429
+ - Final metrics in [V2_FINAL_SUMMARY.md](./docs/V2_FINAL_SUMMARY.md)
430
+
431
+ ### Breaking Changes
432
+ - **None** - 100% backwards compatible
433
+
434
+ ## V2.0.0: Major Version - Dependency Upgrades
435
+
436
+ - Upgraded all @digitaldefiance dependencies to v2.0
437
+ - @digitaldefiance/ecies-lib: 2.0.1
438
+ - @digitaldefiance/i18n-lib: 2.0.0
439
+ - @digitaldefiance/node-ecies-lib: 2.0.0
440
+ - No breaking API changes
441
+ - See [MIGRATION_V2.md](./docs/MIGRATION_V2.md) for upgrade guide
442
+
329
443
  ## V1.3.27: Upgrade i18n, ecies, version bump
330
444
 
331
445
  - Upgrade i18n, ecies, version bump
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@digitaldefiance/suite-core-lib",
3
- "version": "1.3.27",
3
+ "version": "2.1.3",
4
4
  "description": "Generic user system and document system common core for applications",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
7
7
  "scripts": {
8
8
  "build": "npx nx build digitaldefiance-suite-core-lib",
9
+ "build:stream": "npx nx build --outputStyle=stream digitaldefiance-suite-core-lib",
10
+ "build:logged": "npx nx build --outputStyle=stream digitaldefiance-suite-core-lib 2>&1 | ansifilter -o build.log",
9
11
  "test": "npx nx test digitaldefiance-suite-core-lib",
12
+ "test:stream": "npx nx test --outputStyle=stream digitaldefiance-suite-core-lib",
13
+ "test:logged": "npx nx test --outputStyle=stream digitaldefiance-suite-core-lib 2>&1 | ansifilter -o test.log",
10
14
  "lint": "npx nx lint digitaldefiance-suite-core-lib",
11
15
  "lint:fix": "npx nx lint digitaldefiance-suite-core-lib --fix",
12
16
  "prettier:check": "prettier --check 'src/**/*.{ts,tsx}'",
@@ -17,9 +21,8 @@
17
21
  "publish:public": "npm publish --access public"
18
22
  },
19
23
  "dependencies": {
20
- "@digitaldefiance/ecies-lib": "1.3.27",
21
- "@digitaldefiance/i18n-lib": "1.3.27",
22
- "@digitaldefiance/node-ecies-lib": "1.3.27"
24
+ "@digitaldefiance/ecies-lib": "2.1.3",
25
+ "@digitaldefiance/i18n-lib": "2.1.1"
23
26
  },
24
27
  "files": [
25
28
  "src",
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Builders module - fluent builders for common objects
3
+ */
4
+ export * from './user-builder';
5
+ export * from './role-builder';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/builders/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Builders module - fluent builders for common objects
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tslib_1 = require("tslib");
7
+ tslib_1.__exportStar(require("./user-builder"), exports);
8
+ tslib_1.__exportStar(require("./role-builder"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/builders/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yDAA+B;AAC/B,yDAA+B"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Fluent builder for creating role objects
3
+ */
4
+ import { Role } from '../enumerations/role';
5
+ import { IRoleBase } from '../interfaces/bases/role';
6
+ /**
7
+ * Builder for creating role objects with fluent API
8
+ */
9
+ export declare class RoleBuilder<I = string, D extends Date | string = Date> {
10
+ private data;
11
+ static create<I = string, D extends Date | string = Date>(): RoleBuilder<I, D>;
12
+ withName(name: Role): this;
13
+ asAdmin(): this;
14
+ asMember(): this;
15
+ asChild(): this;
16
+ asSystem(): this;
17
+ build(): Partial<IRoleBase<I, D, Role>>;
18
+ }
19
+ //# sourceMappingURL=role-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/builders/role-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI;IACjE,OAAO,CAAC,IAAI,CAKV;IAEF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAI9E,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAK1B,OAAO,IAAI,IAAI;IAQf,QAAQ,IAAI,IAAI;IAQhB,OAAO,IAAI,IAAI;IAQf,QAAQ,IAAI,IAAI;IAQhB,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;CAGxC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Fluent builder for creating role objects
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RoleBuilder = void 0;
7
+ /**
8
+ * Builder for creating role objects with fluent API
9
+ */
10
+ class RoleBuilder {
11
+ data = {
12
+ admin: false,
13
+ member: false,
14
+ child: false,
15
+ system: false,
16
+ };
17
+ static create() {
18
+ return new RoleBuilder();
19
+ }
20
+ withName(name) {
21
+ this.data.name = name;
22
+ return this;
23
+ }
24
+ asAdmin() {
25
+ this.data.admin = true;
26
+ this.data.member = false;
27
+ this.data.child = false;
28
+ this.data.system = false;
29
+ return this;
30
+ }
31
+ asMember() {
32
+ this.data.admin = false;
33
+ this.data.member = true;
34
+ this.data.child = false;
35
+ this.data.system = false;
36
+ return this;
37
+ }
38
+ asChild() {
39
+ this.data.admin = false;
40
+ this.data.member = false;
41
+ this.data.child = true;
42
+ this.data.system = false;
43
+ return this;
44
+ }
45
+ asSystem() {
46
+ this.data.admin = false;
47
+ this.data.member = false;
48
+ this.data.child = false;
49
+ this.data.system = true;
50
+ return this;
51
+ }
52
+ build() {
53
+ return { ...this.data };
54
+ }
55
+ }
56
+ exports.RoleBuilder = RoleBuilder;
57
+ //# sourceMappingURL=role-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/builders/role-builder.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH;;GAEG;AACH,MAAa,WAAW;IACd,IAAI,GAAmC;QAC7C,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,WAAW,EAAQ,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AApDD,kCAoDC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Fluent builder for creating user objects
3
+ */
4
+ import { AccountStatus } from '../enumerations/account-status';
5
+ import { IUserBase } from '../interfaces/bases/user';
6
+ /**
7
+ * Builder for creating user objects with fluent API
8
+ */
9
+ export declare class UserBuilder<I = string, D extends Date | string = Date, S extends string = string> {
10
+ private data;
11
+ static create<I = string, D extends Date | string = Date, S extends string = string>(): UserBuilder<I, D, S>;
12
+ withUsername(username: string): this;
13
+ withEmail(email: string): this;
14
+ withPublicKey(publicKey: string): this;
15
+ withTimezone(timezone: string): this;
16
+ withSiteLanguage(siteLanguage: S): this;
17
+ withEmailVerified(verified: boolean): this;
18
+ withAccountStatus(status: AccountStatus): this;
19
+ withDirectChallenge(enabled: boolean): this;
20
+ withMnemonicRecovery(recovery: string): this;
21
+ build(): Partial<IUserBase<I, D, S, AccountStatus>>;
22
+ }
23
+ //# sourceMappingURL=user-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/builders/user-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM;IAC5F,OAAO,CAAC,IAAI,CAMV;IAEF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI5G,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKtC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,gBAAgB,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI;IAKvC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAK1C,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAK9C,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK3C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK5C,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;CAGpD"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Fluent builder for creating user objects
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UserBuilder = void 0;
7
+ const account_status_1 = require("../enumerations/account-status");
8
+ /**
9
+ * Builder for creating user objects with fluent API
10
+ */
11
+ class UserBuilder {
12
+ data = {
13
+ emailVerified: false,
14
+ accountStatus: account_status_1.AccountStatus.Active,
15
+ directChallenge: false,
16
+ backupCodes: [],
17
+ timezone: 'UTC',
18
+ };
19
+ static create() {
20
+ return new UserBuilder();
21
+ }
22
+ withUsername(username) {
23
+ this.data.username = username;
24
+ return this;
25
+ }
26
+ withEmail(email) {
27
+ this.data.email = email;
28
+ return this;
29
+ }
30
+ withPublicKey(publicKey) {
31
+ this.data.publicKey = publicKey;
32
+ return this;
33
+ }
34
+ withTimezone(timezone) {
35
+ this.data.timezone = timezone;
36
+ return this;
37
+ }
38
+ withSiteLanguage(siteLanguage) {
39
+ this.data.siteLanguage = siteLanguage;
40
+ return this;
41
+ }
42
+ withEmailVerified(verified) {
43
+ this.data.emailVerified = verified;
44
+ return this;
45
+ }
46
+ withAccountStatus(status) {
47
+ this.data.accountStatus = status;
48
+ return this;
49
+ }
50
+ withDirectChallenge(enabled) {
51
+ this.data.directChallenge = enabled;
52
+ return this;
53
+ }
54
+ withMnemonicRecovery(recovery) {
55
+ this.data.mnemonicRecovery = recovery;
56
+ return this;
57
+ }
58
+ build() {
59
+ return { ...this.data };
60
+ }
61
+ }
62
+ exports.UserBuilder = UserBuilder;
63
+ //# sourceMappingURL=user-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/builders/user-builder.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mEAA+D;AAG/D;;GAEG;AACH,MAAa,WAAW;IACd,IAAI,GAA+C;QACzD,aAAa,EAAE,KAAK;QACpB,aAAa,EAAE,8BAAa,CAAC,MAAM;QACnC,eAAe,EAAE,KAAK;QACtB,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,WAAW,EAAW,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,YAAe;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,QAAiB;QACjC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,MAAqB;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,OAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,QAAgB;QACnC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AA7DD,kCA6DC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Core error class exports for suite-core-lib
3
+ */
4
+ export { TranslatableSuiteError } from '../errors/translatable-suite';
5
+ export { TranslatableSuiteHandleableError } from '../errors/translatable-suite-handleable';
6
+ export { CoreTypedHandleableError } from '../errors/core-typed-handleable';
7
+ export { UserNotFoundError } from '../errors/user-not-found';
8
+ export { InvalidCredentialsError } from '../errors/invalid-credentials';
9
+ export { InvalidEmailError } from '../errors/invalid-email';
10
+ export { InvalidUsernameError } from '../errors/invalid-username';
11
+ export { EmailInUseError } from '../errors/email-in-use';
12
+ export { UsernameInUseError } from '../errors/username-in-use';
13
+ export { GenericValidationError } from '../errors/generic-validation';
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * Core error class exports for suite-core-lib
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GenericValidationError = exports.UsernameInUseError = exports.EmailInUseError = exports.InvalidUsernameError = exports.InvalidEmailError = exports.InvalidCredentialsError = exports.UserNotFoundError = exports.CoreTypedHandleableError = exports.TranslatableSuiteHandleableError = exports.TranslatableSuiteError = void 0;
7
+ // Base error classes
8
+ var translatable_suite_1 = require("../errors/translatable-suite");
9
+ Object.defineProperty(exports, "TranslatableSuiteError", { enumerable: true, get: function () { return translatable_suite_1.TranslatableSuiteError; } });
10
+ var translatable_suite_handleable_1 = require("../errors/translatable-suite-handleable");
11
+ Object.defineProperty(exports, "TranslatableSuiteHandleableError", { enumerable: true, get: function () { return translatable_suite_handleable_1.TranslatableSuiteHandleableError; } });
12
+ var core_typed_handleable_1 = require("../errors/core-typed-handleable");
13
+ Object.defineProperty(exports, "CoreTypedHandleableError", { enumerable: true, get: function () { return core_typed_handleable_1.CoreTypedHandleableError; } });
14
+ // Common error classes
15
+ var user_not_found_1 = require("../errors/user-not-found");
16
+ Object.defineProperty(exports, "UserNotFoundError", { enumerable: true, get: function () { return user_not_found_1.UserNotFoundError; } });
17
+ var invalid_credentials_1 = require("../errors/invalid-credentials");
18
+ Object.defineProperty(exports, "InvalidCredentialsError", { enumerable: true, get: function () { return invalid_credentials_1.InvalidCredentialsError; } });
19
+ var invalid_email_1 = require("../errors/invalid-email");
20
+ Object.defineProperty(exports, "InvalidEmailError", { enumerable: true, get: function () { return invalid_email_1.InvalidEmailError; } });
21
+ var invalid_username_1 = require("../errors/invalid-username");
22
+ Object.defineProperty(exports, "InvalidUsernameError", { enumerable: true, get: function () { return invalid_username_1.InvalidUsernameError; } });
23
+ var email_in_use_1 = require("../errors/email-in-use");
24
+ Object.defineProperty(exports, "EmailInUseError", { enumerable: true, get: function () { return email_in_use_1.EmailInUseError; } });
25
+ var username_in_use_1 = require("../errors/username-in-use");
26
+ Object.defineProperty(exports, "UsernameInUseError", { enumerable: true, get: function () { return username_in_use_1.UsernameInUseError; } });
27
+ var generic_validation_1 = require("../errors/generic-validation");
28
+ Object.defineProperty(exports, "GenericValidationError", { enumerable: true, get: function () { return generic_validation_1.GenericValidationError; } });
29
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qBAAqB;AACrB,mEAAsE;AAA7D,4HAAA,sBAAsB,OAAA;AAC/B,yFAA2F;AAAlF,iJAAA,gCAAgC,OAAA;AACzC,yEAA2E;AAAlE,iIAAA,wBAAwB,OAAA;AAEjC,uBAAuB;AACvB,2DAA6D;AAApD,mHAAA,iBAAiB,OAAA;AAC1B,qEAAwE;AAA/D,8HAAA,uBAAuB,OAAA;AAChC,yDAA4D;AAAnD,kHAAA,iBAAiB,OAAA;AAC1B,+DAAkE;AAAzD,wHAAA,oBAAoB,OAAA;AAC7B,uDAAyD;AAAhD,+GAAA,eAAe,OAAA;AACxB,6DAA+D;AAAtD,qHAAA,kBAAkB,OAAA;AAC3B,mEAAsE;AAA7D,4HAAA,sBAAsB,OAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Core module - central exports for common types and errors
3
+ */
4
+ export * from './types';
5
+ export * from './errors';
6
+ export * from './result';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Core module - central exports for common types and errors
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tslib_1 = require("tslib");
7
+ tslib_1.__exportStar(require("./types"), exports);
8
+ tslib_1.__exportStar(require("./errors"), exports);
9
+ tslib_1.__exportStar(require("./result"), exports);
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,kDAAwB;AACxB,mDAAyB;AACzB,mDAAyB"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Result type pattern for better error handling
3
+ * Provides type-safe success/failure handling without exceptions
4
+ */
5
+ export type Result<T, E = Error> = {
6
+ success: true;
7
+ data: T;
8
+ } | {
9
+ success: false;
10
+ error: E;
11
+ };
12
+ /**
13
+ * Create a successful result
14
+ */
15
+ export declare function success<T>(data: T): Result<T, never>;
16
+ /**
17
+ * Create a failed result
18
+ */
19
+ export declare function failure<E>(error: E): Result<never, E>;
20
+ /**
21
+ * Check if result is successful
22
+ */
23
+ export declare function isSuccess<T, E>(result: Result<T, E>): result is {
24
+ success: true;
25
+ data: T;
26
+ };
27
+ /**
28
+ * Check if result is a failure
29
+ */
30
+ export declare function isFailure<T, E>(result: Result<T, E>): result is {
31
+ success: false;
32
+ error: E;
33
+ };
34
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/result.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAC3B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAEpD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAE1F;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAE5F"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Result type pattern for better error handling
4
+ * Provides type-safe success/failure handling without exceptions
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.success = success;
8
+ exports.failure = failure;
9
+ exports.isSuccess = isSuccess;
10
+ exports.isFailure = isFailure;
11
+ /**
12
+ * Create a successful result
13
+ */
14
+ function success(data) {
15
+ return { success: true, data };
16
+ }
17
+ /**
18
+ * Create a failed result
19
+ */
20
+ function failure(error) {
21
+ return { success: false, error };
22
+ }
23
+ /**
24
+ * Check if result is successful
25
+ */
26
+ function isSuccess(result) {
27
+ return result.success;
28
+ }
29
+ /**
30
+ * Check if result is a failure
31
+ */
32
+ function isFailure(result) {
33
+ return !result.success;
34
+ }
35
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/result.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,0BAEC;AAKD,0BAEC;AAKD,8BAEC;AAKD,8BAEC;AA1BD;;GAEG;AACH,SAAgB,OAAO,CAAI,IAAO;IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAI,KAAQ;IACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAO,MAAoB;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAO,MAAoB;IAClD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AACzB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Core type exports for suite-core-lib
3
+ */
4
+ export type { IFailableResult } from '../interfaces/failable-result';
5
+ export type { DeepPartial } from '../interfaces/deep-partial';
6
+ export type { IHasId } from '../interfaces/has-id';
7
+ export type { IHasTimestamps } from '../interfaces/has-timestamps';
8
+ export type { IHasCreation } from '../interfaces/has-creation';
9
+ export type { IHasUpdates } from '../interfaces/has-updates';
10
+ export type { IHasSoftDelete } from '../interfaces/has-soft-delete';
11
+ export type { IHasCreator } from '../interfaces/has-creator';
12
+ export type { IHasUpdater } from '../interfaces/has-updater';
13
+ export type { IHasSoftDeleter } from '../interfaces/has-soft-deleter';
14
+ export type { IHasTimestampOwners } from '../interfaces/has-timestamp-owners';
15
+ export type { ITokenUser } from '../interfaces/token-user';
16
+ export type { BackupCodeString } from '../backup-code-string';
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAG9E,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Core type exports for suite-core-lib
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-suite-core-lib/src/core/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -37,6 +37,19 @@ export declare enum SuiteCoreStringKey {
37
37
  Error_MissingRequiredEnvironmentVariableTemplate = "error_missingRequiredEnvironmentVariableTemplate",
38
38
  Error_EmptyEnvironmentVariableTemplate = "error_emptyEnvironmentVariableTemplate",
39
39
  Error_RecursiveErrorHandlingDetected = "error_recursiveErrorHandlingDetected",
40
+ Error_SystemUserMustBeSystemMemberType = "error_systemUserMustBeSystemMemberType",
41
+ Error_MnemonicHmacSecretMustBe64CharHexString = "error_mnemonicHmacSecretMustBe64CharHexString",
42
+ Error_MnemonicEncryptionKeyMustBe64CharHexString = "error_mnemonicEncryptionKeyMustBe64CharHexString",
43
+ Error_AdminMnemonicMustBeValidMnemonicPhrase = "error_adminMnemonicMustBeValidMnemonicPhrase",
44
+ Error_MemberMnemonicMustBeValidMnemonicPhrase = "error_memberMnemonicMustBeValidMnemonicPhrase",
45
+ Error_Pbkdf2IterationsMustBeGreaterThanZero = "error_pbkdf2IterationsMustBeGreaterThanZero",
46
+ Error_InvalidCspOrHelmetOptionsProvided = "error_invalidCspOrHelmetOptionsProvided",
47
+ Error_EnvironmentIsRequired = "error_environmentIsRequired",
48
+ Error_ApiRouterFactoryIsRequired = "error_apiRouterFactoryIsRequired",
49
+ Error_SchemaMapFactoryIsRequired = "error_schemaMapFactoryIsRequired",
50
+ Error_DatabaseInitFunctionIsRequired = "error_databaseInitFunctionIsRequired",
51
+ Error_InitResultHashFunctionIsRequired = "error_initResultHashFunctionIsRequired",
52
+ Error_ServiceIsNotRegisteredTemplate = "error_serviceIsNotRegisteredTemplate",
40
53
  Validation_ValueIsRequired = "validation_valueIsRequired",
41
54
  Validation_ValueMustBeOneOfTheAvailableOptions = "validation_valueMustBeOneOfTheAvailableOptions",
42
55
  Admin_StartingDatabaseInitialization = "admin_startingDatabaseInitialization",