@ereactthohir/core 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +16 -22
  2. package/dist/database/Schema.d.ts +20 -0
  3. package/dist/database/Schema.d.ts.map +1 -0
  4. package/dist/database/Schema.js +73 -0
  5. package/dist/database/Schema.js.map +1 -0
  6. package/dist/foundation/Application.js +1 -1
  7. package/dist/foundation/Backup.d.ts +11 -0
  8. package/dist/foundation/Backup.d.ts.map +1 -0
  9. package/dist/foundation/Backup.js +48 -0
  10. package/dist/foundation/Backup.js.map +1 -0
  11. package/dist/foundation/Events.d.ts +9 -3
  12. package/dist/foundation/Events.d.ts.map +1 -1
  13. package/dist/foundation/Events.js +31 -7
  14. package/dist/foundation/Events.js.map +1 -1
  15. package/dist/foundation/Health.d.ts +20 -0
  16. package/dist/foundation/Health.d.ts.map +1 -0
  17. package/dist/foundation/Health.js +31 -0
  18. package/dist/foundation/Health.js.map +1 -0
  19. package/dist/foundation/Lang.d.ts +21 -0
  20. package/dist/foundation/Lang.d.ts.map +1 -0
  21. package/dist/foundation/Lang.js +37 -0
  22. package/dist/foundation/Lang.js.map +1 -0
  23. package/dist/foundation/Logger.d.ts +3 -0
  24. package/dist/foundation/Logger.d.ts.map +1 -1
  25. package/dist/foundation/Logger.js +21 -3
  26. package/dist/foundation/Logger.js.map +1 -1
  27. package/dist/foundation/Mail.d.ts +14 -0
  28. package/dist/foundation/Mail.d.ts.map +1 -0
  29. package/dist/foundation/Mail.js +26 -0
  30. package/dist/foundation/Mail.js.map +1 -0
  31. package/dist/foundation/Storage.d.ts +8 -0
  32. package/dist/foundation/Storage.d.ts.map +1 -0
  33. package/dist/foundation/Storage.js +35 -0
  34. package/dist/foundation/Storage.js.map +1 -0
  35. package/dist/http/ApiResponse.d.ts +9 -0
  36. package/dist/http/ApiResponse.d.ts.map +1 -1
  37. package/dist/http/ApiResponse.js +23 -1
  38. package/dist/http/ApiResponse.js.map +1 -1
  39. package/dist/http/Controller.d.ts +24 -0
  40. package/dist/http/Controller.d.ts.map +1 -1
  41. package/dist/http/Controller.js +50 -0
  42. package/dist/http/Controller.js.map +1 -1
  43. package/dist/http/ExceptionHandler.d.ts +3 -1
  44. package/dist/http/ExceptionHandler.d.ts.map +1 -1
  45. package/dist/http/ExceptionHandler.js +151 -8
  46. package/dist/http/ExceptionHandler.js.map +1 -1
  47. package/dist/http/Kernel.d.ts +1 -0
  48. package/dist/http/Kernel.d.ts.map +1 -1
  49. package/dist/http/Kernel.js +2 -0
  50. package/dist/http/Kernel.js.map +1 -1
  51. package/dist/http/Middleware/SetLocale.d.ts +12 -0
  52. package/dist/http/Middleware/SetLocale.d.ts.map +1 -0
  53. package/dist/http/Middleware/SetLocale.js +20 -0
  54. package/dist/http/Middleware/SetLocale.js.map +1 -0
  55. package/dist/http/Request.d.ts +1 -1
  56. package/dist/http/Request.d.ts.map +1 -1
  57. package/dist/http/Request.js +9 -20
  58. package/dist/http/Request.js.map +1 -1
  59. package/dist/http/Resource.d.ts +23 -0
  60. package/dist/http/Resource.d.ts.map +1 -0
  61. package/dist/http/Resource.js +29 -0
  62. package/dist/http/Resource.js.map +1 -0
  63. package/dist/http/Router.d.ts +4 -0
  64. package/dist/http/Router.d.ts.map +1 -1
  65. package/dist/http/Router.js +35 -0
  66. package/dist/http/Router.js.map +1 -1
  67. package/dist/index.d.ts +16 -3
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +16 -3
  70. package/dist/index.js.map +1 -1
  71. package/dist/security/Encryption.d.ts +14 -0
  72. package/dist/security/Encryption.d.ts.map +1 -0
  73. package/dist/security/Encryption.js +36 -0
  74. package/dist/security/Encryption.js.map +1 -0
  75. package/dist/security/Hash.d.ts +16 -0
  76. package/dist/security/Hash.d.ts.map +1 -0
  77. package/dist/security/Hash.js +30 -0
  78. package/dist/security/Hash.js.map +1 -0
  79. package/dist/services/Ai.d.ts +26 -0
  80. package/dist/services/Ai.d.ts.map +1 -0
  81. package/dist/services/Ai.js +30 -0
  82. package/dist/services/Ai.js.map +1 -0
  83. package/dist/services/Broadcast.d.ts +12 -0
  84. package/dist/services/Broadcast.d.ts.map +1 -0
  85. package/dist/services/Broadcast.js +26 -0
  86. package/dist/services/Broadcast.js.map +1 -0
  87. package/dist/services/Payment.d.ts +41 -0
  88. package/dist/services/Payment.d.ts.map +1 -0
  89. package/dist/services/Payment.js +49 -0
  90. package/dist/services/Payment.js.map +1 -0
  91. package/dist/services/Search.d.ts +14 -0
  92. package/dist/services/Search.d.ts.map +1 -0
  93. package/dist/services/Search.js +25 -0
  94. package/dist/services/Search.js.map +1 -0
  95. package/dist/services/Validator.d.ts.map +1 -1
  96. package/dist/services/Validator.js +19 -0
  97. package/dist/services/Validator.js.map +1 -1
  98. package/dist/services/ai/GeminiDriver.d.ts +12 -0
  99. package/dist/services/ai/GeminiDriver.d.ts.map +1 -0
  100. package/dist/services/ai/GeminiDriver.js +23 -0
  101. package/dist/services/ai/GeminiDriver.js.map +1 -0
  102. package/dist/services/ai/OllamaDriver.d.ts +12 -0
  103. package/dist/services/ai/OllamaDriver.d.ts.map +1 -0
  104. package/dist/services/ai/OllamaDriver.js +22 -0
  105. package/dist/services/ai/OllamaDriver.js.map +1 -0
  106. package/dist/services/ai/OpenAiDriver.d.ts +12 -0
  107. package/dist/services/ai/OpenAiDriver.d.ts.map +1 -0
  108. package/dist/services/ai/OpenAiDriver.js +22 -0
  109. package/dist/services/ai/OpenAiDriver.js.map +1 -0
  110. package/dist/services/ai/index.d.ts +4 -0
  111. package/dist/services/ai/index.d.ts.map +1 -0
  112. package/dist/services/ai/index.js +20 -0
  113. package/dist/services/ai/index.js.map +1 -0
  114. package/dist/services/payments/DuitkuDriver.d.ts +14 -0
  115. package/dist/services/payments/DuitkuDriver.d.ts.map +1 -0
  116. package/dist/services/payments/DuitkuDriver.js +28 -0
  117. package/dist/services/payments/DuitkuDriver.js.map +1 -0
  118. package/dist/services/payments/DurianpayDriver.d.ts +12 -0
  119. package/dist/services/payments/DurianpayDriver.d.ts.map +1 -0
  120. package/dist/services/payments/DurianpayDriver.js +25 -0
  121. package/dist/services/payments/DurianpayDriver.js.map +1 -0
  122. package/dist/services/payments/MidtransDriver.d.ts +14 -0
  123. package/dist/services/payments/MidtransDriver.d.ts.map +1 -0
  124. package/dist/services/payments/MidtransDriver.js +31 -0
  125. package/dist/services/payments/MidtransDriver.js.map +1 -0
  126. package/dist/services/payments/StripeDriver.d.ts +12 -0
  127. package/dist/services/payments/StripeDriver.d.ts.map +1 -0
  128. package/dist/services/payments/StripeDriver.js +28 -0
  129. package/dist/services/payments/StripeDriver.js.map +1 -0
  130. package/dist/services/payments/index.d.ts +5 -0
  131. package/dist/services/payments/index.d.ts.map +1 -0
  132. package/dist/services/payments/index.js +21 -0
  133. package/dist/services/payments/index.js.map +1 -0
  134. package/package.json +43 -38
