@roomkit/worker 1.0.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 (158) hide show
  1. package/README.md +122 -0
  2. package/dist/src/admin/admin.controller.d.ts +275 -0
  3. package/dist/src/admin/admin.controller.d.ts.map +1 -0
  4. package/dist/src/admin/admin.controller.js +296 -0
  5. package/dist/src/admin/admin.controller.js.map +1 -0
  6. package/dist/src/admin/admin.module.d.ts +3 -0
  7. package/dist/src/admin/admin.module.d.ts.map +1 -0
  8. package/dist/src/admin/admin.module.js +35 -0
  9. package/dist/src/admin/admin.module.js.map +1 -0
  10. package/dist/src/admin/admin.service.d.ts +282 -0
  11. package/dist/src/admin/admin.service.d.ts.map +1 -0
  12. package/dist/src/admin/admin.service.js +508 -0
  13. package/dist/src/admin/admin.service.js.map +1 -0
  14. package/dist/src/auth/auth.module.d.ts +10 -0
  15. package/dist/src/auth/auth.module.d.ts.map +1 -0
  16. package/dist/src/auth/auth.module.js +37 -0
  17. package/dist/src/auth/auth.module.js.map +1 -0
  18. package/dist/src/auth/auth.service.d.ts +21 -0
  19. package/dist/src/auth/auth.service.d.ts.map +1 -0
  20. package/dist/src/auth/auth.service.js +69 -0
  21. package/dist/src/auth/auth.service.js.map +1 -0
  22. package/dist/src/circuit-breaker/circuit-breaker.module.d.ts +3 -0
  23. package/dist/src/circuit-breaker/circuit-breaker.module.d.ts.map +1 -0
  24. package/dist/src/circuit-breaker/circuit-breaker.module.js +24 -0
  25. package/dist/src/circuit-breaker/circuit-breaker.module.js.map +1 -0
  26. package/dist/src/circuit-breaker/circuit-breaker.service.d.ts +89 -0
  27. package/dist/src/circuit-breaker/circuit-breaker.service.d.ts.map +1 -0
  28. package/dist/src/circuit-breaker/circuit-breaker.service.js +207 -0
  29. package/dist/src/circuit-breaker/circuit-breaker.service.js.map +1 -0
  30. package/dist/src/config/config.module.d.ts +3 -0
  31. package/dist/src/config/config.module.d.ts.map +1 -0
  32. package/dist/src/config/config.module.js +22 -0
  33. package/dist/src/config/config.module.js.map +1 -0
  34. package/dist/src/config/config.service.d.ts +19 -0
  35. package/dist/src/config/config.service.d.ts.map +1 -0
  36. package/dist/src/config/config.service.js +58 -0
  37. package/dist/src/config/config.service.js.map +1 -0
  38. package/dist/src/config/worker.config.d.ts +82 -0
  39. package/dist/src/config/worker.config.d.ts.map +1 -0
  40. package/dist/src/config/worker.config.js +35 -0
  41. package/dist/src/config/worker.config.js.map +1 -0
  42. package/dist/src/index.d.ts +48 -0
  43. package/dist/src/index.d.ts.map +1 -0
  44. package/dist/src/index.js +108 -0
  45. package/dist/src/index.js.map +1 -0
  46. package/dist/src/lifecycle/graceful-shutdown.service.d.ts +71 -0
  47. package/dist/src/lifecycle/graceful-shutdown.service.d.ts.map +1 -0
  48. package/dist/src/lifecycle/graceful-shutdown.service.js +221 -0
  49. package/dist/src/lifecycle/graceful-shutdown.service.js.map +1 -0
  50. package/dist/src/lifecycle/index.d.ts +2 -0
  51. package/dist/src/lifecycle/index.d.ts.map +1 -0
  52. package/dist/src/lifecycle/index.js +18 -0
  53. package/dist/src/lifecycle/index.js.map +1 -0
  54. package/dist/src/main.d.ts +2 -0
  55. package/dist/src/main.d.ts.map +1 -0
  56. package/dist/src/main.js +54 -0
  57. package/dist/src/main.js.map +1 -0
  58. package/dist/src/metrics/metrics.controller.d.ts +15 -0
  59. package/dist/src/metrics/metrics.controller.d.ts.map +1 -0
  60. package/dist/src/metrics/metrics.controller.js +44 -0
  61. package/dist/src/metrics/metrics.controller.js.map +1 -0
  62. package/dist/src/metrics/metrics.module.d.ts +7 -0
  63. package/dist/src/metrics/metrics.module.d.ts.map +1 -0
  64. package/dist/src/metrics/metrics.module.js +28 -0
  65. package/dist/src/metrics/metrics.module.js.map +1 -0
  66. package/dist/src/metrics/metrics.service.d.ts +65 -0
  67. package/dist/src/metrics/metrics.service.d.ts.map +1 -0
  68. package/dist/src/metrics/metrics.service.js +306 -0
  69. package/dist/src/metrics/metrics.service.js.map +1 -0
  70. package/dist/src/migration/migration.module.d.ts +3 -0
  71. package/dist/src/migration/migration.module.d.ts.map +1 -0
  72. package/dist/src/migration/migration.module.js +30 -0
  73. package/dist/src/migration/migration.module.js.map +1 -0
  74. package/dist/src/migration/migration.service.d.ts +68 -0
  75. package/dist/src/migration/migration.service.d.ts.map +1 -0
  76. package/dist/src/migration/migration.service.js +295 -0
  77. package/dist/src/migration/migration.service.js.map +1 -0
  78. package/dist/src/migration/room-migration.service.d.ts +92 -0
  79. package/dist/src/migration/room-migration.service.d.ts.map +1 -0
  80. package/dist/src/migration/room-migration.service.js +297 -0
  81. package/dist/src/migration/room-migration.service.js.map +1 -0
  82. package/dist/src/redis/redis.module.d.ts +3 -0
  83. package/dist/src/redis/redis.module.d.ts.map +1 -0
  84. package/dist/src/redis/redis.module.js +22 -0
  85. package/dist/src/redis/redis.module.js.map +1 -0
  86. package/dist/src/redis/redis.service.d.ts +68 -0
  87. package/dist/src/redis/redis.service.d.ts.map +1 -0
  88. package/dist/src/redis/redis.service.js +260 -0
  89. package/dist/src/redis/redis.service.js.map +1 -0
  90. package/dist/src/room/client-proxy.d.ts +43 -0
  91. package/dist/src/room/client-proxy.d.ts.map +1 -0
  92. package/dist/src/room/client-proxy.js +91 -0
  93. package/dist/src/room/client-proxy.js.map +1 -0
  94. package/dist/src/room/game-room.d.ts +243 -0
  95. package/dist/src/room/game-room.d.ts.map +1 -0
  96. package/dist/src/room/game-room.js +434 -0
  97. package/dist/src/room/game-room.js.map +1 -0
  98. package/dist/src/room/message-handler.service.d.ts +70 -0
  99. package/dist/src/room/message-handler.service.d.ts.map +1 -0
  100. package/dist/src/room/message-handler.service.js +541 -0
  101. package/dist/src/room/message-handler.service.js.map +1 -0
  102. package/dist/src/room/room-manager.service.d.ts +132 -0
  103. package/dist/src/room/room-manager.service.d.ts.map +1 -0
  104. package/dist/src/room/room-manager.service.js +571 -0
  105. package/dist/src/room/room-manager.service.js.map +1 -0
  106. package/dist/src/room/room-persistence.service.d.ts +101 -0
  107. package/dist/src/room/room-persistence.service.d.ts.map +1 -0
  108. package/dist/src/room/room-persistence.service.js +307 -0
  109. package/dist/src/room/room-persistence.service.js.map +1 -0
  110. package/dist/src/room/room-registry.service.d.ts +16 -0
  111. package/dist/src/room/room-registry.service.d.ts.map +1 -0
  112. package/dist/src/room/room-registry.service.js +60 -0
  113. package/dist/src/room/room-registry.service.js.map +1 -0
  114. package/dist/src/room/room.module.d.ts +15 -0
  115. package/dist/src/room/room.module.d.ts.map +1 -0
  116. package/dist/src/room/room.module.js +55 -0
  117. package/dist/src/room/room.module.js.map +1 -0
  118. package/dist/src/room/rooms/echo-room.d.ts +18 -0
  119. package/dist/src/room/rooms/echo-room.d.ts.map +1 -0
  120. package/dist/src/room/rooms/echo-room.js +85 -0
  121. package/dist/src/room/rooms/echo-room.js.map +1 -0
  122. package/dist/src/room/rooms/index.d.ts +2 -0
  123. package/dist/src/room/rooms/index.d.ts.map +1 -0
  124. package/dist/src/room/rooms/index.js +6 -0
  125. package/dist/src/room/rooms/index.js.map +1 -0
  126. package/dist/src/worker.module.d.ts +10 -0
  127. package/dist/src/worker.module.d.ts.map +1 -0
  128. package/dist/src/worker.module.js +46 -0
  129. package/dist/src/worker.module.js.map +1 -0
  130. package/dist/test/circuit-breaker/circuit-breaker.service.spec.d.ts +2 -0
  131. package/dist/test/circuit-breaker/circuit-breaker.service.spec.d.ts.map +1 -0
  132. package/dist/test/circuit-breaker/circuit-breaker.service.spec.js +220 -0
  133. package/dist/test/circuit-breaker/circuit-breaker.service.spec.js.map +1 -0
  134. package/dist/test/integration/admin-api.spec.d.ts +2 -0
  135. package/dist/test/integration/admin-api.spec.d.ts.map +1 -0
  136. package/dist/test/integration/admin-api.spec.js +246 -0
  137. package/dist/test/integration/admin-api.spec.js.map +1 -0
  138. package/dist/test/migration/game-room-migration.spec.d.ts +2 -0
  139. package/dist/test/migration/game-room-migration.spec.d.ts.map +1 -0
  140. package/dist/test/migration/game-room-migration.spec.js +222 -0
  141. package/dist/test/migration/game-room-migration.spec.js.map +1 -0
  142. package/dist/test/room/client-proxy.spec.d.ts +2 -0
  143. package/dist/test/room/client-proxy.spec.d.ts.map +1 -0
  144. package/dist/test/room/client-proxy.spec.js +117 -0
  145. package/dist/test/room/client-proxy.spec.js.map +1 -0
  146. package/dist/test/room/game-room.spec.d.ts +2 -0
  147. package/dist/test/room/game-room.spec.d.ts.map +1 -0
  148. package/dist/test/room/game-room.spec.js +219 -0
  149. package/dist/test/room/game-room.spec.js.map +1 -0
  150. package/dist/test/room/room-manager.service.spec.d.ts +2 -0
  151. package/dist/test/room/room-manager.service.spec.d.ts.map +1 -0
  152. package/dist/test/room/room-manager.service.spec.js +280 -0
  153. package/dist/test/room/room-manager.service.spec.js.map +1 -0
  154. package/dist/test/setup.d.ts +2 -0
  155. package/dist/test/setup.d.ts.map +1 -0
  156. package/dist/test/setup.js +56 -0
  157. package/dist/test/setup.js.map +1 -0
  158. package/package.json +74 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EchoRoom = void 0;
