@gaias/basenode 1.3.6 → 1.3.9

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.
package/README.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # @gaias/basenode
2
2
 
3
- [![Version](https://img.shields.io/badge/version-1.0.24-blue.svg)](https://github.com/gaias/basenode)
3
+ [![Version](https://img.shields.io/badge/version-1.3.6-blue.svg)](https://github.com/gaias/basenode)
4
4
  [![Node](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org)
5
5
  [![License](https://img.shields.io/badge/license-UNLICENSED-red.svg)]()
6
6
 
7
+ [English](#english) | [简体中文](#简体中文)
8
+
9
+ ---
10
+
11
+ <a name="english"></a>
12
+
13
+ ## English
14
+
7
15
  A comprehensive Node.js API development framework built on Koa, TypeORM, TypeDI, and routing-controllers. Provides a microframework architecture with built-in support for RESTful APIs, WebSocket controllers, database ORM, distributed events, Redis caching, and API gateway integration.
8
16
 
9
- ## Features
17
+ ### Features
10
18
 
11
19
  - **Modern Framework Stack**: Koa 3.x, TypeORM 0.3.x, TypeDI, routing-controllers
12
20
  - **TypeScript First**: Full TypeScript support with decorators and strict type checking
@@ -24,9 +32,9 @@ A comprehensive Node.js API development framework built on Koa, TypeORM, TypeDI,
24
32
  - **OpenAPI**: Automatic OpenAPI/Swagger documentation generation
25
33
  - **Development Tools**: Hot reload, linting, testing, code generation
26
34
 
27
- ## Quick Start
35
+ ### Quick Start
28
36
 
29
- ### Prerequisites
37
+ #### Prerequisites
30
38
 
31
39
  - Node.js >= 18.0.0
32
40
  - Yarn >= 1.22.x
@@ -34,7 +42,7 @@ A comprehensive Node.js API development framework built on Koa, TypeORM, TypeDI,
34
42
  - Redis 6.0+ (optional, for caching)
35
43
  - RabbitMQ 3.8+ (optional, for distributed events)
36
44
 
37
- ### Installation
45
+ #### Installation
38
46
 
39
47
  ```bash
40
48
  # Clone the repository
@@ -45,7 +53,7 @@ cd basenode
45
53
  yarn install
46
54
  ```
47
55
 
48
- ### Configuration
56
+ #### Configuration
49
57
 
50
58
  1. **Database Configuration**
51
59
 
@@ -93,7 +101,7 @@ API_GATEWAY_HOST_PORT=192.168.1.100:9180 # Gateway admin API address
93
101
  DOMAINS=example.com,*.example.com # Allowed domains for gateway
94
102
  ```
95
103
 
96
- ### Running the Application
104
+ #### Running the Application
97
105
 
98
106
  ```bash
99
107
  # Development mode with hot reload
@@ -110,7 +118,7 @@ The application will start on `http://localhost:3000` (or configured port).
110
118
 
111
119
  Access the health check endpoint: `http://localhost:3000/_healthcheck`
112
120
 
113
- ## Project Structure
121
+ ### Project Structure
114
122
 
115
123
  ```
116
124
  .
@@ -164,9 +172,9 @@ Access the health check endpoint: `http://localhost:3000/_healthcheck`
164
172
  └── keys/ # JWT keys (generated)
165
173
  ```
166
174
 
167
- ## Development Commands
175
+ ### Development Commands
168
176
 
169
- ### Running
177
+ #### Running
170
178
 
171
179
  ```bash
172
180
  # Development with hot reload
@@ -179,7 +187,7 @@ yarn devPro
179
187
  yarn ncc:run
180
188
  ```
181
189
 
182
- ### Building
190
+ #### Building
183
191
 
184
192
  ```bash
185
193
  # Build for publishing
@@ -189,7 +197,7 @@ yarn build:publish
189
197
  yarn ncc:build
190
198
  ```
191
199
 
192
- ### Database Code Generation
200
+ #### Database Code Generation
193
201
 
194
202
  ```bash
195
203
  # Generate entities from database schema
@@ -207,7 +215,7 @@ yarn gen:idx
207
215
 
208
216
  **Note**: Define tables to generate in `gen_db.json` before running.
209
217
 
210
- ### Testing & Quality
218
+ #### Testing & Quality
211
219
 
212
220
  ```bash
213
221
  # Run tests
@@ -226,7 +234,7 @@ yarn lint
226
234
  yarn lint:fix
227
235
  ```
228
236
 
229
- ### Security
237
+ #### Security
230
238
 
231
239
  ```bash
232
240
  # Run security audit
@@ -244,7 +252,7 @@ yarn security:json
244
252
 
245
253
  See [docs/SECURITY.md](docs/SECURITY.md) for comprehensive security guidelines.
246
254
 
247
- ### Dependency Management
255
+ #### Dependency Management
248
256
 
249
257
  ```bash
250
258
  # Check for outdated dependencies
@@ -254,7 +262,7 @@ yarn deps:check
254
262
  yarn deps:update
255
263
  ```
256
264
 
257
- ### Other Tools
265
+ #### Other Tools
258
266
 
259
267
  ```bash
260
268
  # Generate RSA keys for JWT
@@ -264,9 +272,9 @@ yarn gen:keys
264
272
  yarn buildNum
265
273
  ```
266
274
 
267
- ## Usage Examples
275
+ ### Usage Examples
268
276
 
269
- ### Creating a RESTful Controller
277
+ #### Creating a RESTful Controller
270
278
 
271
279
  ```typescript
272
280
  import { rest, di } from '@/libs/deps';
@@ -297,7 +305,7 @@ export class UserController extends UniversalController {
297
305
  }
298
306
  ```
299
307
 
300
- ### Creating a Service with Repository
308
+ #### Creating a Service with Repository
301
309
 
302
310
  ```typescript
303
311
  import { di } from '@/libs/deps';
@@ -317,7 +325,7 @@ export class UserService extends UniversalService<User> {
317
325
  }
318
326
  ```
319
327
 
320
- ### Validation with VO (Value Object)
328
+ #### Validation with VO (Value Object)
321
329
 
322
330
  ```typescript
323
331
  import { cv } from '@/libs/deps';
@@ -341,7 +349,7 @@ export class UserVo {
341
349
  }
342
350
  ```
343
351
 
344
- ### Pagination
352
+ #### Pagination
345
353
 
346
354
  ```typescript
347
355
  import { rest, di } from '@/libs/deps';
@@ -362,7 +370,7 @@ export class UserController {
362
370
  }
363
371
  ```
364
372
 
365
- ### Caching
373
+ #### Caching
366
374
 
367
375
  ```typescript
368
376
  import { rest, di } from '@/libs/deps';
@@ -395,7 +403,7 @@ export class DataController {
395
403
  }
396
404
  ```
397
405
 
398
- ### Distributed Events
406
+ #### Distributed Events
399
407
 
400
408
  ```typescript
401
409
  import { di } from '@/libs/deps';
@@ -435,34 +443,34 @@ export class UserEventHandler {
435
443
  }
436
444
  ```
437
445
 
438
- ## Key Technologies
446
+ ### Key Technologies
439
447
 
440
- ### Core Framework
448
+ #### Core Framework
441
449
  - **[Koa](https://koajs.com/)** 3.0.3 - Lightweight web framework
442
450
  - **[routing-controllers](https://github.com/typestack/routing-controllers)** 0.11.3 - Decorator-based routing
443
451
  - **[socket-controllers](https://github.com/typestack/socket-controllers)** 0.3.1 - WebSocket controllers
444
452
  - **[TypeDI](https://github.com/typestack/typedi)** 0.10.0 - Dependency injection
445
453
  - **[microframework](https://github.com/typestack/microframework)** 0.6.4 - Loader pattern
446
454
 
447
- ### Data Layer
455
+ #### Data Layer
448
456
  - **[TypeORM](https://typeorm.io/)** 0.3.27 - SQL ORM
449
457
  - **[typeorm-transactional](https://github.com/Aliheym/typeorm-transactional)** 0.5.0 - Transaction management
450
458
  - **[mysql2](https://github.com/sidorares/node-mysql2)** 3.15.2 - MySQL/MariaDB driver
451
459
  - **[class-validator](https://github.com/typestack/class-validator)** 0.14.2 - Validation
452
460
  - **[class-transformer](https://github.com/typestack/class-transformer)** 0.5.1 - Transformation
453
461
 
454
- ### Caching & Messaging
462
+ #### Caching & Messaging
455
463
  - **[ioredis](https://github.com/luin/ioredis)** 5.8.1 - Redis client
456
464
  - **[amqplib](https://github.com/amqp-node/amqplib)** 0.10.9 - RabbitMQ client
457
465
 
458
- ### Utilities
466
+ #### Utilities
459
467
  - **[pino](https://github.com/pinojs/pino)** 10.0.0 - High-performance logger
460
468
  - **[jsonwebtoken](https://github.com/auth0/node-jsonwebtoken)** 9.0.2 - JWT authentication
461
469
  - **[nanoid](https://github.com/ai/nanoid)** 5.1.6 - Unique ID generator
462
470
  - **[axios](https://github.com/axios/axios)** 1.12.2 - HTTP client
463
471
  - **[helmet](https://github.com/helmetjs/helmet)** 8.1.0 - Security headers
464
472
 
465
- ## Documentation
473
+ ### Documentation
466
474
 
467
475
  - **[CLAUDE.md](CLAUDE.md)** - Comprehensive framework documentation
468
476
  - **[docs/SECURITY.md](docs/SECURITY.md)** - Security guidelines and best practices
@@ -472,7 +480,7 @@ export class UserEventHandler {
472
480
  - **[docs/BUILD_AND_USE.md](docs/BUILD_AND_USE.md)** - Building and usage instructions
473
481
  - **[docs/DOCKER_OPTIMIZATION.md](docs/DOCKER_OPTIMIZATION.md)** - Docker optimization guide
474
482
 
475
- ### Module Documentation
483
+ #### Module Documentation
476
484
 
477
485
  - `src/libs/deps/README.md` - Unified dependency exports
478
486
  - `src/libs/validator/README.md` - Validation helpers
@@ -486,7 +494,7 @@ export class UserEventHandler {
486
494
  - `src/libs/type/README.md` - Type utilities
487
495
  - `src/libs/universal/README.md` - Universal CRUD patterns
488
496
 
489
- ## Security
497
+ ### Security
490
498
 
491
499
  This project takes security seriously. We use:
492
500
 
@@ -500,7 +508,7 @@ See [docs/SECURITY.md](docs/SECURITY.md) for detailed information.
500
508
 
501
509
  **Important**: Always use `@IsSafeUrl()` instead of `@IsUrl()` to avoid CVE-2025-56200.
502
510
 
503
- ## Contributing
511
+ ### Contributing
504
512
 
505
513
  Contributions are welcome! Please follow these guidelines:
506
514
 
@@ -511,7 +519,7 @@ Contributions are welcome! Please follow these guidelines:
511
519
  5. Run security check: `yarn security:check`
512
520
  6. Create a pull request to `develope` branch
513
521
 
514
- ### Development Guidelines
522
+ #### Development Guidelines
515
523
 
516
524
  - Follow existing code conventions
517
525
  - Use TypeScript strict mode
@@ -519,7 +527,7 @@ Contributions are welcome! Please follow these guidelines:
519
527
  - Write tests for new features
520
528
  - Update documentation as needed
521
529
 
522
- ## Publishing
530
+ ### Publishing
523
531
 
524
532
  This is a private npm package. To publish:
525
533
 
@@ -543,48 +551,634 @@ yarn publish:github
543
551
 
544
552
  See [docs/PUBLISHING.md](docs/PUBLISHING.md) for detailed publishing instructions.
545
553
 
546
- ## Troubleshooting
554
+ ### Troubleshooting
547
555
 
548
- ### Database Connection Issues
556
+ #### Database Connection Issues
549
557
 
550
558
  - Verify `cfg/database.yml` connection string
551
559
  - Check MariaDB/MySQL is running
552
560
  - Ensure database user has proper permissions
553
561
 
554
- ### Redis Connection Issues
562
+ #### Redis Connection Issues
555
563
 
556
564
  - Check Redis is running: `redis-cli ping`
557
565
  - Verify `cfg/redis.yml` settings
558
566
  - Can disable Redis by setting `disableRedis: true` in bootstrap
559
567
 
560
- ### TypeORM Entity Not Found
568
+ #### TypeORM Entity Not Found
561
569
 
562
570
  - Ensure entity is registered in bootstrap `entities` array
563
571
  - Check entity file has `@Entity()` decorator
564
572
  - Verify import path is correct
565
573
 
566
- ## License
574
+ ### License
567
575
 
568
576
  UNLICENSED - Private package
569
577
 
570
- ## Author
578
+ ### Author
571
579
 
572
580
  FOT Team
573
581
 
574
- ## Links
582
+ ### Links
575
583
 
576
584
  - [Repository](https://github.com/gaias/basenode)
577
585
  - [Issue Tracker](https://github.com/gaias/basenode/issues)
578
586
  - [npm Package](https://www.npmjs.com/package/@gaias/basenode)
579
587
 
580
- ## Version History
588
+ ### Version History
581
589
 
582
- - **1.0.24** (Current) - Latest updates and improvements
590
+ - **1.3.6** (Current) - Latest updates and improvements
583
591
  - **1.0.13** - Security enhancements and dependency updates
584
592
  - **1.0.0** - Initial release
585
593
 
586
594
  ---
587
595
 
588
- **Last Updated**: 2025-10-23
589
- **Framework Version**: 1.0.24
590
- **Build Number**: 251022024
596
+ <a name="简体中文"></a>
597
+
598
+ ## 简体中文
599
+
600
+ 一个基于 Koa、TypeORM、TypeDI 和 routing-controllers 构建的全面的 Node.js API 开发框架。提供微框架架构,内置支持 RESTful API、WebSocket 控制器、数据库 ORM、分布式事件、Redis 缓存和 API 网关集成。
601
+
602
+ ### 特性
603
+
604
+ - **现代框架栈**:Koa 3.x、TypeORM 0.3.x、TypeDI、routing-controllers
605
+ - **TypeScript 优先**:完整的 TypeScript 支持,包括装饰器和严格类型检查
606
+ - **RESTful 和 WebSocket**:同时支持 REST API 和 WebSocket 控制器
607
+ - **数据库 ORM**:TypeORM 支持 MySQL/MariaDB,自动生成实体
608
+ - **依赖注入**:基于 TypeDI 的 IoC 容器,实现清晰架构
609
+ - **验证**:class-validator 支持国际化错误消息
610
+ - **缓存**:双层缓存(L1 内存、L2 Redis)
611
+ - **分布式事件**:基于 RabbitMQ 的发布/订阅系统
612
+ - **API 网关**:APISIX 集成实现服务注册
613
+ - **领导者选举**:基于 Redis 的分布式系统领导者选举
614
+ - **健康检查**:内置健康检查端点和系统指标
615
+ - **分页**:完整的分页解决方案,支持排序
616
+ - **安全性**:内置安全特性、漏洞跟踪和缓解措施
617
+ - **OpenAPI**:自动生成 OpenAPI/Swagger 文档
618
+ - **开发工具**:热重载、代码检查、测试、代码生成
619
+
620
+ ### 快速开始
621
+
622
+ #### 系统要求
623
+
624
+ - Node.js >= 18.0.0
625
+ - Yarn >= 1.22.x
626
+ - MariaDB/MySQL 5.7+ 或 8.0+(生产环境)
627
+ - Redis 6.0+(可选,用于缓存)
628
+ - RabbitMQ 3.8+(可选,用于分布式事件)
629
+
630
+ #### 安装
631
+
632
+ ```bash
633
+ # 克隆仓库
634
+ git clone https://github.com/gaias/basenode.git
635
+ cd basenode
636
+
637
+ # 安装依赖
638
+ yarn install
639
+ ```
640
+
641
+ #### 配置
642
+
643
+ 1. **数据库配置**
644
+
645
+ 编辑 `cfg/database.yml`:
646
+ ```yaml
647
+ mariaDBUrl: mysql://用户名:密码@localhost:3306/数据库名
648
+ output: ./example
649
+ ```
650
+
651
+ 2. **应用配置**
652
+
653
+ 编辑 `cfg/application.yml`:
654
+ ```yaml
655
+ appName: example
656
+ version: 1
657
+ port: 3000
658
+ privateKeyPath: ./keys/privateKey
659
+ publicKeyPath: ./keys/publicKey
660
+ ```
661
+
662
+ 3. **Redis 配置**(可选)
663
+
664
+ 编辑 `cfg/redis.yml`:
665
+ ```yaml
666
+ host: localhost
667
+ port: 6379
668
+ password: 你的密码
669
+ db: 0
670
+ ```
671
+
672
+ 4. **RabbitMQ 配置**(可选)
673
+
674
+ 编辑 `cfg/rabbitmq.yml`:
675
+ ```yaml
676
+ url: amqp://localhost:5672
677
+ ```
678
+
679
+ 5. **环境变量**(可选)
680
+
681
+ 创建 `.env` 文件或导出变量:
682
+ ```bash
683
+ NODE_ENV=development # 环境:development、production、test
684
+ ENABLE_API_GATEWAY=true # 启用 APISIX 网关注册
685
+ API_GATEWAY_HOST_PORT=192.168.1.100:9180 # 网关管理 API 地址
686
+ DOMAINS=example.com,*.example.com # 网关允许的域名
687
+ ```
688
+
689
+ #### 运行应用
690
+
691
+ ```bash
692
+ # 开发模式(热重载)
693
+ yarn dev
694
+
695
+ # 开发模式(启用 API 网关)
696
+ yarn devPro
697
+
698
+ # 生产模式(构建后)
699
+ yarn ncc:run
700
+ ```
701
+
702
+ 应用将在 `http://localhost:3000`(或配置的端口)启动。
703
+
704
+ 访问健康检查端点:`http://localhost:3000/_healthcheck`
705
+
706
+ ### 项目结构
707
+
708
+ ```
709
+ .
710
+ ├── src/ # 框架源代码
711
+ │ ├── libs/ # 框架组件
712
+ │ │ ├── apisix/ # APISIX HTTP 客户端
713
+ │ │ ├── cache/ # 双层缓存系统
714
+ │ │ ├── configure/ # YAML 配置管理
715
+ │ │ ├── deps/ # 依赖库导出
716
+ │ │ ├── error/ # 错误处理
717
+ │ │ ├── gateway/ # API 网关集成
718
+ │ │ ├── generator/ # ID 生成(nanoid、snowflake)
719
+ │ │ ├── healthcheck/ # 健康检查端点
720
+ │ │ ├── koa/ # Koa 服务器设置
721
+ │ │ ├── leader/ # 基于 Redis 的领导者选举
722
+ │ │ ├── logger/ # Pino 日志包装器
723
+ │ │ ├── network/ # 网络工具
724
+ │ │ ├── orm/ # TypeORM 扩展
725
+ │ │ ├── pagination/ # 分页工具
726
+ │ │ ├── rabbitmq/ # RabbitMQ 分布式事件
727
+ │ │ ├── redis/ # Redis 客户端包装器
728
+ │ │ ├── register/ # API 路由注册
729
+ │ │ ├── type/ # 类型定义
730
+ │ │ ├── universal/ # 通用 CRUD 模式
731
+ │ │ └── validator/ # 验证辅助工具
732
+ │ ├── server/ # 启动逻辑
733
+ │ └── utils/ # 工具类(JWT、加密、YAML)
734
+ ├── example/ # 示例应用
735
+ │ ├── app.ts # 入口点
736
+ │ ├── controllers/ # RESTful 控制器
737
+ │ ├── wsControllers/ # WebSocket 控制器
738
+ │ ├── entities/ # TypeORM 实体
739
+ │ ├── repositories/ # 仓储类
740
+ │ ├── services/ # 业务逻辑服务
741
+ │ ├── vo/ # 值对象(DTO)
742
+ │ └── events/ # 分布式事件处理器
743
+ ├── cfg/ # YAML 配置文件
744
+ │ ├── application.yml # 应用设置
745
+ │ ├── database.yml # 数据库连接
746
+ │ ├── redis.yml # Redis 连接
747
+ │ ├── rabbitmq.yml # RabbitMQ 连接
748
+ │ ├── logger.yml # 日志设置
749
+ │ ├── apisix.apikey.yml # API 网关设置
750
+ │ └── openapi.yml # OpenAPI/Swagger 配置
751
+ ├── tools/ # 开发工具
752
+ │ ├── DBSchemaGenerator.ts # 从数据库生成实体
753
+ │ ├── RepositoryGenerator.ts # 生成仓储类
754
+ │ └── repository.mst # Mustache 模板
755
+ ├── docs/ # 文档
756
+ ├── k8s/ # Kubernetes 清单
757
+ └── keys/ # JWT 密钥(生成的)
758
+ ```
759
+
760
+ ### 开发命令
761
+
762
+ #### 运行
763
+
764
+ ```bash
765
+ # 开发模式(热重载)
766
+ yarn dev
767
+
768
+ # 开发模式(带 API 网关)
769
+ yarn devPro
770
+
771
+ # 运行编译后的应用
772
+ yarn ncc:run
773
+ ```
774
+
775
+ #### 构建
776
+
777
+ ```bash
778
+ # 构建用于发布
779
+ yarn build:publish
780
+
781
+ # 构建单文件可执行文件
782
+ yarn ncc:build
783
+ ```
784
+
785
+ #### 数据库代码生成
786
+
787
+ ```bash
788
+ # 从数据库架构生成实体
789
+ yarn gen:db-schema
790
+
791
+ # 生成仓储类
792
+ yarn gen:db-repo
793
+
794
+ # 生成实体和仓储
795
+ yarn gen:db
796
+
797
+ # 生成索引文件
798
+ yarn gen:idx
799
+ ```
800
+
801
+ **注意**:运行前在 `gen_db.json` 中定义要生成的表。
802
+
803
+ #### 测试与质量
804
+
805
+ ```bash
806
+ # 运行测试
807
+ yarn test
808
+
809
+ # 监视模式运行测试
810
+ yarn test:watch
811
+
812
+ # 带覆盖率运行测试
813
+ yarn test:coverage
814
+
815
+ # 类型检查和代码检查
816
+ yarn lint
817
+
818
+ # 自动修复代码检查问题
819
+ yarn lint:fix
820
+ ```
821
+
822
+ #### 安全
823
+
824
+ ```bash
825
+ # 运行安全审计
826
+ yarn security
827
+
828
+ # 显示审计摘要
829
+ yarn security:summary
830
+
831
+ # 增强安全检查(推荐)
832
+ yarn security:check
833
+
834
+ # 生成安全报告
835
+ yarn security:json
836
+ ```
837
+
838
+ 查看 [docs/SECURITY.md](docs/SECURITY.md) 了解全面的安全指南。
839
+
840
+ #### 依赖管理
841
+
842
+ ```bash
843
+ # 检查过时的依赖
844
+ yarn deps:check
845
+
846
+ # 更新依赖
847
+ yarn deps:update
848
+ ```
849
+
850
+ #### 其他工具
851
+
852
+ ```bash
853
+ # 为 JWT 生成 RSA 密钥
854
+ yarn gen:keys
855
+
856
+ # 更新构建编号
857
+ yarn buildNum
858
+ ```
859
+
860
+ ### 使用示例
861
+
862
+ #### 创建 RESTful 控制器
863
+
864
+ ```typescript
865
+ import { rest, di } from '@/libs/deps';
866
+ import { UniversalController } from '@/libs/universal';
867
+ import { UserService } from './services/UserService';
868
+ import { UserVo } from './vo/UserVo';
869
+
870
+ @rest.JsonController('/api/users')
871
+ @di.Service()
872
+ export class UserController extends UniversalController {
873
+ @di.Inject()
874
+ private userService: UserService;
875
+
876
+ @rest.Get('/')
877
+ async getAll() {
878
+ return this.userService.getAll(UserVo);
879
+ }
880
+
881
+ @rest.Post('/')
882
+ async create(@rest.Body() data: UserVo) {
883
+ // rest.Body 自动启用 excludeExtraneousValues 以提高安全性
884
+ return this.userService.create(data);
885
+ }
886
+
887
+ @rest.Get('/:id')
888
+ async getById(@rest.Param('id') id: number) {
889
+ return this.userService.readById(id, UserVo);
890
+ }
891
+ }
892
+ ```
893
+
894
+ #### 创建带仓储的服务
895
+
896
+ ```typescript
897
+ import { di } from '@/libs/deps';
898
+ import { UniversalService } from '@/libs/universal';
899
+ import { User } from './entities/User';
900
+ import { UserRepo } from './repositories/UserRepo';
901
+
902
+ @di.Service()
903
+ export class UserService extends UniversalService<User> {
904
+ constructor(@di.Inject(() => UserRepo) private userRepo: UserRepo) {
905
+ super(userRepo);
906
+ }
907
+
908
+ async findByEmail(email: string): Promise<User | null> {
909
+ return this.userRepo.findOne({ where: { email } });
910
+ }
911
+ }
912
+ ```
913
+
914
+ #### 使用 VO 进行验证
915
+
916
+ ```typescript
917
+ import { cv } from '@/libs/deps';
918
+ import { i18n } from '@/libs/validator';
919
+ import { IsSafeUrl } from '@/libs/validator';
920
+
921
+ export class UserVo {
922
+ @i18n(cv.IsString)
923
+ @i18n(cv.MaxLength, 50)
924
+ userName: string;
925
+
926
+ @i18n(cv.IsEmail)
927
+ email: string;
928
+
929
+ @IsSafeUrl()
930
+ website?: string;
931
+
932
+ @i18n(cv.IsOptional)
933
+ @i18n(cv.MinLength, 6)
934
+ password?: string;
935
+ }
936
+ ```
937
+
938
+ #### 分页
939
+
940
+ ```typescript
941
+ import { rest, di } from '@/libs/deps';
942
+ import { PaginationIn, PaginationOut } from '@/libs/pagination';
943
+ import { UserService } from './services/UserService';
944
+ import { UserVo } from './vo/UserVo';
945
+
946
+ @rest.JsonController('/api/users')
947
+ @di.Service()
948
+ export class UserController {
949
+ @di.Inject()
950
+ private userService: UserService;
951
+
952
+ @rest.Post('/search')
953
+ async search(@rest.Body() pagination: PaginationIn): Promise<PaginationOut<UserVo, User>> {
954
+ return this.userService.search(pagination);
955
+ }
956
+ }
957
+ ```
958
+
959
+ #### 缓存
960
+
961
+ ```typescript
962
+ import { rest, di } from '@/libs/deps';
963
+ import { L1Cache } from '@/libs/cache';
964
+ import { CacheService } from '@/libs/cache';
965
+
966
+ @rest.JsonController('/api/data')
967
+ @di.Service()
968
+ export class DataController {
969
+ @di.Inject()
970
+ private cacheService: CacheService;
971
+
972
+ @rest.Get('/cached')
973
+ @L1Cache({ ttlSeconds: 60 })
974
+ async getCachedData() {
975
+ // L1 缓存 - 内存
976
+ return { data: '这将被缓存 60 秒' };
977
+ }
978
+
979
+ @rest.Get('/redis')
980
+ async getRedisData() {
981
+ // L2 缓存 - Redis
982
+ const cached = await this.cacheService.get('key');
983
+ if (cached) return cached;
984
+
985
+ const data = { data: '新数据' };
986
+ await this.cacheService.set('key', data, 300);
987
+ return data;
988
+ }
989
+ }
990
+ ```
991
+
992
+ #### 分布式事件
993
+
994
+ ```typescript
995
+ import { di } from '@/libs/deps';
996
+ import { DistributedEvents } from '@/libs/rabbitmq';
997
+
998
+ @di.Service()
999
+ export class UserService {
1000
+ @di.Inject()
1001
+ private events: DistributedEvents;
1002
+
1003
+ async createUser(data: UserVo) {
1004
+ const user = await this.userRepo.save(data);
1005
+
1006
+ // 发布事件到 RabbitMQ
1007
+ await this.events.pub('user.created', { userId: user.id });
1008
+
1009
+ return user;
1010
+ }
1011
+ }
1012
+
1013
+ // 事件处理器
1014
+ @di.Service()
1015
+ export class UserEventHandler {
1016
+ @di.Inject()
1017
+ private events: DistributedEvents;
1018
+
1019
+ async init() {
1020
+ // 订阅事件
1021
+ await this.events.sub(['user.created']);
1022
+
1023
+ this.events.on('RemoteEvent', (eventName, data) => {
1024
+ if (eventName === 'user.created') {
1025
+ console.log('用户已创建:', data);
1026
+ }
1027
+ });
1028
+ }
1029
+ }
1030
+ ```
1031
+
1032
+ ### 核心技术
1033
+
1034
+ #### 核心框架
1035
+ - **[Koa](https://koajs.com/)** 3.0.3 - 轻量级 Web 框架
1036
+ - **[routing-controllers](https://github.com/typestack/routing-controllers)** 0.11.3 - 基于装饰器的路由
1037
+ - **[socket-controllers](https://github.com/typestack/socket-controllers)** 0.3.1 - WebSocket 控制器
1038
+ - **[TypeDI](https://github.com/typestack/typedi)** 0.10.0 - 依赖注入
1039
+ - **[microframework](https://github.com/typestack/microframework)** 0.6.4 - 加载器模式
1040
+
1041
+ #### 数据层
1042
+ - **[TypeORM](https://typeorm.io/)** 0.3.27 - SQL ORM
1043
+ - **[typeorm-transactional](https://github.com/Aliheym/typeorm-transactional)** 0.5.0 - 事务管理
1044
+ - **[mysql2](https://github.com/sidorares/node-mysql2)** 3.15.2 - MySQL/MariaDB 驱动
1045
+ - **[class-validator](https://github.com/typestack/class-validator)** 0.14.2 - 验证
1046
+ - **[class-transformer](https://github.com/typestack/class-transformer)** 0.5.1 - 转换
1047
+
1048
+ #### 缓存与消息
1049
+ - **[ioredis](https://github.com/luin/ioredis)** 5.8.1 - Redis 客户端
1050
+ - **[amqplib](https://github.com/amqp-node/amqplib)** 0.10.9 - RabbitMQ 客户端
1051
+
1052
+ #### 工具
1053
+ - **[pino](https://github.com/pinojs/pino)** 10.0.0 - 高性能日志
1054
+ - **[jsonwebtoken](https://github.com/auth0/node-jsonwebtoken)** 9.0.2 - JWT 认证
1055
+ - **[nanoid](https://github.com/ai/nanoid)** 5.1.6 - 唯一 ID 生成器
1056
+ - **[axios](https://github.com/axios/axios)** 1.12.2 - HTTP 客户端
1057
+ - **[helmet](https://github.com/helmetjs/helmet)** 8.1.0 - 安全头
1058
+
1059
+ ### 文档
1060
+
1061
+ - **[CLAUDE.md](CLAUDE.md)** - 全面的框架文档
1062
+ - **[docs/SECURITY.md](docs/SECURITY.md)** - 安全指南和最佳实践
1063
+ - **[docs/VULNERABILITY_MITIGATION.md](docs/VULNERABILITY_MITIGATION.md)** - 漏洞跟踪
1064
+ - **[docs/QUICKSTART.md](docs/QUICKSTART.md)** - 快速开始指南
1065
+ - **[docs/PUBLISHING.md](docs/PUBLISHING.md)** - 发布指南
1066
+ - **[docs/BUILD_AND_USE.md](docs/BUILD_AND_USE.md)** - 构建和使用说明
1067
+ - **[docs/DOCKER_OPTIMIZATION.md](docs/DOCKER_OPTIMIZATION.md)** - Docker 优化指南
1068
+
1069
+ #### 模块文档
1070
+
1071
+ - `src/libs/deps/README.md` - 统一依赖导出
1072
+ - `src/libs/validator/README.md` - 验证辅助工具
1073
+ - `src/libs/apisix/README.md` - API 网关集成
1074
+ - `src/libs/gateway/README.md` - 网关加载器
1075
+ - `src/libs/generator/README.md` - ID 生成
1076
+ - `src/libs/koa/README.md` - Koa 服务器设置
1077
+ - `src/libs/network/README.md` - 网络工具
1078
+ - `src/libs/rabbitmq/README.md` - 分布式事件
1079
+ - `src/libs/register/README.md` - API 路由注册
1080
+ - `src/libs/type/README.md` - 类型工具
1081
+ - `src/libs/universal/README.md` - 通用 CRUD 模式
1082
+
1083
+ ### 安全性
1084
+
1085
+ 本项目高度重视安全性。我们使用:
1086
+
1087
+ - 使用 `yarn security:check` 定期进行安全审计
1088
+ - 依赖漏洞跟踪和缓解
1089
+ - 自定义验证器避免已知 CVE(例如,使用 `@IsSafeUrl()` 而非 `@IsUrl()`)
1090
+ - 传递依赖的安全解析
1091
+ - 安全文档和最佳实践
1092
+
1093
+ 详细信息请查看 [docs/SECURITY.md](docs/SECURITY.md)。
1094
+
1095
+ **重要**:始终使用 `@IsSafeUrl()` 而非 `@IsUrl()` 以避免 CVE-2025-56200。
1096
+
1097
+ ### 贡献
1098
+
1099
+ 欢迎贡献!请遵循以下指南:
1100
+
1101
+ 1. Fork 仓库
1102
+ 2. 从 `develope` 创建功能分支
1103
+ 3. 使用描述性提交进行更改
1104
+ 4. 运行测试和代码检查:`yarn test && yarn lint`
1105
+ 5. 运行安全检查:`yarn security:check`
1106
+ 6. 创建到 `develope` 分支的拉取请求
1107
+
1108
+ #### 开发指南
1109
+
1110
+ - 遵循现有代码约定
1111
+ - 使用 TypeScript 严格模式
1112
+ - 为公共 API 添加 JSDoc 注释
1113
+ - 为新功能编写测试
1114
+ - 根据需要更新文档
1115
+
1116
+ ### 发布
1117
+
1118
+ 这是一个私有 npm 包。要发布:
1119
+
1120
+ ```bash
1121
+ # 更新 package.json 中的版本
1122
+ # 更新构建编号
1123
+ yarn buildNum
1124
+
1125
+ # 运行发布前检查
1126
+ yarn publish:check
1127
+
1128
+ # 构建用于发布
1129
+ yarn build:publish
1130
+
1131
+ # 发布到 npm
1132
+ yarn publish:npmjs
1133
+
1134
+ # 或发布到 GitHub packages
1135
+ yarn publish:github
1136
+ ```
1137
+
1138
+ 详细发布说明请查看 [docs/PUBLISHING.md](docs/PUBLISHING.md)。
1139
+
1140
+ ### 故障排除
1141
+
1142
+ #### 数据库连接问题
1143
+
1144
+ - 验证 `cfg/database.yml` 连接字符串
1145
+ - 检查 MariaDB/MySQL 是否正在运行
1146
+ - 确保数据库用户具有适当的权限
1147
+
1148
+ #### Redis 连接问题
1149
+
1150
+ - 检查 Redis 是否正在运行:`redis-cli ping`
1151
+ - 验证 `cfg/redis.yml` 设置
1152
+ - 可以通过在启动时设置 `disableRedis: true` 来禁用 Redis
1153
+
1154
+ #### TypeORM 实体未找到
1155
+
1156
+ - 确保实体在启动时注册到 `entities` 数组中
1157
+ - 检查实体文件是否有 `@Entity()` 装饰器
1158
+ - 验证导入路径是否正确
1159
+
1160
+ ### 许可证
1161
+
1162
+ UNLICENSED - 私有包
1163
+
1164
+ ### 作者
1165
+
1166
+ FOT 团队
1167
+
1168
+ ### 链接
1169
+
1170
+ - [仓库](https://github.com/gaias/basenode)
1171
+ - [问题跟踪](https://github.com/gaias/basenode/issues)
1172
+ - [npm 包](https://www.npmjs.com/package/@gaias/basenode)
1173
+
1174
+ ### 版本历史
1175
+
1176
+ - **1.3.6**(当前)- 最新更新和改进
1177
+ - **1.0.13** - 安全增强和依赖更新
1178
+ - **1.0.0** - 初始版本
1179
+
1180
+ ---
1181
+
1182
+ **Last Updated | 最后更新**: 2025-12-31
1183
+ **Framework Version | 框架版本**: 1.3.6
1184
+ **Build Number | 构建编号**: 251025471
@@ -1,7 +1,5 @@
1
1
  import EventEmitter from 'eventemitter3';
2
- export type RabbitMQConfig = {
3
- connection: string;
4
- };
2
+ import { RabbitMQConfig } from './RabbitMQConfig';
5
3
  export declare class DistributedEvents extends EventEmitter {
6
4
  private logger;
7
5
  private channel;
@@ -1 +1 @@
1
- {"version":3,"file":"DistributedEvents.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEvents.ts"],"names":[],"mappings":"AAuHA,OAAO,YAAY,MAAM,eAAe,CAAC;AA6BzC,MAAM,MAAM,cAAc,GAAG;IAc3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAoKF,qBACa,iBAAkB,SAAQ,YAAY;IAOjD,OAAO,CAAC,MAAM,CAAuC;IAqBrD,OAAO,CAAC,OAAO,CAAe;IAe9B,OAAO,CAAC,SAAS,CAAS;WA6Eb,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;IAkJrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE;IA4JpB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IA4FvC,KAAK;CAGZ"}
1
+ {"version":3,"file":"DistributedEvents.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEvents.ts"],"names":[],"mappings":"AAuHA,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoKlD,qBACa,iBAAkB,SAAQ,YAAY;IAOjD,OAAO,CAAC,MAAM,CAAuC;IAqBrD,OAAO,CAAC,OAAO,CAAe;IAe9B,OAAO,CAAC,SAAS,CAAS;WA6Eb,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;IAkJrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE;IA4JpB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IA4FvC,KAAK;CAGZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"DistributedEvents.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEvents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DistributedEvents.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEvents.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { MicroframeworkSettings } from 'microframework';
2
2
  import { ClassType } from '../type';
3
3
  export type DistributedEventsLoaderOption = {
4
4
  eventsHandlers?: ClassType[];
5
+ useReliable?: boolean;
5
6
  };
6
7
  export declare const rabbitmqLoader: (option: DistributedEventsLoaderOption) => (settings?: MicroframeworkSettings) => Promise<void>;
7
8
  //# sourceMappingURL=DistributedEventsLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DistributedEventsLoader.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEventsLoader.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAapC,MAAM,MAAM,6BAA6B,GAAG;IA2B1C,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;CAC9B,CAAC;AAsFF,eAAO,MAAM,cAAc,GAAI,QAAQ,6BAA6B,MAAM,WAAW,sBAAsB,kBAgC1G,CAAC"}
1
+ {"version":3,"file":"DistributedEventsLoader.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEventsLoader.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAepC,MAAM,MAAM,6BAA6B,GAAG;IA2B1C,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAoD7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAsFF,eAAO,MAAM,cAAc,GAAI,QAAQ,6BAA6B,MAAM,WAAW,sBAAsB,kBAgD1G,CAAC"}
@@ -6,6 +6,7 @@ const logger_1 = require("../logger");
6
6
  const configure_1 = require("../configure");
7
7
  const EventsManager_1 = require("./EventsManager");
8
8
  const DistributedEvents_1 = require("./DistributedEvents");
9
+ const ReliableDistributedEvents_1 = require("./ReliableDistributedEvents");
9
10
  const rabbitmqLoader = (option) => (settings) => {
10
11
  const appCfg = configure_1.ConfigManager.getConfig('application');
11
12
  const rabbitmqCfg = configure_1.ConfigManager.getConfig('rabbitmq');
@@ -14,11 +15,20 @@ const rabbitmqLoader = (option) => (settings) => {
14
15
  logger.warn('⚠️ RabbitMQ configuration not found, skipping RabbitMQ initialization');
15
16
  return Promise.resolve();
16
17
  }
17
- return DistributedEvents_1.DistributedEvents.open(rabbitmqCfg, appCfg.appName).then((events) => {
18
- typedi_1.Container.set(DistributedEvents_1.DistributedEvents, events);
18
+ const EventsClass = option.useReliable ? ReliableDistributedEvents_1.ReliableDistributedEvents : DistributedEvents_1.DistributedEvents;
19
+ const versionName = option.useReliable ? 'Reliable' : 'Standard';
20
+ logger.info(`📦 Using ${versionName} version of DistributedEvents`);
21
+ return EventsClass.open(rabbitmqCfg, appCfg.appName).then((events) => {
22
+ if (option.useReliable) {
23
+ typedi_1.Container.set(ReliableDistributedEvents_1.ReliableDistributedEvents, events);
24
+ typedi_1.Container.set(DistributedEvents_1.DistributedEvents, events);
25
+ }
26
+ else {
27
+ typedi_1.Container.set(DistributedEvents_1.DistributedEvents, events);
28
+ }
19
29
  settings?.onShutdown(async () => events.close());
20
30
  return EventsManager_1.EventsManager.start(events, option.eventsHandlers).then(() => {
21
- logger_1.Logger.getLogger('RabbitmqLoader').info(`✅ RabbitMQ - Connected to ${rabbitmqCfg.connection}`);
31
+ logger.info(`✅ RabbitMQ (${versionName}) - Connected to ${rabbitmqCfg.connection}`);
22
32
  });
23
33
  });
24
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DistributedEventsLoader.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEventsLoader.ts"],"names":[],"mappings":";;;AAyCA,mCAAmC;AACnC,sCAAmC;AAEnC,4CAAgE;AAChE,mDAAgD;AAChD,2DAAwE;AA4HjE,MAAM,cAAc,GAAG,CAAC,MAAqC,EAAE,EAAE,CAAC,CAAC,QAAiC,EAAE,EAAE;IAG7G,MAAM,MAAM,GAAG,yBAAa,CAAC,SAAS,CAAoB,aAAa,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,yBAAa,CAAC,SAAS,CAAiB,UAAU,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,eAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAGlD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAID,OAAO,qCAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAGzE,kBAAS,CAAC,GAAG,CAAC,qCAAiB,EAAE,MAAM,CAAC,CAAC;QAIzC,QAAQ,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAIjD,OAAO,6BAAa,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAGlE,eAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,8BAA8B,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAhCW,QAAA,cAAc,kBAgCzB"}
1
+ {"version":3,"file":"DistributedEventsLoader.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/DistributedEventsLoader.ts"],"names":[],"mappings":";;;AAyCA,mCAAmC;AACnC,sCAAmC;AAEnC,4CAAgE;AAChE,mDAAgD;AAChD,2DAAwD;AACxD,2EAAwE;AAiLjE,MAAM,cAAc,GAAG,CAAC,MAAqC,EAAE,EAAE,CAAC,CAAC,QAAiC,EAAE,EAAE;IAG7G,MAAM,MAAM,GAAG,yBAAa,CAAC,SAAS,CAAoB,aAAa,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,yBAAa,CAAC,SAAS,CAAiB,UAAU,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,eAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAGlD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAID,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,qDAAyB,CAAC,CAAC,CAAC,qCAAiB,CAAC;IACvF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IAEjE,MAAM,CAAC,IAAI,CAAC,YAAY,WAAW,+BAA+B,CAAC,CAAC;IAIpE,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAGnE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAEvB,kBAAS,CAAC,GAAG,CAAC,qDAAyB,EAAE,MAAmC,CAAC,CAAC;YAG9E,kBAAS,CAAC,GAAG,CAAC,qCAAiB,EAAE,MAAa,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YAEN,kBAAS,CAAC,GAAG,CAAC,qCAAiB,EAAE,MAA2B,CAAC,CAAC;QAChE,CAAC;QAID,QAAQ,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAIjD,OAAO,6BAAa,CAAC,KAAK,CAAC,MAAa,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAGzE,MAAM,CAAC,IAAI,CAAC,gBAAgB,WAAW,oBAAoB,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAhDW,QAAA,cAAc,kBAgDzB"}
@@ -1,5 +1,7 @@
1
1
  import { DistributedEvents } from './DistributedEvents';
2
+ import { ReliableDistributedEvents } from './ReliableDistributedEvents';
2
3
  import { ClassType } from '../type';
4
+ type AnyDistributedEvents = DistributedEvents | ReliableDistributedEvents;
3
5
  export type DistributedEventListener = {
4
6
  clazz: ClassType;
5
7
  method: string;
@@ -12,6 +14,7 @@ export declare class EventsManager {
12
14
  static readonly registry: Registry;
13
15
  private logger;
14
16
  static addDistributedEventListener(event: string, listener: DistributedEventListener): void;
15
- static start(de: DistributedEvents, listeners?: ClassType[]): Promise<void>;
17
+ static start(de: AnyDistributedEvents, listeners?: ClassType[]): Promise<void>;
16
18
  }
19
+ export {};
17
20
  //# sourceMappingURL=EventsManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventsManager.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/EventsManager.ts"],"names":[],"mappings":"AA+CA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUpC,MAAM,MAAM,wBAAwB,GAAG;IASrC,KAAK,EAAE,SAAS,CAAC;IAUjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA0BF,MAAM,WAAW,QAAQ;IACvB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;CAClD;AAuDD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,IAC3B,QAAQ,GAAG,EAAE,aAAa,MAAM,UAMzC;AAaD,qBAAa,aAAa;IAYxB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAM;IAMxC,OAAO,CAAC,MAAM,CAAmC;IA0BjD,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;WAoE9E,KAAK,CAAC,EAAE,EAAE,iBAAiB,EAAE,SAAS,GAAE,SAAS,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA2CtF"}
1
+ {"version":3,"file":"EventsManager.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/EventsManager.ts"],"names":[],"mappings":"AA+CA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAapC,KAAK,oBAAoB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC;AAU1E,MAAM,MAAM,wBAAwB,GAAG;IASrC,KAAK,EAAE,SAAS,CAAC;IAUjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA0BF,MAAM,WAAW,QAAQ;IACvB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;CAClD;AAuDD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,IAC3B,QAAQ,GAAG,EAAE,aAAa,MAAM,UAMzC;AAaD,qBAAa,aAAa;IAYxB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAM;IAMxC,OAAO,CAAC,MAAM,CAAmC;IA0BjD,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;WA6E9E,KAAK,CAAC,EAAE,EAAE,oBAAoB,EAAE,SAAS,GAAE,SAAS,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA2CzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsManager.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/EventsManager.ts"],"names":[],"mappings":";;;AAkKA,0BAOC;AA3HD,mCAAmC;AAEnC,sCAAmC;AAkHnC,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QAC1C,aAAa,CAAC,2BAA2B,CAAC,KAAK,EAAE;YAC/C,KAAK,EAAE,MAAM,CAAC,WAAW;YACzB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAaD,MAAa,aAAa;IAA1B;QAkBU,WAAM,GAAG,eAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAyInD,CAAC;IA/GC,MAAM,CAAC,2BAA2B,CAAC,KAAa,EAAE,QAAkC;QAGlF,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;QAID,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IA0DD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAqB,EAAE,YAAyB,EAAE;QAGnE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAGnC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,IAAI,EAAE,CAAC;gBAGT,KAAK,OAAO,CAAC,GAAG,CACd,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAGf,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;oBAExD,IAAI,IAAI,EAAE,CAAC;wBAGT,MAAM,QAAQ,GAAG,kBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAIrC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpC,CAAC;oBAED,OAAO,SAAS,CAAC;gBACnB,CAAC,CAAC,CACH,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBAGZ,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QAIH,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;;AA1JH,sCA2JC;AA/IiB,sBAAQ,GAAa,EAAE,AAAf,CAAgB"}
1
+ {"version":3,"file":"EventsManager.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/EventsManager.ts"],"names":[],"mappings":";;;AAgLA,0BAOC;AAzID,mCAAmC;AAGnC,sCAAmC;AA+HnC,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QAC1C,aAAa,CAAC,2BAA2B,CAAC,KAAK,EAAE;YAC/C,KAAK,EAAE,MAAM,CAAC,WAAW;YACzB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAaD,MAAa,aAAa;IAA1B;QAkBU,WAAM,GAAG,eAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAkJnD,CAAC;IAxHC,MAAM,CAAC,2BAA2B,CAAC,KAAa,EAAE,QAAkC;QAGlF,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;QAID,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAmED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAwB,EAAE,YAAyB,EAAE;QAGtE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAGnC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,IAAI,EAAE,CAAC;gBAGT,KAAK,OAAO,CAAC,GAAG,CACd,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAGf,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;oBAExD,IAAI,IAAI,EAAE,CAAC;wBAGT,MAAM,QAAQ,GAAG,kBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAIrC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpC,CAAC;oBAED,OAAO,SAAS,CAAC;gBACnB,CAAC,CAAC,CACH,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBAGZ,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QAIH,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;;AAnKH,sCAoKC;AAxJiB,sBAAQ,GAAa,EAAE,AAAf,CAAgB"}
@@ -0,0 +1,4 @@
1
+ export type RabbitMQConfig = {
2
+ connection: string;
3
+ };
4
+ //# sourceMappingURL=RabbitMQConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RabbitMQConfig.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/RabbitMQConfig.ts"],"names":[],"mappings":"AAoCA,MAAM,MAAM,cAAc,GAAG;IAc3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=RabbitMQConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RabbitMQConfig.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/RabbitMQConfig.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import amqp from 'amqplib';
2
+ import EventEmitter from 'eventemitter3';
3
+ import { RabbitMQConfig } from './RabbitMQConfig';
4
+ export declare class ReliableDistributedEvents extends EventEmitter {
5
+ private logger;
6
+ private channel;
7
+ private queueName;
8
+ static open(config: RabbitMQConfig, queueName: string): Promise<ReliableDistributedEvents>;
9
+ sub(events: string[]): Promise<void>;
10
+ pub<T = unknown>(event: string, data: T, options?: {
11
+ retries?: number;
12
+ retryDelay?: number;
13
+ }): Promise<boolean>;
14
+ pubBatch<T = unknown>(events: Array<{
15
+ event: string;
16
+ data: T;
17
+ }>): Promise<boolean[]>;
18
+ setupReturnHandler(handler: (msg: amqp.Message) => void): void;
19
+ close(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=ReliableDistributedEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReliableDistributedEvents.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/ReliableDistributedEvents.ts"],"names":[],"mappings":"AAmIA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA2KlD,qBACa,yBAA0B,SAAQ,YAAY;IAOzD,OAAO,CAAC,MAAM,CAA+C;IAqB7D,OAAO,CAAC,OAAO,CAAsB;IAerC,OAAO,CAAC,SAAS,CAAS;WA6Eb,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;IAkJrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE;IA6KpB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GACA,OAAO,CAAC,OAAO,CAAC;IAgHb,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyG1F,kBAAkB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,IAAI;IAoFxD,KAAK;CAmBZ"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ var ReliableDistributedEvents_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ReliableDistributedEvents = void 0;
14
+ const amqplib_1 = __importDefault(require("amqplib"));
15
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
16
+ const typedi_1 = require("typedi");
17
+ const logger_1 = require("../logger");
18
+ const EVENTS_EXCHANGE = 'BizEvents';
19
+ const DEAD_LETTER_EXCHANGE = 'BizEventDeadLetter';
20
+ const DEAD_LETTER_QUEUE = 'DeadLetters';
21
+ const DEAD_LETTER_ROUTING_KEY = 'DeadLetter';
22
+ let ReliableDistributedEvents = ReliableDistributedEvents_1 = class ReliableDistributedEvents extends eventemitter3_1.default {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.logger = logger_1.Logger.getLogger(ReliableDistributedEvents_1);
26
+ }
27
+ static async open(config, queueName) {
28
+ const conn = await amqplib_1.default.connect(config.connection);
29
+ const channel = await conn.createConfirmChannel();
30
+ const events = new ReliableDistributedEvents_1();
31
+ events.channel = channel;
32
+ events.queueName = queueName;
33
+ await channel.assertExchange(DEAD_LETTER_EXCHANGE, 'direct', {
34
+ durable: true,
35
+ });
36
+ await channel.assertQueue(queueName, {
37
+ durable: true,
38
+ arguments: {
39
+ 'x-dead-letter-exchange': DEAD_LETTER_EXCHANGE,
40
+ 'x-dead-letter-routing-key': DEAD_LETTER_ROUTING_KEY,
41
+ },
42
+ });
43
+ await channel.assertQueue(DEAD_LETTER_QUEUE, {
44
+ durable: true,
45
+ });
46
+ await channel.assertExchange(EVENTS_EXCHANGE, 'topic', {
47
+ durable: true,
48
+ });
49
+ await channel.bindQueue(DEAD_LETTER_QUEUE, DEAD_LETTER_EXCHANGE, DEAD_LETTER_ROUTING_KEY);
50
+ return events;
51
+ }
52
+ async sub(events) {
53
+ await Promise.all(events.map((event) => this.channel.bindQueue(this.queueName, EVENTS_EXCHANGE, event)));
54
+ void this.channel.consume(this.queueName, (msg) => {
55
+ if (msg) {
56
+ const eventName = msg?.properties?.headers['x-eventName'];
57
+ const content = msg.content.toString();
58
+ const data = JSON.parse(content);
59
+ try {
60
+ this.logger.debug(`Received event: ${eventName}, Content: ${content}`);
61
+ this.emit('RemoteEvent', eventName, data);
62
+ this.channel.ack(msg);
63
+ }
64
+ catch (error) {
65
+ const errorMessage = error instanceof Error ? error.message : String(error);
66
+ this.logger.debug(`Message rejected: ${eventName} with error: ${errorMessage}`);
67
+ this.channel.reject(msg, !msg.fields.redelivered);
68
+ }
69
+ }
70
+ });
71
+ }
72
+ async pub(event, data, options) {
73
+ const maxRetries = options?.retries ?? 3;
74
+ const retryDelay = options?.retryDelay ?? 1000;
75
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
76
+ try {
77
+ this.channel.publish(EVENTS_EXCHANGE, event, Buffer.from(JSON.stringify(data)), {
78
+ contentEncoding: 'UTF-8',
79
+ contentType: 'text/json',
80
+ deliveryMode: 2,
81
+ headers: {
82
+ 'x-eventName': event,
83
+ },
84
+ mandatory: true,
85
+ });
86
+ await this.channel.waitForConfirms();
87
+ this.logger.debug(`✅ Event published successfully: ${event}`);
88
+ return true;
89
+ }
90
+ catch (error) {
91
+ const errorMessage = error instanceof Error ? error.message : String(error);
92
+ this.logger.error(`❌ Failed to publish event (attempt ${attempt}/${maxRetries}): ${event} - ${errorMessage}`);
93
+ if (attempt < maxRetries) {
94
+ this.logger.debug(`⏳ Retrying in ${retryDelay}ms...`);
95
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
96
+ }
97
+ else {
98
+ throw new Error(`Failed to publish event '${event}' after ${maxRetries} attempts: ${errorMessage}`);
99
+ }
100
+ }
101
+ }
102
+ return false;
103
+ }
104
+ async pubBatch(events) {
105
+ try {
106
+ for (const item of events) {
107
+ this.channel.publish(EVENTS_EXCHANGE, item.event, Buffer.from(JSON.stringify(item.data)), {
108
+ contentEncoding: 'UTF-8',
109
+ contentType: 'text/json',
110
+ deliveryMode: 2,
111
+ headers: {
112
+ 'x-eventName': item.event,
113
+ },
114
+ mandatory: true,
115
+ });
116
+ }
117
+ await this.channel.waitForConfirms();
118
+ this.logger.debug(`✅ Batch published ${events.length} events successfully`);
119
+ return events.map(() => true);
120
+ }
121
+ catch (error) {
122
+ const errorMessage = error instanceof Error ? error.message : String(error);
123
+ this.logger.error(`❌ Failed to batch publish ${events.length} events: ${errorMessage}`);
124
+ throw error;
125
+ }
126
+ }
127
+ setupReturnHandler(handler) {
128
+ this.channel.on('return', (msg) => {
129
+ const eventName = msg.properties?.headers?.['x-eventName'] || 'unknown';
130
+ const details = JSON.stringify({
131
+ exchange: msg.fields.exchange,
132
+ routingKey: msg.fields.routingKey,
133
+ replyText: msg.fields.replyText,
134
+ });
135
+ this.logger.error(`⚠️ Message returned (no route): ${eventName} - ${details}`);
136
+ handler(msg);
137
+ });
138
+ }
139
+ async close() {
140
+ try {
141
+ this.logger.debug('Waiting for pending message confirmations before closing...');
142
+ await this.channel.waitForConfirms();
143
+ this.logger.debug('All pending confirmations received');
144
+ }
145
+ catch (error) {
146
+ const errorMessage = error instanceof Error ? error.message : String(error);
147
+ this.logger.error(`Error waiting for confirmations before close: ${errorMessage}`);
148
+ }
149
+ await this.channel.close();
150
+ this.logger.debug('RabbitMQ channel closed successfully');
151
+ }
152
+ };
153
+ exports.ReliableDistributedEvents = ReliableDistributedEvents;
154
+ exports.ReliableDistributedEvents = ReliableDistributedEvents = ReliableDistributedEvents_1 = __decorate([
155
+ (0, typedi_1.Service)()
156
+ ], ReliableDistributedEvents);
157
+ //# sourceMappingURL=ReliableDistributedEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReliableDistributedEvents.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/ReliableDistributedEvents.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAmIA,sDAA2B;AAC3B,kEAAyC;AACzC,mCAAiC;AACjC,sCAAmC;AAoCnC,MAAM,eAAe,GAAG,WAAW,CAAC;AAuBpC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAyBlD,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAqBxC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAoEtC,IAAM,yBAAyB,iCAA/B,MAAM,yBAA0B,SAAQ,uBAAY;IAApD;;QAOG,WAAM,GAAG,eAAM,CAAC,SAAS,CAAC,2BAAyB,CAAC,CAAC;IAuvB/D,CAAC;IAtoBC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAsB,EAAE,SAAiB;QAGzD,MAAM,IAAI,GAAG,MAAM,iBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAInD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAIlD,MAAM,MAAM,GAAG,IAAI,2BAAyB,EAAE,CAAC;QAC/C,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAI7B,MAAM,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,QAAQ,EAAE;YAC3D,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAIH,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE;YACnC,OAAO,EAAE,IAAI;YACb,SAAS,EAAE;gBAGT,wBAAwB,EAAE,oBAAoB;gBAG9C,2BAA2B,EAAE,uBAAuB;aACrD;SACF,CAAC,CAAC;QAIH,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE;YAC3C,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAIH,MAAM,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,EAAE;YACrD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAIH,MAAM,OAAO,CAAC,SAAS,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;QAI1F,OAAO,MAAM,CAAC;IAChB,CAAC;IA4FD,KAAK,CAAC,GAAG,CAAC,MAAgB;QAGxB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAIzG,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE;YACrD,IAAI,GAAG,EAAE,CAAC;gBAGR,MAAM,SAAS,GAAG,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;gBAI1D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEjC,IAAI,CAAC;oBAGH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,SAAS,cAAc,OAAO,EAAE,CAAC,CAAC;oBAIvE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAI1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAGf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,SAAS,gBAAgB,YAAY,EAAE,CAAC,CAAC;oBAOhF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAgID,KAAK,CAAC,GAAG,CACP,KAAa,EACb,IAAO,EACP,OAGC;QAED,MAAM,UAAU,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC;QAE/C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC;gBAGH,IAAI,CAAC,OAAO,CAAC,OAAO,CAClB,eAAe,EACf,KAAK,EACL,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EACjC;oBAEE,eAAe,EAAE,OAAO;oBAExB,WAAW,EAAE,WAAW;oBAGxB,YAAY,EAAE,CAAC;oBAEf,OAAO,EAAE;wBAGP,aAAa,EAAE,KAAK;qBACrB;oBAGD,SAAS,EAAE,IAAI;iBAChB,CACF,CAAC;gBAIF,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAIrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAGf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,OAAO,IAAI,UAAU,MAAM,KAAK,MAAM,YAAY,EAAE,CAAC,CAAC;gBAI9G,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,OAAO,CAAC,CAAC;oBACtD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBAGN,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,WAAW,UAAU,cAAc,YAAY,EAAE,CAAC,CAAC;gBACtG,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAoDD,KAAK,CAAC,QAAQ,CAAc,MAAyC;QACnE,IAAI,CAAC;YAGH,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAClB,eAAe,EACf,IAAI,CAAC,KAAK,EACV,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACtC;oBACE,eAAe,EAAE,OAAO;oBACxB,WAAW,EAAE,WAAW;oBACxB,YAAY,EAAE,CAAC;oBACf,OAAO,EAAE;wBACP,aAAa,EAAE,IAAI,CAAC,KAAK;qBAC1B;oBACD,SAAS,EAAE,IAAI;iBAChB,CACF,CAAC;YACJ,CAAC;YAID,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAErC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC;YAC5E,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,YAAY,YAAY,EAAE,CAAC,CAAC;YACxF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAyED,kBAAkB,CAAC,OAAoC;QACrD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAiB,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;YACxE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;gBAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU;gBACjC,SAAS,EAAG,GAAG,CAAC,MAAc,CAAC,SAAS;aACzC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,SAAS,MAAM,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAyED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YAGH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACjF,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAGf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,YAAY,EAAE,CAAC,CAAC;QACrF,CAAC;QAID,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC5D,CAAC;CACF,CAAA;AA9vBY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,gBAAO,GAAE;GACG,yBAAyB,CA8vBrC"}
@@ -1,4 +1,6 @@
1
1
  export * from './DistributedEvents';
2
2
  export * from './DistributedEventsLoader';
3
3
  export * from './EventsManager';
4
+ export * from './RabbitMQConfig';
5
+ export * from './ReliableDistributedEvents';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/index.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/index.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC"}
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./DistributedEvents"), exports);
18
18
  __exportStar(require("./DistributedEventsLoader"), exports);
19
19
  __exportStar(require("./EventsManager"), exports);
20
+ __exportStar(require("./RabbitMQConfig"), exports);
21
+ __exportStar(require("./ReliableDistributedEvents"), exports);
20
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,sDAAoC;AACpC,4DAA0C;AAC1C,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libs/rabbitmq/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,sDAAoC;AACpC,4DAA0C;AAC1C,kDAAgC;AAChC,mDAAiC;AACjC,8DAA4C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gaias/basenode",
3
- "version": "1.3.6",
3
+ "version": "1.3.9",
4
4
  "buildNumber": 251025471,
5
5
  "description": "API development framework for NodeJs",
6
6
  "author": "FOT",