package/README.md CHANGED
@@ -1,15 +1,14 @@
1
- # @ereactthohir/core
1
+ # @ereactthohir/core 🏛️
2
2
 
3
- The core framework for **EreactThohir**, providing the foundation for enterprise-grade fullstack development.
3
+ The core foundation of the **EreactThohir** framework.
4
4
 
5
- ## 🚀 Overview
5
+ ## 🚀 Features
6
6
 
7
- `@ereactthohir/core` includes the base classes and services for:
8
- - MVC Architecture
9
- - Service Container & Injection
10
- - Eloquent-like ORM (using Sawit DB)
11
- - Route Handlers
12
- - Validation & Security
7
+ - **High Performance Kernel**: Efficient request/response handling.
8
+ - **Advanced Routing**: Express-like routing with middleware support.
9
+ - **Dependency Injection**: Modular service providers.
10
+ - **Built-in Security**: Helmet, CORS, and CSRF support.
11
+ - **Typed Core**: Fully written in TypeScript for the best DX.
13
12
 
14
13
  ## 📦 Installation
15
14
 
@@ -17,23 +16,18 @@ The core framework for **EreactThohir**, providing the foundation for enterprise
17
16
  npm install @ereactthohir/core
18
17
  ```
19
18
 
20
- ## 🛠 Basic Usage
19
+ ## 🛠️ Usage
21
20
 
22
- ```typescript
23
- import { Model } from '@ereactthohir/core';
21
+ ```ts
22
+ import { Kernel, Route } from '@ereactthohir/core';
24
23
 
25
- export default class User extends Model {
26
- static table = 'users';
27
- }
24
+ Route.get('/', (req, res) => res.json({ hello: 'world' }));
28
25
 
29
- // Fetch all users
30
- const users = await User.all();
26
+ const kernel = new Kernel();
27
+ kernel.handle();
28
+ kernel.listen(3000);
31
29
  ```