4
+ const game_room_1 = require("../game-room");
5
+ const core_1 = require("@roomkit/core");
6
+ /**
7
+ * EchoRoom - 示例游戏房间
8
+ * 简单地将收到的消息广播给房间内所有玩家
9
+ */
10
+ class EchoRoom extends game_room_1.GameRoom {
11
+ messageHistory = [];
12
+ maxHistorySize = 100;
13
+ async onCreate(options) {
14
+ console.log(`[EchoRoom] Created with options: ${JSON.stringify(options)}`);
15
+ // 可以从 options 中获取配置
16
+ if (typeof options.maxHistorySize === 'number') {
17
+ this.maxHistorySize = options.maxHistorySize;
18
+ }
19
+ }
20
+ async onAuth(client, options) {
21
+ // 简单示例:允许所有用户加入
22
+ // 实际应用中可以检查用户权限、房间容量等
23
+ return true;
24
+ }
25
+ async onJoin(client, options) {
26
+ console.log(`[EchoRoom] User ${client.userId} joined room ${this.roomId}`);
27
+ // 通知其他玩家有新玩家加入
28
+ await this.broadcast(core_1.MessageType.MSG_PLAYER_JOIN, {
29
+ userId: client.userId,
30
+ playerCount: this.players.size,
31
+ }, client.userId);
32
+ // 发送历史消息给新加入的玩家
33
+ await client.send(core_1.MessageType.MSG_STATE_FULL, {
34
+ type: 'history',
35
+ messages: this.messageHistory.slice(-20), // 最近20条
36
+ players: Array.from(this.players.keys()),
37
+ playerCount: this.players.size,
38
+ });
39
+ }
40
+ async onLeave(client, reason) {
41
+ console.log(`[EchoRoom] User ${client.userId} left room ${this.roomId}, reason: ${reason}`);
42
+ // 通知其他玩家
43
+ await this.broadcast(core_1.MessageType.MSG_PLAYER_LEAVE, {
44
+ userId: client.userId,
45
+ playerCount: this.players.size,
46
+ reason,
47
+ });
48
+ }
49
+ async onMessage(client, msgType, payload) {
50
+ console.log(`[EchoRoom] Message from ${client.userId}: msgType=${msgType}`);
51
+ switch (msgType) {
52
+ case 'chat':
53
+ await this.handleChat(client, payload);
54
+ break;
55
+ default:
56
+ // Echo: 将消息广播给所有玩家
57
+ await this.broadcast('game:action:result', {
58
+ from: client.userId,
59
+ msgType,
60
+ payload,
61
+ timestamp: Date.now(),
62
+ });
63
+ }
64
+ }
65
+ async onDispose() {
66
+ console.log(`[EchoRoom] Room ${this.roomId} disposed`);
67
+ this.messageHistory = [];
68
+ }
69
+ async handleChat(client, data) {
70
+ const chatMessage = {
71
+ userId: client.userId,
72
+ message: data.message,
73
+ timestamp: Date.now(),
74
+ };
75
+ // 保存到历史
76
+ this.messageHistory.push(chatMessage);
77
+ if (this.messageHistory.length > this.maxHistorySize) {
78
+ this.messageHistory.shift();
79
+ }
80
+ // 广播聊天消息
81
+ await this.broadcast('chat:broadcast', chatMessage);
82
+ }
83
+ }
84
+ exports.EchoRoom = EchoRoom;
85
+ //# sourceMappingURL=echo-room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-room.js","sourceRoot":"","sources":["../../../../src/room/rooms/echo-room.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { EchoRoom } from './echo-room';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/room/rooms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EchoRoom = void 0;
4
+ var echo_room_1 = require("./echo-room");
5
+ Object.defineProperty(exports, "EchoRoom", { enumerable: true, get: function () { return echo_room_1.EchoRoom; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/room/rooms/index.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA"}
@@ -0,0 +1,10 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { AuthHandler } from './config/worker.config';
3
+ export declare class WorkerModule {
4
+ /**
5
+ * 创建 WorkerModule,支持自定义认证处理器
6
+ * @param authHandler 可选的自定义认证处理器
7
+ */
8
+ static forRoot(authHandler?: AuthHandler): DynamicModule;
9
+ }
10
+ //# sourceMappingURL=worker.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.module.d.ts","sourceRoot":"","sources":["../../src/worker.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,qBACa,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,aAAa;CAgBzD"}
@@ -0,0 +1,46 @@
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 WorkerModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.WorkerModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const config_module_1 = require("./config/config.module");
13
+ const redis_module_1 = require("./redis/redis.module");
14
+ const room_module_1 = require("./room/room.module");
15
+ const admin_module_1 = require("./admin/admin.module");
16
+ const circuit_breaker_module_1 = require("./circuit-breaker/circuit-breaker.module");
17
+ const migration_module_1 = require("./migration/migration.module");
18
+ const metrics_module_1 = require("./metrics/metrics.module");
19
+ const graceful_shutdown_service_1 = require("./lifecycle/graceful-shutdown.service");
20
+ let WorkerModule = WorkerModule_1 = class WorkerModule {
21
+ /**
22
+ * 创建 WorkerModule,支持自定义认证处理器
23
+ * @param authHandler 可选的自定义认证处理器
24
+ */
25
+ static forRoot(authHandler) {
26
+ return {
27
+ module: WorkerModule_1,
28
+ imports: [
29
+ config_module_1.ConfigModule,
30
+ redis_module_1.RedisModule,
31
+ metrics_module_1.MetricsModule, // 全局指标模块
32
+ room_module_1.RoomModule.forRoot(authHandler), // RoomModule 已包含 AuthModule 和 MessageHandlerService
33
+ admin_module_1.AdminModule,
34
+ circuit_breaker_module_1.CircuitBreakerModule,
35
+ migration_module_1.MigrationModule,
36
+ ],
37
+ providers: [graceful_shutdown_service_1.GracefulShutdownService],
38
+ exports: [graceful_shutdown_service_1.GracefulShutdownService],
39
+ };
40
+ }
41
+ };
42
+ exports.WorkerModule = WorkerModule;
43
+ exports.WorkerModule = WorkerModule = WorkerModule_1 = __decorate([
44
+ (0, common_1.Module)({})
45
+ ], WorkerModule);
46
+ //# sourceMappingURL=worker.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.module.js","sourceRoot":"","sources":["../../src/worker.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,0DAAsD;AACtD,uDAAmD;AACnD,oDAAgD;AAChD,uDAAmD;AACnD,qFAAgF;AAChF,mEAA+D;AAC/D,6DAAyD;AACzD,qFAAgF;AAIzE,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,WAAyB;QACtC,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE;gBACP,4BAAY;gBACZ,0BAAW;gBACX,8BAAa,EAAE,SAAS;gBACxB,wBAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,oDAAoD;gBACrF,0BAAW;gBACX,6CAAoB;gBACpB,kCAAe;aAChB;YACD,SAAS,EAAE,CAAC,mDAAuB,CAAC;YACpC,OAAO,EAAE,CAAC,mDAAuB,CAAC;SACnC,CAAC;IACJ,CAAC;CACF,CAAA;AArBY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CAqBxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=circuit-breaker.service.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.service.spec.d.ts","sourceRoot":"","sources":["../../../test/circuit-breaker/circuit-breaker.service.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /// <reference types="jest" />
4
+ const circuit_breaker_service_1 = require("../../src/circuit-breaker/circuit-breaker.service");
5
+ describe('CircuitBreakerService', () => {
6
+ let service;
7
+ let configService;
8
+ beforeEach(() => {
9
+ configService = {
10
+ circuitFailureThreshold: 3,
11
+ circuitSuccessThreshold: 2,
12
+ circuitOpenTimeout: 1000,
13
+ maxPendingRequests: 5,
14
+ };
15
+ service = new circuit_breaker_service_1.CircuitBreakerService(configService);
16
+ });
17
+ afterEach(() => {
18
+ jest.clearAllMocks();
19
+ });
20
+ describe('initial state', () => {
21
+ it('should start in closed state', () => {
22
+ expect(service.getState()).toBe('closed');
23
+ });
24
+ it('should be healthy initially', () => {
25
+ expect(service.isHealthy()).toBe(true);
26
+ });
27
+ it('should have zero stats initially', () => {
28
+ const stats = service.getStats();
29
+ expect(stats.state).toBe('closed');
30
+ expect(stats.failures).toBe(0);
31
+ expect(stats.successes).toBe(0);
32
+ expect(stats.pendingRequests).toBe(0);
33
+ });
34
+ });
35
+ describe('canProcess', () => {
36
+ it('should allow requests in closed state', () => {
37
+ const result = service.canProcess();
38
+ expect(result.allowed).toBe(true);
39
+ });
40
+ it('should reject requests when overloaded', () => {
41
+ // 填满待处理请求
42
+ for (let i = 0; i < 5; i++) {
43
+ service.startRequest();
44
+ }
45
+ const result = service.canProcess();
46
+ expect(result.allowed).toBe(false);
47
+ expect(result.reason).toBe('WORKER_OVERLOADED');
48
+ });
49
+ it('should reject requests in open state', () => {
50
+ // 触发熔断
51
+ for (let i = 0; i < 3; i++) {
52
+ service.startRequest();
53
+ service.onFailure();
54
+ }
55
+ expect(service.getState()).toBe('open');
56
+ const result = service.canProcess();
57
+ expect(result.allowed).toBe(false);
58
+ expect(result.reason).toBe('CIRCUIT_OPEN');
59
+ });
60
+ });
61
+ describe('state transitions', () => {
62
+ it('should transition to open after threshold failures', () => {
63
+ for (let i = 0; i < 3; i++) {
64
+ service.startRequest();
65
+ service.onFailure();
66
+ }
67
+ expect(service.getState()).toBe('open');
68
+ });
69
+ it('should transition to half-open after timeout', async () => {
70
+ // 触发熔断
71
+ for (let i = 0; i < 3; i++) {
72
+ service.startRequest();
73
+ service.onFailure();
74
+ }
75
+ expect(service.getState()).toBe('open');
76
+ // 等待超时
77
+ await new Promise((resolve) => setTimeout(resolve, 1100));
78
+ // 下一次检查应该进入半开状态
79
+ const result = service.canProcess();
80
+ expect(result.allowed).toBe(true);
81
+ expect(service.getState()).toBe('half-open');
82
+ });
83
+ it('should transition to closed after success threshold in half-open', async () => {
84
+ // 触发熔断
85
+ for (let i = 0; i < 3; i++) {
86
+ service.startRequest();
87
+ service.onFailure();
88
+ }
89
+ // 等待超时进入半开
90
+ await new Promise((resolve) => setTimeout(resolve, 1100));
91
+ service.canProcess();
92
+ expect(service.getState()).toBe('half-open');
93
+ // 成功处理足够多的请求
94
+ for (let i = 0; i < 2; i++) {
95
+ service.startRequest();
96
+ service.onSuccess();
97
+ }
98
+ expect(service.getState()).toBe('closed');
99
+ });
100
+ it('should transition back to open on failure in half-open', async () => {
101
+ // 触发熔断
102
+ for (let i = 0; i < 3; i++) {
103
+ service.startRequest();
104
+ service.onFailure();
105
+ }
106
+ // 等待超时进入半开
107
+ await new Promise((resolve) => setTimeout(resolve, 1100));
108
+ service.canProcess();
109
+ expect(service.getState()).toBe('half-open');
110
+ // 失败一次
111
+ service.startRequest();
112
+ service.onFailure();
113
+ expect(service.getState()).toBe('open');
114
+ });
115
+ });
116
+ describe('onSuccess', () => {
117
+ it('should reset consecutive failures', () => {
118
+ service.startRequest();
119
+ service.onFailure();
120
+ service.startRequest();
121
+ service.onFailure();
122
+ const statsBefore = service.getStats();
123
+ expect(statsBefore.failures).toBe(2);
124
+ service.startRequest();
125
+ service.onSuccess();
126
+ const statsAfter = service.getStats();
127
+ expect(statsAfter.failures).toBe(0);
128
+ });
129
+ it('should decrement pending requests', () => {
130
+ service.startRequest();
131
+ service.startRequest();
132
+ expect(service.getStats().pendingRequests).toBe(2);
133
+ service.onSuccess();
134
+ expect(service.getStats().pendingRequests).toBe(1);
135
+ });
136
+ });
137
+ describe('onFailure', () => {
138
+ it('should increment consecutive failures', () => {
139
+ service.startRequest();
140
+ service.onFailure();
141
+ expect(service.getStats().failures).toBe(1);
142
+ });
143
+ it('should decrement pending requests', () => {
144
+ service.startRequest();
145
+ service.startRequest();
146
+ expect(service.getStats().pendingRequests).toBe(2);
147
+ service.onFailure();
148
+ expect(service.getStats().pendingRequests).toBe(1);
149
+ });
150
+ });
151
+ describe('reset', () => {
152
+ it('should reset to closed state', () => {
153
+ // 触发熔断
154
+ for (let i = 0; i < 3; i++) {
155
+ service.startRequest();
156
+ service.onFailure();
157
+ }
158
+ expect(service.getState()).toBe('open');
159
+ service.reset();
160
+ expect(service.getState()).toBe('closed');
161
+ expect(service.getStats().failures).toBe(0);
162
+ });
163
+ });
164
+ describe('trip', () => {
165
+ it('should manually trigger circuit open', () => {
166
+ expect(service.getState()).toBe('closed');
167
+ service.trip('manual test');
168
+ expect(service.getState()).toBe('open');
169
+ });
170
+ });
171
+ describe('isHealthy', () => {
172
+ it('should return true when closed and low load', () => {
173
+ expect(service.isHealthy()).toBe(true);
174
+ });
175
+ it('should return false when open', () => {
176
+ service.trip();
177
+ expect(service.isHealthy()).toBe(false);
178
+ });
179
+ it('should return false when overloaded', () => {
180
+ // 80% 以上负载
181
+ for (let i = 0; i < 4; i++) {
182
+ service.startRequest();
183
+ }
184
+ expect(service.isHealthy()).toBe(false);
185
+ });
186
+ });
187
+ describe('execute', () => {
188
+ it('should execute function and track success', async () => {
189
+ const fn = jest.fn().mockResolvedValue('result');
190
+ const result = await service.execute(fn);
191
+ expect(result).toBe('result');
192
+ expect(fn).toHaveBeenCalled();
193
+ });
194
+ it('should execute function and track failure', async () => {
195
+ const error = new Error('test error');
196
+ const fn = jest.fn().mockRejectedValue(error);
197
+ await expect(service.execute(fn)).rejects.toThrow('test error');
198
+ expect(service.getStats().failures).toBe(1);
199
+ });
200
+ it('should reject when circuit is open', async () => {
201
+ service.trip();
202
+ const fn = jest.fn().mockResolvedValue('result');
203
+ await expect(service.execute(fn)).rejects.toThrow('CIRCUIT_OPEN');
204
+ expect(fn).not.toHaveBeenCalled();
205
+ });
206
+ });
207
+ describe('getStats', () => {
208
+ it('should return accurate statistics', () => {
209
+ service.startRequest();
210
+ service.startRequest();
211
+ service.onSuccess();
212
+ service.startRequest();
213
+ service.onFailure();
214
+ const stats = service.getStats();
215
+ expect(stats.pendingRequests).toBe(1);
216
+ expect(stats.failures).toBe(1);
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=circuit-breaker.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.service.spec.js","sourceRoot":"","sources":["../../../test/circuit-breaker/circuit-breaker.service.spec.ts"],"names":[],"mappings":";;AAAA,8BAA8B;AAC9B,+FAAwG;AAGxG,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,OAA8B,CAAC;IACnC,IAAI,aAAyC,CAAC;IAE9C,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,GAAG;YACd,uBAAuB,EAAE,CAAC;YAC1B,uBAAuB,EAAE,CAAC;YAC1B,kBAAkB,EAAE,IAAI;YACxB,kBAAkB,EAAE,CAAC;SACQ,CAAC;QAEhC,OAAO,GAAG,IAAI,+CAAqB,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,UAAU;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,OAAO;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,OAAO;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,OAAO;YACP,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAE1D,gBAAgB;YAChB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,OAAO;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,WAAW;YACX,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE7C,aAAa;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,OAAO;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,WAAW;YACX,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE7C,OAAO;YACP,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAErC,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnD,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnD,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,OAAO;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE1C,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,WAAW;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAE9C,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAChE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAEjD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAClE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-api.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-api.spec.d.ts","sourceRoot":"","sources":["../../../test/integration/admin-api.spec.ts"],"names":[],"mappings":""}