@open-core/framework 1.0.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/README.md +350 -0
- package/dist/client/client-bootstrap.d.ts +1 -0
- package/dist/client/client-bootstrap.js +53 -0
- package/dist/client/client-container.d.ts +2 -0
- package/dist/client/client-container.js +6 -0
- package/dist/client/client-core.d.ts +18 -0
- package/dist/client/client-core.js +52 -0
- package/dist/client/decorators/controller.d.ts +3 -0
- package/dist/client/decorators/controller.js +14 -0
- package/dist/client/decorators/export.d.ts +7 -0
- package/dist/client/decorators/export.js +15 -0
- package/dist/client/decorators/gameEvent.d.ts +47 -0
- package/dist/client/decorators/gameEvent.js +54 -0
- package/dist/client/decorators/index.d.ts +10 -0
- package/dist/client/decorators/index.js +26 -0
- package/dist/client/decorators/interval.d.ts +7 -0
- package/dist/client/decorators/interval.js +15 -0
- package/dist/client/decorators/key.d.ts +2 -0
- package/dist/client/decorators/key.js +10 -0
- package/dist/client/decorators/localEvent.d.ts +7 -0
- package/dist/client/decorators/localEvent.js +15 -0
- package/dist/client/decorators/nui.d.ts +1 -0
- package/dist/client/decorators/nui.js +9 -0
- package/dist/client/decorators/onNet.d.ts +1 -0
- package/dist/client/decorators/onNet.js +9 -0
- package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
- package/dist/client/decorators/resourceLifecycle.js +24 -0
- package/dist/client/decorators/tick.d.ts +1 -0
- package/dist/client/decorators/tick.js +9 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.js +22 -0
- package/dist/client/loaders/exports.loader.d.ts +1 -0
- package/dist/client/loaders/exports.loader.js +13 -0
- package/dist/client/player/player.d.ts +262 -0
- package/dist/client/player/player.js +480 -0
- package/dist/client/player/player.loader.d.ts +1 -0
- package/dist/client/player/player.loader.js +22 -0
- package/dist/client/services/core/index.d.ts +1 -0
- package/dist/client/services/core/index.js +17 -0
- package/dist/client/services/core/spawn.service.d.ts +20 -0
- package/dist/client/services/core/spawn.service.js +143 -0
- package/dist/client/services/index.d.ts +4 -0
- package/dist/client/services/index.js +24 -0
- package/dist/client/services/streaming/index.d.ts +1 -0
- package/dist/client/services/streaming/index.js +17 -0
- package/dist/client/services/streaming/streaming.service.d.ts +165 -0
- package/dist/client/services/streaming/streaming.service.js +341 -0
- package/dist/client/services/ui/index.d.ts +3 -0
- package/dist/client/services/ui/index.js +19 -0
- package/dist/client/services/ui/notification.service.d.ts +76 -0
- package/dist/client/services/ui/notification.service.js +111 -0
- package/dist/client/services/ui/progress.service.d.ts +82 -0
- package/dist/client/services/ui/progress.service.js +210 -0
- package/dist/client/services/ui/textui.service.d.ts +82 -0
- package/dist/client/services/ui/textui.service.js +156 -0
- package/dist/client/services/world/blip.service.d.ts +112 -0
- package/dist/client/services/world/blip.service.js +215 -0
- package/dist/client/services/world/index.d.ts +4 -0
- package/dist/client/services/world/index.js +20 -0
- package/dist/client/services/world/marker.service.d.ts +94 -0
- package/dist/client/services/world/marker.service.js +153 -0
- package/dist/client/services/world/ped.service.d.ts +182 -0
- package/dist/client/services/world/ped.service.js +302 -0
- package/dist/client/services/world/vehicle.service.d.ts +168 -0
- package/dist/client/services/world/vehicle.service.js +296 -0
- package/dist/client/system/metadata-client.keys.d.ts +13 -0
- package/dist/client/system/metadata-client.keys.js +16 -0
- package/dist/client/system/processors/export.processor.d.ts +7 -0
- package/dist/client/system/processors/export.processor.js +39 -0
- package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
- package/dist/client/system/processors/gameEvent.processor.js +58 -0
- package/dist/client/system/processors/interval.processor.d.ts +7 -0
- package/dist/client/system/processors/interval.processor.js +43 -0
- package/dist/client/system/processors/key.processor.d.ts +8 -0
- package/dist/client/system/processors/key.processor.js +27 -0
- package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/localEvent.processor.js +38 -0
- package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/netEvent.processor.js +38 -0
- package/dist/client/system/processors/nui.processor.d.ts +7 -0
- package/dist/client/system/processors/nui.processor.js +40 -0
- package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
- package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
- package/dist/client/system/processors/tick.processor.d.ts +5 -0
- package/dist/client/system/processors/tick.processor.js +37 -0
- package/dist/client/system/processors.register.d.ts +1 -0
- package/dist/client/system/processors.register.js +27 -0
- package/dist/client/types/game-events.d.ts +126 -0
- package/dist/client/types/game-events.js +83 -0
- package/dist/client/types/index.d.ts +1 -0
- package/dist/client/types/index.js +17 -0
- package/dist/client/ui-bridge.d.ts +116 -0
- package/dist/client/ui-bridge.js +201 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +46 -0
- package/dist/server/bootstrap.d.ts +16 -0
- package/dist/server/bootstrap.js +57 -0
- package/dist/server/bus/core-event-bus.d.ts +6 -0
- package/dist/server/bus/core-event-bus.js +31 -0
- package/dist/server/configs/api.config.d.ts +71 -0
- package/dist/server/configs/api.config.js +81 -0
- package/dist/server/configs/config.base.d.ts +63 -0
- package/dist/server/configs/config.base.js +64 -0
- package/dist/server/configs/index.d.ts +2 -0
- package/dist/server/configs/index.js +18 -0
- package/dist/server/container.d.ts +2 -0
- package/dist/server/container.js +6 -0
- package/dist/server/controllers/chat.controller.d.ts +10 -0
- package/dist/server/controllers/chat.controller.js +50 -0
- package/dist/server/controllers/command.controller.d.ts +7 -0
- package/dist/server/controllers/command.controller.js +47 -0
- package/dist/server/core.d.ts +1 -0
- package/dist/server/core.js +7 -0
- package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
- package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
- package/dist/server/database/database.contract.d.ts +128 -0
- package/dist/server/database/database.contract.js +29 -0
- package/dist/server/database/database.service.d.ts +216 -0
- package/dist/server/database/database.service.js +301 -0
- package/dist/server/database/index.d.ts +53 -0
- package/dist/server/database/index.js +70 -0
- package/dist/server/database/types.d.ts +67 -0
- package/dist/server/database/types.js +7 -0
- package/dist/server/database.d.ts +7 -0
- package/dist/server/database.js +23 -0
- package/dist/server/decorators/bind.d.ts +2 -0
- package/dist/server/decorators/bind.js +15 -0
- package/dist/server/decorators/command.d.ts +19 -0
- package/dist/server/decorators/command.js +18 -0
- package/dist/server/decorators/controller.d.ts +3 -0
- package/dist/server/decorators/controller.js +14 -0
- package/dist/server/decorators/coreEvent.d.ts +2 -0
- package/dist/server/decorators/coreEvent.js +9 -0
- package/dist/server/decorators/export.d.ts +1 -0
- package/dist/server/decorators/export.js +9 -0
- package/dist/server/decorators/guard.d.ts +5 -0
- package/dist/server/decorators/guard.js +39 -0
- package/dist/server/decorators/index.d.ts +10 -0
- package/dist/server/decorators/index.js +26 -0
- package/dist/server/decorators/netEvent.d.ts +36 -0
- package/dist/server/decorators/netEvent.js +40 -0
- package/dist/server/decorators/onTick.d.ts +1 -0
- package/dist/server/decorators/onTick.js +9 -0
- package/dist/server/decorators/public.d.ts +16 -0
- package/dist/server/decorators/public.js +25 -0
- package/dist/server/decorators/requiresState.d.ts +55 -0
- package/dist/server/decorators/requiresState.js +62 -0
- package/dist/server/decorators/throttle.d.ts +9 -0
- package/dist/server/decorators/throttle.js +36 -0
- package/dist/server/decorators/utils.d.ts +7 -0
- package/dist/server/decorators/utils.js +13 -0
- package/dist/server/entities/index.d.ts +1 -0
- package/dist/server/entities/index.js +17 -0
- package/dist/server/entities/player.d.ts +157 -0
- package/dist/server/entities/player.js +217 -0
- package/dist/server/error-handler.d.ts +2 -0
- package/dist/server/error-handler.js +43 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +29 -0
- package/dist/server/loaders/exports.loader.d.ts +0 -0
- package/dist/server/loaders/exports.loader.js +23 -0
- package/dist/server/loaders/playerSession.loader.d.ts +1 -0
- package/dist/server/loaders/playerSession.loader.js +42 -0
- package/dist/server/services/access-control.service.d.ts +56 -0
- package/dist/server/services/access-control.service.js +99 -0
- package/dist/server/services/chat.service.d.ts +7 -0
- package/dist/server/services/chat.service.js +31 -0
- package/dist/server/services/command.service.d.ts +15 -0
- package/dist/server/services/command.service.js +74 -0
- package/dist/server/services/config.service.d.ts +75 -0
- package/dist/server/services/config.service.js +116 -0
- package/dist/server/services/default/default-security.handler.d.ts +6 -0
- package/dist/server/services/default/default-security.handler.js +26 -0
- package/dist/server/services/http/http.service.d.ts +50 -0
- package/dist/server/services/http/http.service.js +126 -0
- package/dist/server/services/index.d.ts +10 -0
- package/dist/server/services/index.js +26 -0
- package/dist/server/services/parallel/index.d.ts +49 -0
- package/dist/server/services/parallel/index.js +67 -0
- package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
- package/dist/server/services/parallel/parallel-compute.service.js +449 -0
- package/dist/server/services/parallel/types.d.ts +188 -0
- package/dist/server/services/parallel/types.js +7 -0
- package/dist/server/services/parallel/worker-pool.d.ts +83 -0
- package/dist/server/services/parallel/worker-pool.js +350 -0
- package/dist/server/services/parallel/worker.d.ts +19 -0
- package/dist/server/services/parallel/worker.js +49 -0
- package/dist/server/services/persistence.service.d.ts +59 -0
- package/dist/server/services/persistence.service.js +166 -0
- package/dist/server/services/player.service.d.ts +96 -0
- package/dist/server/services/player.service.js +132 -0
- package/dist/server/services/rate-limiter.service.d.ts +5 -0
- package/dist/server/services/rate-limiter.service.js +39 -0
- package/dist/server/services/registers.d.ts +1 -0
- package/dist/server/services/registers.js +18 -0
- package/dist/server/setup.d.ts +9 -0
- package/dist/server/setup.js +28 -0
- package/dist/server/system/metadata-server.keys.d.ts +9 -0
- package/dist/server/system/metadata-server.keys.js +12 -0
- package/dist/server/system/processors/command.processor.d.ts +9 -0
- package/dist/server/system/processors/command.processor.js +31 -0
- package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/coreEvent.processor.js +38 -0
- package/dist/server/system/processors/export.processor.d.ts +7 -0
- package/dist/server/system/processors/export.processor.js +26 -0
- package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
- package/dist/server/system/processors/netEvent.processor.js +100 -0
- package/dist/server/system/processors/tick.processor.d.ts +5 -0
- package/dist/server/system/processors/tick.processor.js +36 -0
- package/dist/server/system/processors.register.d.ts +1 -0
- package/dist/server/system/processors.register.js +21 -0
- package/dist/server/templates/admin/admin.controller-template.d.ts +10 -0
- package/dist/server/templates/admin/admin.controller-template.js +2 -0
- package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
- package/dist/server/templates/auth/auth-provider.contract.js +23 -0
- package/dist/server/templates/index.d.ts +8 -0
- package/dist/server/templates/index.js +21 -0
- package/dist/server/templates/persistence/index.d.ts +30 -0
- package/dist/server/templates/persistence/index.js +34 -0
- package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
- package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
- package/dist/server/templates/repository/index.d.ts +57 -0
- package/dist/server/templates/repository/index.js +61 -0
- package/dist/server/templates/repository/repository.contract.d.ts +224 -0
- package/dist/server/templates/repository/repository.contract.js +342 -0
- package/dist/server/templates/repository/repository.types.d.ts +51 -0
- package/dist/server/templates/repository/repository.types.js +7 -0
- package/dist/server/templates/security/permission.types.d.ts +32 -0
- package/dist/server/templates/security/permission.types.js +2 -0
- package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
- package/dist/server/templates/security/principal-provider.contract.js +19 -0
- package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
- package/dist/server/templates/security/security-handler.contract.js +6 -0
- package/dist/server/types/core-events.d.ts +17 -0
- package/dist/server/types/core-events.js +2 -0
- package/dist/server/types/security.types.d.ts +7 -0
- package/dist/server/types/security.types.js +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +17 -0
- package/dist/shared/logger/core-logger.d.ts +35 -0
- package/dist/shared/logger/core-logger.js +52 -0
- package/dist/shared/logger/index.d.ts +11 -0
- package/dist/shared/logger/index.js +26 -0
- package/dist/shared/logger/logger.config.d.ts +47 -0
- package/dist/shared/logger/logger.config.js +33 -0
- package/dist/shared/logger/logger.service.d.ts +161 -0
- package/dist/shared/logger/logger.service.js +279 -0
- package/dist/shared/logger/logger.types.d.ts +85 -0
- package/dist/shared/logger/logger.types.js +74 -0
- package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
- package/dist/shared/logger/transports/buffered.transport.js +174 -0
- package/dist/shared/logger/transports/console.transport.d.ts +37 -0
- package/dist/shared/logger/transports/console.transport.js +134 -0
- package/dist/shared/logger/transports/index.d.ts +3 -0
- package/dist/shared/logger/transports/index.js +19 -0
- package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
- package/dist/shared/logger/transports/transport.interface.js +2 -0
- package/dist/system/class-constructor.d.ts +1 -0
- package/dist/system/class-constructor.js +2 -0
- package/dist/system/decorator-processor.d.ts +4 -0
- package/dist/system/decorator-processor.js +2 -0
- package/dist/system/metadata.scanner.d.ts +7 -0
- package/dist/system/metadata.scanner.js +45 -0
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.js +25 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/result.d.ts +12 -0
- package/dist/utils/result.js +10 -0
- package/dist/utils/rgb.d.ts +5 -0
- package/dist/utils/rgb.js +2 -0
- package/dist/utils/vector3.d.ts +13 -0
- package/dist/utils/vector3.js +27 -0
- package/package.json +70 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Player } from '../entities/player';
|
|
2
|
+
/**
|
|
3
|
+
* Internal service that orchestrates player data persistence.
|
|
4
|
+
*
|
|
5
|
+
* This service manages the lifecycle of persistence hooks and auto-save intervals.
|
|
6
|
+
* It is used internally by the framework and should not be instantiated directly.
|
|
7
|
+
*/
|
|
8
|
+
export declare class PlayerPersistenceService {
|
|
9
|
+
private provider;
|
|
10
|
+
private autoSaveIntervals;
|
|
11
|
+
private initialized;
|
|
12
|
+
/**
|
|
13
|
+
* Initializes the persistence service by resolving the provider from DI.
|
|
14
|
+
* Called during bootstrap if a provider is registered.
|
|
15
|
+
*/
|
|
16
|
+
initialize(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Whether persistence is enabled (provider is configured).
|
|
19
|
+
*/
|
|
20
|
+
get isEnabled(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Handles player session load - called when a player joins.
|
|
23
|
+
*
|
|
24
|
+
* @param player - The player who just joined
|
|
25
|
+
*/
|
|
26
|
+
handleSessionLoad(player: Player): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Handles player session save - called when a player disconnects.
|
|
29
|
+
*
|
|
30
|
+
* @param player - The player who is disconnecting
|
|
31
|
+
*/
|
|
32
|
+
handleSessionSave(player: Player): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Manually triggers a save for a specific player.
|
|
35
|
+
*
|
|
36
|
+
* @param player - The player whose data should be saved
|
|
37
|
+
*/
|
|
38
|
+
savePlayer(player: Player): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Saves all connected players' data.
|
|
41
|
+
* Useful for server shutdown or periodic global saves.
|
|
42
|
+
*
|
|
43
|
+
* @param players - Array of all connected players
|
|
44
|
+
*/
|
|
45
|
+
saveAllPlayers(players: Player[]): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Starts the auto-save interval for a player.
|
|
48
|
+
*/
|
|
49
|
+
private startAutoSave;
|
|
50
|
+
/**
|
|
51
|
+
* Stops the auto-save interval for a player.
|
|
52
|
+
*/
|
|
53
|
+
private stopAutoSave;
|
|
54
|
+
/**
|
|
55
|
+
* Stops all auto-save intervals.
|
|
56
|
+
* Called during server shutdown.
|
|
57
|
+
*/
|
|
58
|
+
stopAllAutoSaves(): void;
|
|
59
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PlayerPersistenceService = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const container_1 = require("../container");
|
|
12
|
+
const persistence_1 = require("../templates/persistence");
|
|
13
|
+
const logger_1 = require("../../shared/logger");
|
|
14
|
+
/**
|
|
15
|
+
* Internal service that orchestrates player data persistence.
|
|
16
|
+
*
|
|
17
|
+
* This service manages the lifecycle of persistence hooks and auto-save intervals.
|
|
18
|
+
* It is used internally by the framework and should not be instantiated directly.
|
|
19
|
+
*/
|
|
20
|
+
let PlayerPersistenceService = class PlayerPersistenceService {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.provider = null;
|
|
23
|
+
this.autoSaveIntervals = new Map();
|
|
24
|
+
this.initialized = false;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initializes the persistence service by resolving the provider from DI.
|
|
28
|
+
* Called during bootstrap if a provider is registered.
|
|
29
|
+
*/
|
|
30
|
+
initialize() {
|
|
31
|
+
if (this.initialized)
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
if (container_1.di.isRegistered(persistence_1.PlayerPersistenceContract)) {
|
|
35
|
+
const provider = container_1.di.resolve(persistence_1.PlayerPersistenceContract);
|
|
36
|
+
this.provider = provider;
|
|
37
|
+
logger_1.loggers.bootstrap.info('Player Persistence Provider initialized', {
|
|
38
|
+
autoSaveEnabled: provider.config.autoSaveEnabled,
|
|
39
|
+
autoSaveIntervalMs: provider.config.autoSaveIntervalMs,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (_a) {
|
|
44
|
+
// Provider not registered, persistence is disabled
|
|
45
|
+
this.provider = null;
|
|
46
|
+
}
|
|
47
|
+
this.initialized = true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Whether persistence is enabled (provider is configured).
|
|
51
|
+
*/
|
|
52
|
+
get isEnabled() {
|
|
53
|
+
return this.provider !== null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Handles player session load - called when a player joins.
|
|
57
|
+
*
|
|
58
|
+
* @param player - The player who just joined
|
|
59
|
+
*/
|
|
60
|
+
async handleSessionLoad(player) {
|
|
61
|
+
if (!this.provider)
|
|
62
|
+
return;
|
|
63
|
+
try {
|
|
64
|
+
await this.provider.onSessionLoad(player);
|
|
65
|
+
logger_1.loggers.session.debug('Player data loaded', { clientId: player.clientID });
|
|
66
|
+
// Start auto-save interval if enabled
|
|
67
|
+
if (this.provider.config.autoSaveEnabled) {
|
|
68
|
+
this.startAutoSave(player);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger_1.loggers.session.error('Failed to load player data', { clientId: player.clientID }, error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handles player session save - called when a player disconnects.
|
|
77
|
+
*
|
|
78
|
+
* @param player - The player who is disconnecting
|
|
79
|
+
*/
|
|
80
|
+
async handleSessionSave(player) {
|
|
81
|
+
if (!this.provider)
|
|
82
|
+
return;
|
|
83
|
+
// Stop auto-save interval first
|
|
84
|
+
this.stopAutoSave(player.clientID);
|
|
85
|
+
try {
|
|
86
|
+
await this.provider.onSessionSave(player);
|
|
87
|
+
logger_1.loggers.session.debug('Player data saved', { clientId: player.clientID });
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
logger_1.loggers.session.error('Failed to save player data', { clientId: player.clientID }, error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Manually triggers a save for a specific player.
|
|
95
|
+
*
|
|
96
|
+
* @param player - The player whose data should be saved
|
|
97
|
+
*/
|
|
98
|
+
async savePlayer(player) {
|
|
99
|
+
if (!this.provider)
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
await this.provider.onSessionSave(player);
|
|
103
|
+
logger_1.loggers.session.debug('Player data manually saved', { clientId: player.clientID });
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
logger_1.loggers.session.error('Failed to manually save player data', { clientId: player.clientID }, error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Saves all connected players' data.
|
|
111
|
+
* Useful for server shutdown or periodic global saves.
|
|
112
|
+
*
|
|
113
|
+
* @param players - Array of all connected players
|
|
114
|
+
*/
|
|
115
|
+
async saveAllPlayers(players) {
|
|
116
|
+
if (!this.provider)
|
|
117
|
+
return;
|
|
118
|
+
const savePromises = players.map((player) => this.provider.onSessionSave(player).catch((error) => {
|
|
119
|
+
logger_1.loggers.session.error('Failed to save player data during bulk save', { clientId: player.clientID }, error);
|
|
120
|
+
}));
|
|
121
|
+
await Promise.all(savePromises);
|
|
122
|
+
logger_1.loggers.session.info('Bulk player save completed', { playerCount: players.length });
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Starts the auto-save interval for a player.
|
|
126
|
+
*/
|
|
127
|
+
startAutoSave(player) {
|
|
128
|
+
if (!this.provider)
|
|
129
|
+
return;
|
|
130
|
+
const intervalMs = this.provider.config.autoSaveIntervalMs;
|
|
131
|
+
const interval = setInterval(async () => {
|
|
132
|
+
try {
|
|
133
|
+
await this.provider.onAutoSave(player);
|
|
134
|
+
logger_1.loggers.session.debug('Player auto-save completed', { clientId: player.clientID });
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
logger_1.loggers.session.error('Auto-save failed', { clientId: player.clientID }, error);
|
|
138
|
+
}
|
|
139
|
+
}, intervalMs);
|
|
140
|
+
this.autoSaveIntervals.set(player.clientID, interval);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Stops the auto-save interval for a player.
|
|
144
|
+
*/
|
|
145
|
+
stopAutoSave(clientId) {
|
|
146
|
+
const interval = this.autoSaveIntervals.get(clientId);
|
|
147
|
+
if (interval) {
|
|
148
|
+
clearInterval(interval);
|
|
149
|
+
this.autoSaveIntervals.delete(clientId);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Stops all auto-save intervals.
|
|
154
|
+
* Called during server shutdown.
|
|
155
|
+
*/
|
|
156
|
+
stopAllAutoSaves() {
|
|
157
|
+
for (const interval of this.autoSaveIntervals.values()) {
|
|
158
|
+
clearInterval(interval);
|
|
159
|
+
}
|
|
160
|
+
this.autoSaveIntervals.clear();
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
exports.PlayerPersistenceService = PlayerPersistenceService;
|
|
164
|
+
exports.PlayerPersistenceService = PlayerPersistenceService = __decorate([
|
|
165
|
+
(0, tsyringe_1.injectable)()
|
|
166
|
+
], PlayerPersistenceService);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { UUIDTypes } from 'uuid';
|
|
2
|
+
import { Player } from '../entities/player';
|
|
3
|
+
/**
|
|
4
|
+
* Type representing a linked account identifier. This come from your persistence layer
|
|
5
|
+
* and is used to associate a Player session with their stored data.
|
|
6
|
+
*/
|
|
7
|
+
export type LinkedID = string | UUIDTypes;
|
|
8
|
+
export interface PlayerSession {
|
|
9
|
+
clientID: number;
|
|
10
|
+
accountID?: LinkedID;
|
|
11
|
+
identifiers?: {
|
|
12
|
+
license?: string;
|
|
13
|
+
steam?: string;
|
|
14
|
+
discord?: string;
|
|
15
|
+
};
|
|
16
|
+
meta: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Service responsible for managing the lifecycle of player sessions.
|
|
20
|
+
* It acts as the central registry for all connected players, mapping FiveM client IDs
|
|
21
|
+
* to Core `Player` entities.
|
|
22
|
+
*/
|
|
23
|
+
export declare class PlayerService {
|
|
24
|
+
/**
|
|
25
|
+
* Internal map storing active player sessions indexed by their FiveM client ID (source).
|
|
26
|
+
*/
|
|
27
|
+
private playersByClient;
|
|
28
|
+
/**
|
|
29
|
+
* Initializes a new player session for a connecting client.
|
|
30
|
+
*
|
|
31
|
+
* This method is typically called during the `playerJoining` event or
|
|
32
|
+
* immediately after a successful handshake/login flow.
|
|
33
|
+
*
|
|
34
|
+
* @param clientID - The FiveM server ID (source) of the player.
|
|
35
|
+
* @param identifiers - Optional object containing platform identifiers (license, steam, etc.).
|
|
36
|
+
* @returns The newly created `Player` instance.
|
|
37
|
+
*/
|
|
38
|
+
bind(clientID: number, identifiers?: PlayerSession['identifiers']): Player;
|
|
39
|
+
/**
|
|
40
|
+
* Associates an authenticated Account ID (database ID) with an active player session.
|
|
41
|
+
*
|
|
42
|
+
* Call this method once the player has successfully authenticated (e.g., after character selection
|
|
43
|
+
* or login) to link their session to their persistent data.
|
|
44
|
+
*
|
|
45
|
+
* @param clientID - The FiveM server ID of the player.
|
|
46
|
+
* @param accountID - The unique identifier from your database/persistence layer.
|
|
47
|
+
*/
|
|
48
|
+
linkAccount(clientID: number, accountID: LinkedID): void;
|
|
49
|
+
/**
|
|
50
|
+
* Terminates a player session and removes them from the registry.
|
|
51
|
+
*
|
|
52
|
+
* This should be called when the `playerDropped` event is triggered to ensure
|
|
53
|
+
* memory is freed and the session is closed.
|
|
54
|
+
*
|
|
55
|
+
* @param clientID - The FiveM server ID of the player disconnecting.
|
|
56
|
+
*/
|
|
57
|
+
unbindByClient(clientID: number): void;
|
|
58
|
+
/**
|
|
59
|
+
* Retrieves the `Player` entity associated with a specific FiveM client ID.
|
|
60
|
+
*
|
|
61
|
+
* @param clientID - The FiveM server ID to look up.
|
|
62
|
+
* @returns The `Player` instance if found, or `null` if the session does not exist.
|
|
63
|
+
*/
|
|
64
|
+
getByClient(clientID: number): Player | null;
|
|
65
|
+
/**
|
|
66
|
+
* Helper to retrieve the authenticated Account ID for a given client.
|
|
67
|
+
*
|
|
68
|
+
* @param clientID - The FiveM server ID to look up.
|
|
69
|
+
* @returns The bound Account ID (string/UUID) if the player is logged in, or `null` otherwise.
|
|
70
|
+
*/
|
|
71
|
+
getPlayerId(clientID: number): string | null;
|
|
72
|
+
/**
|
|
73
|
+
* Stores arbitrary metadata in the player's session.
|
|
74
|
+
* Useful for storing transient state like 'isDead', 'job', 'dimension', etc.
|
|
75
|
+
*
|
|
76
|
+
* @param clientID - The FiveM server ID of the player.
|
|
77
|
+
* @param key - The unique key for the metadata entry.
|
|
78
|
+
* @param value - The value to store.
|
|
79
|
+
*/
|
|
80
|
+
setMeta(clientID: number, key: string, value: unknown): void;
|
|
81
|
+
/**
|
|
82
|
+
* Retrieves metadata previously stored in the player's session.
|
|
83
|
+
*
|
|
84
|
+
* @template T - The expected type of the returned value.
|
|
85
|
+
* @param clientID - The FiveM server ID of the player.
|
|
86
|
+
* @param key - The metadata key to retrieve.
|
|
87
|
+
* @returns The value cast to type `T`, or `undefined` if the key or player doesn't exist.
|
|
88
|
+
*/
|
|
89
|
+
getMeta<T = unknown>(clientID: number, key: string): T | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Returns a list of all currently active `Player` entities.
|
|
92
|
+
*
|
|
93
|
+
* @returns An array containing all connected players managed by this service.
|
|
94
|
+
*/
|
|
95
|
+
getAll(): Player[];
|
|
96
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PlayerService = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const player_1 = require("../entities/player");
|
|
12
|
+
/**
|
|
13
|
+
* Service responsible for managing the lifecycle of player sessions.
|
|
14
|
+
* It acts as the central registry for all connected players, mapping FiveM client IDs
|
|
15
|
+
* to Core `Player` entities.
|
|
16
|
+
*/
|
|
17
|
+
let PlayerService = class PlayerService {
|
|
18
|
+
constructor() {
|
|
19
|
+
/**
|
|
20
|
+
* Internal map storing active player sessions indexed by their FiveM client ID (source).
|
|
21
|
+
*/
|
|
22
|
+
this.playersByClient = new Map();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initializes a new player session for a connecting client.
|
|
26
|
+
*
|
|
27
|
+
* This method is typically called during the `playerJoining` event or
|
|
28
|
+
* immediately after a successful handshake/login flow.
|
|
29
|
+
*
|
|
30
|
+
* @param clientID - The FiveM server ID (source) of the player.
|
|
31
|
+
* @param identifiers - Optional object containing platform identifiers (license, steam, etc.).
|
|
32
|
+
* @returns The newly created `Player` instance.
|
|
33
|
+
*/
|
|
34
|
+
bind(clientID, identifiers) {
|
|
35
|
+
const session = {
|
|
36
|
+
clientID,
|
|
37
|
+
identifiers,
|
|
38
|
+
meta: {},
|
|
39
|
+
};
|
|
40
|
+
const player = new player_1.Player(session);
|
|
41
|
+
this.playersByClient.set(clientID, player);
|
|
42
|
+
return player;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Associates an authenticated Account ID (database ID) with an active player session.
|
|
46
|
+
*
|
|
47
|
+
* Call this method once the player has successfully authenticated (e.g., after character selection
|
|
48
|
+
* or login) to link their session to their persistent data.
|
|
49
|
+
*
|
|
50
|
+
* @param clientID - The FiveM server ID of the player.
|
|
51
|
+
* @param accountID - The unique identifier from your database/persistence layer.
|
|
52
|
+
*/
|
|
53
|
+
linkAccount(clientID, accountID) {
|
|
54
|
+
const player = this.playersByClient.get(clientID);
|
|
55
|
+
if (!player)
|
|
56
|
+
return;
|
|
57
|
+
player.linkAccount(accountID);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Terminates a player session and removes them from the registry.
|
|
61
|
+
*
|
|
62
|
+
* This should be called when the `playerDropped` event is triggered to ensure
|
|
63
|
+
* memory is freed and the session is closed.
|
|
64
|
+
*
|
|
65
|
+
* @param clientID - The FiveM server ID of the player disconnecting.
|
|
66
|
+
*/
|
|
67
|
+
unbindByClient(clientID) {
|
|
68
|
+
const player = this.playersByClient.get(clientID);
|
|
69
|
+
if (!player)
|
|
70
|
+
return;
|
|
71
|
+
this.playersByClient.delete(clientID);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Retrieves the `Player` entity associated with a specific FiveM client ID.
|
|
75
|
+
*
|
|
76
|
+
* @param clientID - The FiveM server ID to look up.
|
|
77
|
+
* @returns The `Player` instance if found, or `null` if the session does not exist.
|
|
78
|
+
*/
|
|
79
|
+
getByClient(clientID) {
|
|
80
|
+
var _a;
|
|
81
|
+
return (_a = this.playersByClient.get(clientID)) !== null && _a !== void 0 ? _a : null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Helper to retrieve the authenticated Account ID for a given client.
|
|
85
|
+
*
|
|
86
|
+
* @param clientID - The FiveM server ID to look up.
|
|
87
|
+
* @returns The bound Account ID (string/UUID) if the player is logged in, or `null` otherwise.
|
|
88
|
+
*/
|
|
89
|
+
getPlayerId(clientID) {
|
|
90
|
+
var _a;
|
|
91
|
+
const player = this.playersByClient.get(clientID);
|
|
92
|
+
return (_a = player === null || player === void 0 ? void 0 : player.accountID) !== null && _a !== void 0 ? _a : null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Stores arbitrary metadata in the player's session.
|
|
96
|
+
* Useful for storing transient state like 'isDead', 'job', 'dimension', etc.
|
|
97
|
+
*
|
|
98
|
+
* @param clientID - The FiveM server ID of the player.
|
|
99
|
+
* @param key - The unique key for the metadata entry.
|
|
100
|
+
* @param value - The value to store.
|
|
101
|
+
*/
|
|
102
|
+
setMeta(clientID, key, value) {
|
|
103
|
+
const player = this.playersByClient.get(clientID);
|
|
104
|
+
if (!player)
|
|
105
|
+
return;
|
|
106
|
+
player.setMeta(key, value);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Retrieves metadata previously stored in the player's session.
|
|
110
|
+
*
|
|
111
|
+
* @template T - The expected type of the returned value.
|
|
112
|
+
* @param clientID - The FiveM server ID of the player.
|
|
113
|
+
* @param key - The metadata key to retrieve.
|
|
114
|
+
* @returns The value cast to type `T`, or `undefined` if the key or player doesn't exist.
|
|
115
|
+
*/
|
|
116
|
+
getMeta(clientID, key) {
|
|
117
|
+
const player = this.playersByClient.get(clientID);
|
|
118
|
+
return player === null || player === void 0 ? void 0 : player.getMeta(key);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Returns a list of all currently active `Player` entities.
|
|
122
|
+
*
|
|
123
|
+
* @returns An array containing all connected players managed by this service.
|
|
124
|
+
*/
|
|
125
|
+
getAll() {
|
|
126
|
+
return Array.from(this.playersByClient.values());
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
exports.PlayerService = PlayerService;
|
|
130
|
+
exports.PlayerService = PlayerService = __decorate([
|
|
131
|
+
(0, tsyringe_1.injectable)()
|
|
132
|
+
], PlayerService);
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RateLimiterService = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
let RateLimiterService = class RateLimiterService {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.hits = new Map();
|
|
14
|
+
}
|
|
15
|
+
checkLimit(key, limit, windowMs) {
|
|
16
|
+
const now = Date.now();
|
|
17
|
+
const timestamps = this.hits.get(key) || [];
|
|
18
|
+
const validTimestamps = timestamps.filter((t) => now - t < windowMs);
|
|
19
|
+
if (validTimestamps.length >= limit) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
validTimestamps.push(now);
|
|
23
|
+
this.hits.set(key, validTimestamps);
|
|
24
|
+
if (this.hits.size > 5000)
|
|
25
|
+
this.cleanup();
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
cleanup() {
|
|
29
|
+
const now = Date.now();
|
|
30
|
+
for (const [key, times] of this.hits.entries()) {
|
|
31
|
+
if (times.every((t) => now - t > 60000))
|
|
32
|
+
this.hits.delete(key);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.RateLimiterService = RateLimiterService;
|
|
37
|
+
exports.RateLimiterService = RateLimiterService = __decorate([
|
|
38
|
+
(0, tsyringe_1.injectable)()
|
|
39
|
+
], RateLimiterService);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerServicesServer(): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerServicesServer = registerServicesServer;
|
|
4
|
+
const container_1 = require("../container");
|
|
5
|
+
const database_1 = require("../database");
|
|
6
|
+
const chat_service_1 = require("./chat.service");
|
|
7
|
+
const command_service_1 = require("./command.service");
|
|
8
|
+
const http_service_1 = require("./http/http.service");
|
|
9
|
+
const player_service_1 = require("./player.service");
|
|
10
|
+
const persistence_service_1 = require("./persistence.service");
|
|
11
|
+
function registerServicesServer() {
|
|
12
|
+
container_1.di.registerSingleton(player_service_1.PlayerService, player_service_1.PlayerService);
|
|
13
|
+
container_1.di.registerSingleton(command_service_1.CommandService, command_service_1.CommandService);
|
|
14
|
+
container_1.di.registerSingleton(http_service_1.HttpService, http_service_1.HttpService);
|
|
15
|
+
container_1.di.registerSingleton(chat_service_1.ChatService, chat_service_1.ChatService);
|
|
16
|
+
container_1.di.registerSingleton(database_1.DatabaseService, database_1.DatabaseService);
|
|
17
|
+
container_1.di.registerSingleton(persistence_service_1.PlayerPersistenceService, persistence_service_1.PlayerPersistenceService);
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ClassConstructor } from '../system/class-constructor';
|
|
2
|
+
import { PrincipalProviderContract } from './templates';
|
|
3
|
+
import { SecurityHandlerContract } from './templates/security/security-handler.contract';
|
|
4
|
+
import { PlayerPersistenceContract } from './templates/persistence';
|
|
5
|
+
import { AuthProviderContract } from './templates/auth/auth-provider.contract';
|
|
6
|
+
export declare function setPrincipalProvider(provider: ClassConstructor<PrincipalProviderContract>): void;
|
|
7
|
+
export declare function setAuthProvider(provider: ClassConstructor<AuthProviderContract>): void;
|
|
8
|
+
export declare function setSecurityHandler(handler: ClassConstructor<SecurityHandlerContract>): void;
|
|
9
|
+
export declare function setPersistenceProvider(provider: ClassConstructor<PlayerPersistenceContract>): void;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setPrincipalProvider = setPrincipalProvider;
|
|
4
|
+
exports.setAuthProvider = setAuthProvider;
|
|
5
|
+
exports.setSecurityHandler = setSecurityHandler;
|
|
6
|
+
exports.setPersistenceProvider = setPersistenceProvider;
|
|
7
|
+
const container_1 = require("./container");
|
|
8
|
+
const templates_1 = require("./templates");
|
|
9
|
+
const security_handler_contract_1 = require("./templates/security/security-handler.contract");
|
|
10
|
+
const persistence_1 = require("./templates/persistence");
|
|
11
|
+
const logger_1 = require("../shared/logger");
|
|
12
|
+
const auth_provider_contract_1 = require("./templates/auth/auth-provider.contract");
|
|
13
|
+
function setPrincipalProvider(provider) {
|
|
14
|
+
container_1.di.registerSingleton(templates_1.PrincipalProviderContract, provider);
|
|
15
|
+
logger_1.loggers.bootstrap.info(`Principal Provider configured: ${provider.name}`);
|
|
16
|
+
}
|
|
17
|
+
function setAuthProvider(provider) {
|
|
18
|
+
container_1.di.registerSingleton(auth_provider_contract_1.AuthProviderContract, provider);
|
|
19
|
+
logger_1.loggers.bootstrap.info(`Auth Provider configured: ${provider.name}`);
|
|
20
|
+
}
|
|
21
|
+
function setSecurityHandler(handler) {
|
|
22
|
+
container_1.di.registerSingleton(security_handler_contract_1.SecurityHandlerContract, handler);
|
|
23
|
+
logger_1.loggers.bootstrap.info(`Security Handler configured: ${handler.name}`);
|
|
24
|
+
}
|
|
25
|
+
function setPersistenceProvider(provider) {
|
|
26
|
+
container_1.di.registerSingleton(persistence_1.PlayerPersistenceContract, provider);
|
|
27
|
+
logger_1.loggers.bootstrap.info(`Persistence Provider configured: ${provider.name}`);
|
|
28
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.METADATA_KEYS = void 0;
|
|
4
|
+
exports.METADATA_KEYS = {
|
|
5
|
+
CONTROLLER: 'core:meta:controller',
|
|
6
|
+
COMMAND: 'core:meta:command',
|
|
7
|
+
NET_EVENT: 'core:meta:net_event',
|
|
8
|
+
TICK: 'core:meta:tick',
|
|
9
|
+
CORE_EVENT: 'core:meta:core_event',
|
|
10
|
+
EXPORT: 'core:meta:export',
|
|
11
|
+
PUBLIC: 'core:meta:public',
|
|
12
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DecoratorProcessor } from '../../../system/decorator-processor';
|
|
2
|
+
import { CommandService } from '../../services';
|
|
3
|
+
import { CommandConfig } from '../../decorators';
|
|
4
|
+
export declare class CommandProcessor implements DecoratorProcessor {
|
|
5
|
+
private commandService;
|
|
6
|
+
readonly metadataKey: string;
|
|
7
|
+
constructor(commandService: CommandService);
|
|
8
|
+
process(target: any, methodName: string, metadata: CommandConfig): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CommandProcessor = void 0;
|
|
13
|
+
const tsyringe_1 = require("tsyringe");
|
|
14
|
+
const metadata_server_keys_1 = require("../metadata-server.keys");
|
|
15
|
+
const services_1 = require("../../services");
|
|
16
|
+
let CommandProcessor = class CommandProcessor {
|
|
17
|
+
constructor(commandService) {
|
|
18
|
+
this.commandService = commandService;
|
|
19
|
+
this.metadataKey = metadata_server_keys_1.METADATA_KEYS.COMMAND;
|
|
20
|
+
}
|
|
21
|
+
process(target, methodName, metadata) {
|
|
22
|
+
const handler = target[methodName].bind(target);
|
|
23
|
+
const fullMeta = Object.assign(Object.assign({}, metadata), { methodName, target: target.constructor });
|
|
24
|
+
this.commandService.register(fullMeta, handler);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.CommandProcessor = CommandProcessor;
|
|
28
|
+
exports.CommandProcessor = CommandProcessor = __decorate([
|
|
29
|
+
(0, tsyringe_1.injectable)(),
|
|
30
|
+
__metadata("design:paramtypes", [services_1.CommandService])
|
|
31
|
+
], CommandProcessor);
|