32
30
 
33
- ## 👤 Author
34
-
35
- **KangPCode (Dhafa Nazula Permadi)**
36
-
37
31
  ## 📄 License
38
32
 
39
- MIT
33
+ Licensed under the [MIT License](../../LICENSE).
@@ -0,0 +1,20 @@
1
+ export declare class Blueprint {
2
+ private commands;
3
+ private table;
4
+ constructor(table: string);
5
+ increments(column: string): this;
6
+ string(column: string, length?: number): this;
7
+ text(column: string): this;
8
+ integer(column: string): this;
9
+ boolean(column: string): this;
10
+ timestamps(): this;
11
+ nullable(): this;
12
+ unique(): this;
13
+ default(value: any): this;
14
+ toString(): string;
15
+ }
16
+ export declare class Schema {
17
+ static create(table: string, callback: (table: Blueprint) => void): Promise<void>;
18
+ static dropIfExists(table: string): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=Schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/database/Schema.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,EAAE,MAAM;IAIlB,UAAU,CAAC,MAAM,EAAE,MAAM;IAKzB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY;IAK3C,IAAI,CAAC,MAAM,EAAE,MAAM;IAKnB,OAAO,CAAC,MAAM,EAAE,MAAM;IAKtB,OAAO,CAAC,MAAM,EAAE,MAAM;IAKtB,UAAU;IAMV,QAAQ;IAOR,MAAM;IAON,OAAO,CAAC,KAAK,EAAE,GAAG;IAQlB,QAAQ,IAAI,MAAM;CAG5B;AAED,qBAAa,MAAM;WACF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI;WAS1D,YAAY,CAAC,KAAK,EAAE,MAAM;CAI1C"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Schema = exports.Blueprint = void 0;
4
+ class Blueprint {
5
+ constructor(table) {
6
+ this.commands = [];
7
+ this.table = table;
8
+ }
9
+ increments(column) {
10
+ this.commands.push(`\`${column}\` INT AUTO_INCREMENT PRIMARY KEY`);
11
+ return this;
12
+ }
13
+ string(column, length = 255) {
14
+ this.commands.push(`\`${column}\` VARCHAR(${length})`);
15
+ return this;
16
+ }
17
+ text(column) {
18
+ this.commands.push(`\`${column}\` TEXT`);
19
+ return this;
20
+ }
21
+ integer(column) {
22
+ this.commands.push(`\`${column}\` INT`);
23
+ return this;
24
+ }
25
+ boolean(column) {
26
+ this.commands.push(`\`${column}\` TINYINT(1)`);
27
+ return this;
28
+ }
29
+ timestamps() {
30
+ this.commands.push(`\`created_at\` TIMESTAMP DEFAULT CURRENT_TIMESTAMP`);
31
+ this.commands.push(`\`updated_at\` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`);
32
+ return this;
33
+ }
34
+ nullable() {
35
+ if (this.commands.length > 0) {
36
+ this.commands[this.commands.length - 1] += ' NULL';
37
+ }
38
+ return this;
39
+ }
40
+ unique() {
41
+ if (this.commands.length > 0) {
42
+ this.commands[this.commands.length - 1] += ' UNIQUE';
43
+ }
44
+ return this;
45
+ }
46
+ default(value) {
47
+ if (this.commands.length > 0) {
48
+ const formattedValue = typeof value === 'string' ? `'${value}'` : value;
49
+ this.commands[this.commands.length - 1] += ` DEFAULT ${formattedValue}`;
50
+ }
51
+ return this;
52
+ }
53
+ toString() {
54
+ return `CREATE TABLE IF NOT EXISTS \`${this.table}\` (\n ${this.commands.join(',\n ')}\n);`;
55
+ }
56
+ }
57
+ exports.Blueprint = Blueprint;
58
+ class Schema {
59
+ static async create(table, callback) {
60
+ const blueprint = new Blueprint(table);
61
+ callback(blueprint);
62
+ const sql = blueprint.toString();
63
+ console.log(`[Schema] Creating table: ${table}`);
64
+ console.log(sql);
65
+ // Link to database driver here
66
+ }
67
+ static async dropIfExists(table) {
68
+ console.log(`[Schema] Dropping table: ${table}`);
69
+ console.log(`DROP TABLE IF EXISTS \`${table}\``);
70
+ }
71
+ }
72
+ exports.Schema = Schema;
73
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/database/Schema.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ class Application extends Container_1.Container {
14
14
  super();
15
15
  this.providers = [];
16
16
  this.isBooted = false;
17
- this.version = '1.0.0';
17
+ this.version = '1.4.0';
18
18
  this.basePath = basePath;
19
19
  this.config = new Config_1.Config();
20
20
  this.hooks = new Hooks_1.Hooks();
@@ -0,0 +1,11 @@
1
+ export declare class Backup {
2
+ /**
3
+ * Run the backup process
4
+ */
5
+ static run(): Promise<string>;
6
+ /**
7
+ * List all available backups
8
+ */
9
+ static list(): Promise<string[]>;
10
+ }
11
+ //# sourceMappingURL=Backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Backup.d.ts","sourceRoot":"","sources":["../../src/foundation/Backup.ts"],"names":[],"mappings":"AAKA,qBAAa,MAAM;IACf;;OAEG;WACiB,GAAG;IAyBvB;;OAEG;WACiB,IAAI;CAO3B"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Backup = void 0;
7
+ const Storage_1 = require("./Storage");
8
+ const Logger_1 = require("./Logger");
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ class Backup {
12
+ /**
13
+ * Run the backup process
14
+ */
15
+ static async run() {
16
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
17
+ const backupName = `backup-${timestamp}.json`;
18
+ Logger_1.Logger.info('Starting system backup...');
19
+ try {
20
+ // Simplified: In real app, this would dump database and zip storage
21
+ const data = {
22
+ version: '1.4.0',
23
+ timestamp: new Date().toISOString(),
24
+ tables: ['users', 'products', 'orders'],
25
+ disk_usage: '45MB'
26
+ };
27
+ await Storage_1.Storage.put(`backups/${backupName}`, JSON.stringify(data, null, 2));
28
+ Logger_1.Logger.success(`Backup completed: backups/${backupName}`);
29
+ return backupName;
30
+ }
31
+ catch (error) {
32
+ Logger_1.Logger.error('Backup failed:', error);
33
+ throw error;
34
+ }
35
+ }
36
+ /**
37
+ * List all available backups
38
+ */
39
+ static async list() {
40
+ const backupDir = path_1.default.join(process.cwd(), 'storage/app/backups');
41
+ if (await fs_extra_1.default.pathExists(backupDir)) {
42
+ return await fs_extra_1.default.readdir(backupDir);
43
+ }
44
+ return [];
45
+ }
46
+ }
47
+ exports.Backup = Backup;
48
+ //# sourceMappingURL=Backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Backup.js","sourceRoot":"","sources":["../../src/foundation/Backup.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAoC;AACpC,qCAAkC;AAClC,gDAAwB;AACxB,wDAA0B;AAE1B,MAAa,MAAM;IACf;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,GAAG;QACnB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,CAAC;QAE9C,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEzC,IAAI,CAAC;YACD,oEAAoE;YACpE,MAAM,IAAI,GAAG;gBACT,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;gBACvC,UAAU,EAAE,MAAM;aACrB,CAAC;YAEF,MAAM,iBAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE1E,eAAM,CAAC,OAAO,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;YAC1D,OAAO,UAAU,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI;QACpB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAClE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,MAAM,kBAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAvCD,wBAuCC"}
@@ -1,8 +1,14 @@
1
- type Listener = (data: any) => void;
1
+ type Listener = (data: any) => void | Promise<void>;
2
2
  export declare class EventDispatcher {
3
3
  private listeners;
4
- on(event: string, listener: Listener): void;
5
- emit(event: string, data: any): void;
4
+ /**
5
+ * Register an event listener.
6
+ */
7
+ listen(event: string | any, listener: Listener): void;
8
+ /**
9
+ * Dispatch an event.
10
+ */
11
+ dispatch(event: string | any, data?: any): Promise<void>;
6
12
  }
7
13
  export declare const Events: EventDispatcher;
8
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/foundation/Events.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;AAEpC,qBAAa,eAAe;IACxB,OAAO,CAAC,SAAS,CAAsC;IAEhD,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAOpC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;CAMvC;AAED,eAAO,MAAM,MAAM,iBAAwB,CAAC"}
1
+ {"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/foundation/Events.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpD,qBAAa,eAAe;IACxB,OAAO,CAAC,SAAS,CAAsC;IAEvD;;OAEG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,QAAQ;IAQrD;;OAEG;IACU,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG;CAuBxD;AAED,eAAO,MAAM,MAAM,iBAAwB,CAAC"}
@@ -5,16 +5,40 @@ class EventDispatcher {
5
5
  constructor() {
6
6
  this.listeners = new Map();
7
7
  }
8
- on(event, listener) {
9
- if (!this.listeners.has(event)) {
10
- this.listeners.set(event, []);
8
+ /**
9
+ * Register an event listener.
10
+ */
11
+ listen(event, listener) {
12
+ const eventName = typeof event === 'string' ? event : event.name;
13
+ if (!this.listeners.has(eventName)) {
14
+ this.listeners.set(eventName, []);
11
15
  }
12
- this.listeners.get(event).push(listener);
16
+ this.listeners.get(eventName).push(listener);
13
17
  }
14
- emit(event, data) {
15
- const eventListeners = this.listeners.get(event);
18
+ /**
19
+ * Dispatch an event.
20
+ */
21
+ async dispatch(event, data) {
22
+ let eventName;
23
+ let eventData;
24
+ if (typeof event === 'string') {
25
+ eventName = event;
26
+ eventData = data;
27
+ }
28
+ else {
29
+ eventName = event.constructor.name;
30
+ eventData = event;
31
+ }
32
+ const eventListeners = this.listeners.get(eventName);
16
33
  if (eventListeners) {
17
- eventListeners.forEach(listener => listener(data));
34
+ await Promise.all(eventListeners.map(listener => {
35
+ try {
36
+ return Promise.resolve(listener(eventData));
37
+ }
38
+ catch (error) {
39
+ console.error(`Error in event listener for ${eventName}:`, error);
40
+ }
41
+ }));
18
42
  }
19
43
  }
20
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Events.js","sourceRoot":"","sources":["../../src/foundation/Events.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAA5B;QACY,cAAS,GAA4B,IAAI,GAAG,EAAE,CAAC;IAe3D,CAAC;IAbU,EAAE,CAAC,KAAa,EAAE,QAAkB;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,IAAI,CAAC,KAAa,EAAE,IAAS;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,cAAc,EAAE,CAAC;YACjB,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;CACJ;AAhBD,0CAgBC;AAEY,QAAA,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"Events.js","sourceRoot":"","sources":["../../src/foundation/Events.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAA5B;QACY,cAAS,GAA4B,IAAI,GAAG,EAAE,CAAC;IAuC3D,CAAC;IArCG;;OAEG;IACI,MAAM,CAAC,KAAmB,EAAE,QAAkB;QACjD,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,KAAmB,EAAE,IAAU;QACjD,IAAI,SAAiB,CAAC;QACtB,IAAI,SAAc,CAAC;QAEnB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,SAAS,GAAG,KAAK,CAAC;YAClB,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;YACnC,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC5C,IAAI,CAAC;oBACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;gBACtE,CAAC;YACL,CAAC,CAAC,CAAC,CAAC;QACR,CAAC;IACL,CAAC;CACJ;AAxCD,0CAwCC;AAEY,QAAA,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface HealthResult {
2
+ status: 'ok' | 'warning' | 'error';
3
+ details: Record<string, {
4
+ status: 'ok' | 'error';
5
+ message?: string;
6
+ meta?: any;
7
+ }>;
8
+ }
9
+ export type HealthChecker = () => Promise<{
10
+ status: 'ok' | 'error';
11
+ message?: string;
12
+ meta?: any;
13
+ }>;
14
+ export declare class Health {
15
+ private checkers;
16
+ check(name: string, checker: HealthChecker): void;
17
+ run(): Promise<HealthResult>;
18
+ }
19
+ export declare const HealthCheck: Health;
20
+ //# sourceMappingURL=Health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Health.d.ts","sourceRoot":"","sources":["../../src/foundation/Health.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;CACrF;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;IAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAAC;AAEpG,qBAAa,MAAM;IACf,OAAO,CAAC,QAAQ,CAAyC;IAElD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAIpC,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;CAiB5C;AAED,eAAO,MAAM,WAAW,QAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HealthCheck = exports.Health = void 0;
4
+ class Health {
5
+ constructor() {
6
+ this.checkers = new Map();
7
+ }
8
+ check(name, checker) {
9
+ this.checkers.set(name, checker);
10
+ }
11
+ async run() {
12
+ const details = {};
13
+ let overallStatus = 'ok';
14
+ for (const [name, checker] of this.checkers) {
15
+ try {
16
+ const result = await checker();
17
+ details[name] = result;
18
+ if (result.status === 'error')
19
+ overallStatus = 'error';
20
+ }
21
+ catch (err) {
22
+ details[name] = { status: 'error', message: err.message };
23
+ overallStatus = 'error';
24
+ }
25
+ }
26
+ return { status: overallStatus, details };
27
+ }
28
+ }
29
+ exports.Health = Health;
30
+ exports.HealthCheck = new Health();
31
+ //# sourceMappingURL=Health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Health.js","sourceRoot":"","sources":["../../src/foundation/Health.ts"],"names":[],"mappings":";;;AAOA,MAAa,MAAM;IAAnB;QACY,aAAQ,GAA+B,IAAI,GAAG,EAAE,CAAC;IAuB7D,CAAC;IArBU,KAAK,CAAC,IAAY,EAAE,OAAsB;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,aAAa,GAA2B,IAAI,CAAC;QAEjD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;oBAAE,aAAa,GAAG,OAAO,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC1D,aAAa,GAAG,OAAO,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;CACJ;AAxBD,wBAwBC;AAEY,QAAA,WAAW,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ export declare class Lang {
2
+ private static locales;
3
+ private static currentLocale;
4
+ /**
5
+ * Set the current locale.
6
+ */
7
+ static setLocale(locale: string): void;
8
+ /**
9
+ * Add translations for a locale.
10
+ */
11
+ static add(locale: string, translations: Record<string, string>): void;
12
+ /**
13
+ * Get the translation for a key.
14
+ */
15
+ static get(key: string, replacements?: Record<string, string>): string;
16
+ /**
17
+ * Shortcut for get.
18
+ */
19
+ static __(key: string, replacements?: Record<string, string>): string;
20
+ }
21
+ //# sourceMappingURL=Lang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lang.d.ts","sourceRoot":"","sources":["../../src/foundation/Lang.ts"],"names":[],"mappings":"AAAA,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAC,OAAO,CAA8C;IACpE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAgB;IAE5C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM;IAI/B;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI/D;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM;IAU1E;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM;CAG5E"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Lang = void 0;
4
+ class Lang {
5
+ /**
6
+ * Set the current locale.
7
+ */
8
+ static setLocale(locale) {
9
+ this.currentLocale = locale;
10
+ }
11
+ /**
12
+ * Add translations for a locale.
13
+ */
14
+ static add(locale, translations) {
15
+ this.locales[locale] = { ...this.locales[locale], ...translations };
16
+ }
17
+ /**
18
+ * Get the translation for a key.
19
+ */
20
+ static get(key, replacements = {}) {
21
+ let line = this.locales[this.currentLocale]?.[key] || key;
22
+ Object.entries(replacements).forEach(([k, v]) => {
23
+ line = line.replace(`:${k}`, v);
24
+ });
25
+ return line;
26
+ }
27
+ /**
28
+ * Shortcut for get.
29
+ */
30
+ static __(key, replacements = {}) {
31
+ return this.get(key, replacements);
32
+ }
33
+ }
34
+ exports.Lang = Lang;
35
+ Lang.locales = {};
36
+ Lang.currentLocale = 'en';
37
+ //# sourceMappingURL=Lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lang.js","sourceRoot":"","sources":["../../src/foundation/Lang.ts"],"names":[],"mappings":";;;AAAA,MAAa,IAAI;IAIb;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAc;QAC3B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,YAAoC;QAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,eAAuC,EAAE;QAC7D,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAE1D,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,GAAW,EAAE,eAAuC,EAAE;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACvC,CAAC;;AApCL,oBAqCC;AApCkB,YAAO,GAA2C,EAAE,CAAC;AACrD,kBAAa,GAAW,IAAI,CAAC"}
@@ -1,6 +1,9 @@
1
1
  export declare class Logger {
2
+ private static getTime;
2
3
  static info(message: string): void;
4
+ static success(message: string): void;
3
5
  static error(message: string, error?: any): void;
4
6
  static warn(message: string): void;
7
+ static debug(message: string): void;
5
8
  }
6
9
  //# sourceMappingURL=Logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/foundation/Logger.ts"],"names":[],"mappings":"AAAA,qBAAa,MAAM;IACf,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAI3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAIzC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;CAG9B"}
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/foundation/Logger.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACf,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAI3B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM;IAI9B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAOzC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAI3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM;CAK/B"}
@@ -1,15 +1,33 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Logger = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
4
8
  class Logger {
9
+ static getTime() {
10
+ return new Date().toISOString();
11
+ }
5
12
  static info(message) {
6
- console.log(`[INFO] [${new Date().toISOString()}] ${message}`);
13
+ console.log(`${chalk_1.default.blue('[INFO]')} [${this.getTime()}] ${message}`);
14
+ }
15
+ static success(message) {
16
+ console.log(`${chalk_1.default.green('[SUCCESS]')} [${this.getTime()}] ${message}`);
7
17
  }
8
18
  static error(message, error) {
9
- console.error(`[ERROR] [${new Date().toISOString()}] ${message}`, error);
19
+ console.error(`${chalk_1.default.red('[ERROR]')} [${this.getTime()}] ${message}`);
20
+ if (error) {
21
+ console.error(error);
22
+ }
10
23
  }
11
24
  static warn(message) {
12
- console.warn(`[WARN] [${new Date().toISOString()}] ${message}`);
25
+ console.warn(`${chalk_1.default.yellow('[WARN]')} [${this.getTime()}] ${message}`);
26
+ }
27
+ static debug(message) {
28
+ if (process.env.APP_DEBUG === 'true') {
29
+ console.log(`${chalk_1.default.magenta('[DEBUG]')} [${this.getTime()}] ${message}`);
30
+ }
13
31
  }
14
32
  }
15
33
  exports.Logger = Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/foundation/Logger.ts"],"names":[],"mappings":";;;AAAA,MAAa,MAAM;IACf,MAAM,CAAC,IAAI,CAAC,OAAe;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,KAAW;QACrC,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe;QACvB,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;CACJ;AAZD,wBAYC"}
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/foundation/Logger.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,MAAa,MAAM;IACP,MAAM,CAAC,OAAO;QAClB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAe;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,KAAW;QACrC,OAAO,CAAC,KAAK,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;QACxE,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe;QACvB,OAAO,CAAC,IAAI,CAAC,GAAG,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;CACJ;AA7BD,wBA6BC"}
@@ -0,0 +1,14 @@
1
+ export interface MailConfig {
2
+ driver: 'smtp' | 'log' | 'ses';
3
+ host?: string;
4
+ port?: number;
5
+ user?: string;
6
+ pass?: string;
7
+ from: string;
8
+ }
9
+ export declare class Mail {
10
+ private static config;
11
+ static setConfig(config: MailConfig): void;
12
+ static send(to: string, subject: string, body: string): Promise<boolean>;
13
+ }
14
+ //# sourceMappingURL=Mail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mail.d.ts","sourceRoot":"","sources":["../../src/foundation/Mail.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAC,MAAM,CAGnB;IAEF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU;WAItB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAY9D"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mail = void 0;
4
+ const Logger_1 = require("./Logger");
5
+ class Mail {
6
+ static setConfig(config) {
7
+ this.config = config;
8
+ }
9
+ static async send(to, subject, body) {
10
+ if (this.config.driver === 'log') {
11
+ Logger_1.Logger.info(`Mailing to: ${to}`);
12
+ Logger_1.Logger.info(`Subject: ${subject}`);
13
+ Logger_1.Logger.info(`Body: ${body}`);
14
+ return true;
15
+ }
16
+ // TODO: Implement SMTP/SES drivers
17
+ Logger_1.Logger.warn('Mail driver not fully implemented. Falling back to log.');
18
+ return true;
19
+ }
20
+ }
21
+ exports.Mail = Mail;
22
+ Mail.config = {
23
+ driver: 'log',
24
+ from: 'noreply@ereactthohir.com'
25
+ };
26
+ //# sourceMappingURL=Mail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mail.js","sourceRoot":"","sources":["../../src/foundation/Mail.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAWlC,MAAa,IAAI;IAMb,MAAM,CAAC,SAAS,CAAC,MAAkB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,OAAe,EAAE,IAAY;QACvD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACjC,eAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;YACnC,eAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IAChB,CAAC;;AArBL,oBAsBC;AArBkB,WAAM,GAAe;IAChC,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,0BAA0B;CACnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class Storage {
2
+ private static root;
3
+ static put(filePath: string, content: string | Buffer): Promise<void>;
4
+ static get(filePath: string): Promise<NonSharedBuffer | null>;
5
+ static delete(filePath: string): Promise<void>;
6
+ static exists(filePath: string): Promise<boolean>;
7
+ }
8
+ //# sourceMappingURL=Storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../src/foundation/Storage.ts"],"names":[],"mappings":"AAIA,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC,IAAI,CAA2C;WAEjD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;WAO9C,GAAG,CAAC,QAAQ,EAAE,MAAM;WAQpB,MAAM,CAAC,QAAQ,EAAE,MAAM;WAMvB,MAAM,CAAC,QAAQ,EAAE,MAAM;CAGvC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Storage = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const Logger_1 = require("./Logger");
10
+ class Storage {
11
+ static async put(filePath, content) {
12
+ const fullPath = path_1.default.join(this.root, filePath);
13
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(fullPath));
14
+ await fs_extra_1.default.writeFile(fullPath, content);
15
+ Logger_1.Logger.success(`File stored: ${filePath}`);
16
+ }
17
+ static async get(filePath) {
18
+ const fullPath = path_1.default.join(this.root, filePath);
19
+ if (await fs_extra_1.default.pathExists(fullPath)) {
20
+ return await fs_extra_1.default.readFile(fullPath);
21
+ }
22
+ return null;
23
+ }
24
+ static async delete(filePath) {
25
+ const fullPath = path_1.default.join(this.root, filePath);
26
+ await fs_extra_1.default.remove(fullPath);
27
+ Logger_1.Logger.info(`File deleted: ${filePath}`);
28
+ }
29
+ static async exists(filePath) {
30
+ return await fs_extra_1.default.pathExists(path_1.default.join(this.root, filePath));
31
+ }
32
+ }
33
+ exports.Storage = Storage;
34
+ Storage.root = path_1.default.join(process.cwd(), 'storage/app');
35
+ //# sourceMappingURL=Storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Storage.js","sourceRoot":"","sources":["../../src/foundation/Storage.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;AAC1B,gDAAwB;AACxB,qCAAkC;AAElC,MAAa,OAAO;IAGhB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,OAAwB;QACvD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtC,eAAM,CAAC,OAAO,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAgB;QAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAgB;QAChC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,eAAM,CAAC,IAAI,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAgB;QAChC,OAAO,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;;AA1BL,0BA2BC;AA1BkB,YAAI,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC"}