@open-core/framework 0.2.9 → 0.3.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.
- package/dist/adapters/contracts/IPlatformCapabilities.d.ts +79 -0
- package/dist/adapters/contracts/IPlatformCapabilities.js +31 -0
- package/dist/adapters/contracts/IPlayerInfo.d.ts +1 -1
- package/dist/adapters/contracts/{IPedAppearanceClient.d.ts → client/IPedAppearanceClient.d.ts} +1 -1
- package/dist/adapters/contracts/server/IEntityServer.d.ts +188 -0
- package/dist/adapters/contracts/server/IEntityServer.js +39 -0
- package/dist/adapters/contracts/{IPlayerServer.d.ts → server/IPlayerServer.d.ts} +52 -9
- package/dist/adapters/contracts/server/IPlayerServer.js +39 -0
- package/dist/adapters/contracts/types/identifier.d.ts +67 -0
- package/dist/adapters/contracts/types/identifier.js +64 -0
- package/dist/adapters/contracts/types/index.d.ts +1 -0
- package/dist/{kernel/shared/appearance → adapters/contracts/types}/index.js +1 -1
- package/dist/adapters/fivem/fivem-capabilities.d.ts +18 -0
- package/dist/adapters/fivem/fivem-capabilities.js +67 -0
- package/dist/adapters/fivem/fivem-engine-events.js +17 -4
- package/dist/adapters/fivem/fivem-entity-server.d.ts +6 -2
- package/dist/adapters/fivem/fivem-entity-server.js +14 -1
- package/dist/adapters/fivem/fivem-ped-appearance-client.d.ts +1 -1
- package/dist/adapters/fivem/fivem-ped-appearance-client.js +1 -1
- package/dist/adapters/fivem/fivem-ped-appearance-server.d.ts +1 -1
- package/dist/adapters/fivem/fivem-ped-appearance-server.js +1 -1
- package/dist/adapters/fivem/fivem-platform.d.ts +5 -0
- package/dist/adapters/fivem/fivem-platform.js +100 -0
- package/dist/adapters/fivem/fivem-player-server.d.ts +7 -1
- package/dist/adapters/fivem/fivem-player-server.js +19 -1
- package/dist/adapters/fivem/fivem-playerinfo.d.ts +1 -1
- package/dist/adapters/fivem/fivem-vehicle-server.d.ts +1 -1
- package/dist/adapters/fivem/fivem-vehicle-server.js +1 -1
- package/dist/adapters/fivem/index.d.ts +13 -0
- package/dist/adapters/fivem/index.js +31 -0
- package/dist/adapters/index.d.ts +8 -7
- package/dist/adapters/index.js +13 -12
- package/dist/adapters/node/index.d.ts +5 -0
- package/dist/adapters/node/index.js +13 -1
- package/dist/adapters/node/node-capabilities.d.ts +19 -0
- package/dist/adapters/node/node-capabilities.js +54 -0
- package/dist/adapters/node/node-entity-server.d.ts +17 -6
- package/dist/adapters/node/node-entity-server.js +41 -15
- package/dist/adapters/node/node-net-transport.js +2 -2
- package/dist/adapters/node/node-ped-appearance-client.d.ts +1 -1
- package/dist/adapters/node/node-ped-appearance-client.js +1 -1
- package/dist/adapters/node/node-ped-appearance-server.d.ts +1 -1
- package/dist/adapters/node/node-ped-appearance-server.js +1 -1
- package/dist/adapters/node/node-platform.d.ts +5 -0
- package/dist/adapters/node/node-platform.js +103 -0
- package/dist/adapters/node/node-player-server.d.ts +19 -3
- package/dist/adapters/node/node-player-server.js +43 -9
- package/dist/adapters/node/node-playerinfo.d.ts +2 -2
- package/dist/adapters/node/node-playerinfo.js +14 -3
- package/dist/adapters/node/node-vehicle-server.d.ts +1 -1
- package/dist/adapters/node/node-vehicle-server.js +1 -1
- package/dist/adapters/platform/index.d.ts +1 -0
- package/dist/{runtime/server/database.js → adapters/platform/index.js} +1 -7
- package/dist/adapters/platform/platform-registry.d.ts +101 -0
- package/dist/adapters/platform/platform-registry.js +122 -0
- package/dist/adapters/register-capabilities.d.ts +52 -2
- package/dist/adapters/register-capabilities.js +69 -130
- package/dist/adapters/register-client-capabilities.js +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.js +5 -31
- package/dist/kernel/di/container.d.ts +4 -2
- package/dist/kernel/di/container.js +5 -3
- package/dist/kernel/di/metadata.scanner.d.ts +2 -1
- package/dist/kernel/di/metadata.scanner.js +3 -2
- package/dist/kernel/{utils/error → error}/app.error.d.ts +2 -2
- package/dist/kernel/error/common.error-codes.d.ts +1 -0
- package/dist/kernel/error/framework.error-codes.d.ts +12 -0
- package/dist/kernel/error/index.d.ts +4 -0
- package/dist/kernel/error/index.js +18 -0
- package/dist/kernel/{utils/error → error}/security.error.d.ts +1 -1
- package/dist/kernel/error/security.types.js +2 -0
- package/dist/kernel/index.d.ts +4 -5
- package/dist/kernel/index.js +6 -11
- package/dist/kernel/{shared/logger → logger}/core-logger.d.ts +0 -19
- package/dist/kernel/{shared/logger → logger}/core-logger.js +10 -24
- package/dist/kernel/{shared/logger → logger}/logger.env.d.ts +12 -5
- package/dist/kernel/{shared/logger → logger}/logger.env.js +29 -13
- package/dist/kernel/{shared/logger → logger}/logger.service.d.ts +14 -0
- package/dist/kernel/{shared/logger → logger}/logger.service.js +20 -2
- package/dist/kernel/logger/transports/transport.interface.js +2 -0
- package/dist/kernel/shared/index.d.ts +1 -2
- package/dist/kernel/shared/index.js +1 -2
- package/dist/kernel/utils/index.d.ts +0 -2
- package/dist/kernel/utils/index.js +0 -2
- package/dist/kernel/utils/result.d.ts +1 -1
- package/dist/runtime/client/api.d.ts +7 -0
- package/dist/runtime/client/api.js +23 -0
- package/dist/runtime/client/client-bootstrap.js +1 -1
- package/dist/runtime/client/controllers/spawner.controller.d.ts +1 -1
- package/dist/runtime/client/decorators/index.d.ts +2 -2
- package/dist/runtime/client/decorators/index.js +2 -2
- package/dist/runtime/client/decorators/key.d.ts +2 -2
- package/dist/runtime/client/decorators/key.js +3 -3
- package/dist/runtime/client/decorators/localEvent.d.ts +1 -1
- package/dist/runtime/client/decorators/localEvent.js +1 -1
- package/dist/runtime/client/decorators/{tick.d.ts → onTick.d.ts} +1 -1
- package/dist/runtime/client/decorators/{tick.js → onTick.js} +2 -2
- package/dist/runtime/client/decorators/{nui.d.ts → onView.d.ts} +4 -4
- package/dist/runtime/client/decorators/{nui.js → onView.js} +5 -5
- package/dist/runtime/client/index.d.ts +1 -7
- package/dist/runtime/client/index.js +26 -12
- package/dist/runtime/client/player/player.d.ts +1 -1
- package/dist/runtime/client/player/player.loader.js +3 -3
- package/dist/runtime/client/services/appearance.service.d.ts +1 -1
- package/dist/runtime/client/services/appearance.service.js +1 -1
- package/dist/runtime/client/services/blip.service.d.ts +1 -1
- package/dist/runtime/client/services/marker.service.d.ts +1 -1
- package/dist/runtime/client/services/ped.service.d.ts +1 -1
- package/dist/runtime/client/services/spawn.service.d.ts +2 -2
- package/dist/runtime/client/services/spawn.service.js +12 -12
- package/dist/runtime/client/services/textui.service.d.ts +1 -1
- package/dist/runtime/client/services/vehicle-client.service.d.ts +1 -1
- package/dist/runtime/client/services/vehicle.service.d.ts +1 -1
- package/dist/runtime/client/system/processors/export.processor.js +1 -1
- package/dist/runtime/client/system/processors/gameEvent.processor.js +1 -1
- package/dist/runtime/client/system/processors/interval.processor.js +1 -1
- package/dist/runtime/client/system/processors/localEvent.processor.js +1 -1
- package/dist/runtime/client/system/processors/netEvent.processor.js +1 -1
- package/dist/runtime/client/system/processors/nui.processor.js +1 -1
- package/dist/runtime/client/system/processors/resourceLifecycle.processor.js +1 -1
- package/dist/runtime/client/system/processors/tick.processor.js +1 -1
- package/dist/runtime/client/ui-bridge.js +1 -1
- package/dist/runtime/core/entity.d.ts +168 -0
- package/dist/runtime/core/entity.js +226 -0
- package/dist/runtime/core/index.d.ts +3 -0
- package/dist/runtime/core/index.js +19 -0
- package/dist/runtime/core/spatial.d.ts +5 -0
- package/dist/runtime/core/spatial.js +2 -0
- package/dist/runtime/core/world.d.ts +13 -0
- package/dist/runtime/core/world.js +64 -0
- package/dist/runtime/server/api.d.ts +12 -0
- package/dist/runtime/server/api.js +34 -0
- package/dist/runtime/server/bootstrap.js +58 -103
- package/dist/runtime/server/bus/internal-event.bus.js +1 -1
- package/dist/runtime/server/contracts/index.d.ts +1 -2
- package/dist/runtime/server/contracts/index.js +2 -3
- package/dist/runtime/server/contracts/player-persistence.contract.d.ts +16 -18
- package/dist/runtime/server/contracts/player-persistence.contract.js +16 -18
- package/dist/runtime/server/contracts/security/command-error-observer.contract.d.ts +73 -0
- package/dist/runtime/server/contracts/security/command-error-observer.contract.js +9 -0
- package/dist/runtime/server/contracts/security/permission.types.d.ts +2 -2
- package/dist/runtime/server/contracts/security/principal-provider.contract.d.ts +3 -3
- package/dist/runtime/server/contracts/security/principal-provider.contract.js +2 -2
- package/dist/runtime/server/contracts/security/security-handler.contract.d.ts +2 -2
- package/dist/runtime/server/controllers/chat.controller.d.ts +1 -1
- package/dist/runtime/server/controllers/chat.controller.js +5 -0
- package/dist/runtime/server/controllers/command-export.controller.d.ts +12 -3
- package/dist/runtime/server/controllers/command-export.controller.js +81 -25
- package/dist/runtime/server/controllers/player-export.controller.d.ts +2 -2
- package/dist/runtime/server/controllers/player-export.controller.js +5 -0
- package/dist/runtime/server/controllers/principal-export.controller.js +8 -7
- package/dist/runtime/server/controllers/ready.controller.d.ts +5 -0
- package/dist/runtime/server/controllers/ready.controller.js +37 -0
- package/dist/runtime/server/controllers/remote-command-execution.controller.d.ts +10 -1
- package/dist/runtime/server/controllers/remote-command-execution.controller.js +65 -13
- package/dist/runtime/server/controllers/session.controller.d.ts +2 -2
- package/dist/runtime/server/controllers/session.controller.js +25 -17
- package/dist/runtime/server/controllers/vehicle.controller.d.ts +3 -38
- package/dist/runtime/server/controllers/vehicle.controller.js +6 -152
- package/dist/runtime/server/decorators/guard.js +2 -2
- package/dist/runtime/server/decorators/index.d.ts +1 -1
- package/dist/runtime/server/decorators/index.js +1 -1
- package/dist/runtime/server/decorators/{onFiveMEvent.d.ts → onRuntimeEvent.d.ts} +5 -4
- package/dist/runtime/server/decorators/{onFiveMEvent.js → onRuntimeEvent.js} +7 -6
- package/dist/runtime/server/decorators/requiresState.js +3 -3
- package/dist/runtime/server/decorators/throttle.d.ts +1 -1
- package/dist/runtime/server/decorators/throttle.js +1 -1
- package/dist/runtime/server/decorators/utils.d.ts +1 -1
- package/dist/runtime/server/decorators/utils.js +1 -1
- package/dist/runtime/server/devmode/dev-mode.service.d.ts +7 -8
- package/dist/runtime/server/devmode/dev-mode.service.js +18 -46
- package/dist/runtime/server/devmode/index.d.ts +1 -3
- package/dist/runtime/server/devmode/index.js +1 -18
- package/dist/runtime/server/devmode/player-simulator.service.js +3 -3
- package/dist/runtime/server/devmode/state-inspector.service.js +2 -2
- package/dist/runtime/server/devmode/types.d.ts +67 -31
- package/dist/runtime/server/devmode/types.js +1 -4
- package/dist/runtime/server/entities/player.d.ts +80 -66
- package/dist/runtime/server/entities/player.js +137 -98
- package/dist/runtime/server/entities/vehicle.d.ts +3 -3
- package/dist/runtime/server/error-handler.js +5 -5
- package/dist/runtime/server/helpers/normalize-app-error.d.ts +9 -0
- package/dist/runtime/server/helpers/normalize-app-error.js +20 -0
- package/dist/runtime/server/helpers/resolve-method.js +3 -3
- package/dist/runtime/server/index.d.ts +1 -13
- package/dist/runtime/server/index.js +25 -23
- package/dist/runtime/server/runtime.d.ts +32 -281
- package/dist/runtime/server/runtime.js +46 -60
- package/dist/runtime/server/services/appearance.service.d.ts +5 -5
- package/dist/runtime/server/services/appearance.service.js +5 -5
- package/dist/runtime/server/services/chat.service.d.ts +5 -3
- package/dist/runtime/server/services/chat.service.js +17 -12
- package/dist/runtime/server/services/core/command.service.d.ts +9 -1
- package/dist/runtime/server/services/core/command.service.js +16 -7
- package/dist/runtime/server/services/core/player.service.d.ts +12 -16
- package/dist/runtime/server/services/core/player.service.js +42 -47
- package/dist/runtime/server/services/core/principal.service.js +5 -5
- package/dist/runtime/server/services/core/session-recovery.service.d.ts +1 -1
- package/dist/runtime/server/services/core/session-recovery.service.js +2 -2
- package/dist/runtime/server/services/default/default-command-error-observer.d.ts +14 -0
- package/dist/runtime/server/services/default/default-command-error-observer.js +43 -0
- package/dist/runtime/server/services/default/default-principal.provider.d.ts +13 -0
- package/dist/runtime/server/services/default/default-principal.provider.js +38 -0
- package/dist/runtime/server/services/default/default-security.handler.d.ts +1 -1
- package/dist/runtime/server/services/default/default-security.handler.js +1 -1
- package/dist/runtime/server/services/index.d.ts +0 -3
- package/dist/runtime/server/services/index.js +1 -6
- package/dist/runtime/server/services/persistence.service.js +3 -3
- package/dist/runtime/server/services/ports/command-execution.port.d.ts +7 -0
- package/dist/runtime/server/services/ports/principal.port.d.ts +1 -1
- package/dist/runtime/server/services/remote/remote-command.service.d.ts +1 -0
- package/dist/runtime/server/services/remote/remote-command.service.js +7 -3
- package/dist/runtime/server/services/remote/remote-player.service.d.ts +2 -2
- package/dist/runtime/server/services/remote/remote-player.service.js +3 -3
- package/dist/runtime/server/services/remote/server-bridge.js +2 -2
- package/dist/runtime/server/services/services.register.d.ts +2 -5
- package/dist/runtime/server/services/services.register.js +29 -41
- package/dist/runtime/server/services/vehicle-modification.service.js +1 -1
- package/dist/runtime/server/services/vehicle.service.d.ts +3 -3
- package/dist/runtime/server/services/vehicle.service.js +5 -5
- package/dist/runtime/server/setup.d.ts +2 -3
- package/dist/runtime/server/setup.js +10 -11
- package/dist/runtime/server/system/metadata-server.keys.d.ts +1 -1
- package/dist/runtime/server/system/metadata-server.keys.js +1 -1
- package/dist/runtime/server/system/processors/command.processor.js +4 -0
- package/dist/runtime/server/system/processors/export.processor.js +1 -1
- package/dist/runtime/server/system/processors/internalEvent.processor.js +1 -1
- package/dist/runtime/server/system/processors/netEvent.processor.js +8 -9
- package/dist/runtime/server/system/processors/{fivemEvent.processor.d.ts → runtimeEvent.processor.d.ts} +1 -1
- package/dist/runtime/server/system/processors/{fivemEvent.processor.js → runtimeEvent.processor.js} +8 -8
- package/dist/runtime/server/system/processors/tick.processor.js +1 -1
- package/dist/runtime/server/system/processors.register.js +16 -11
- package/dist/runtime/server/system/schema-generator.js +2 -2
- package/dist/runtime/server/types/core-exports.d.ts +6 -6
- package/dist/runtime/server/types/index.d.ts +1 -1
- package/dist/runtime/server/types/index.js +1 -1
- package/dist/runtime/server/types/internal-events.d.ts +1 -1
- package/dist/runtime/server/types/vehicle.types.d.ts +1 -1
- package/package.json +7 -15
- package/dist/adapters/contracts/IEntityServer.d.ts +0 -88
- package/dist/adapters/contracts/IEntityServer.js +0 -13
- package/dist/adapters/contracts/IPlayerServer.js +0 -13
- package/dist/adapters/database/oxmysql.adapter.d.ts +0 -89
- package/dist/adapters/database/oxmysql.adapter.js +0 -149
- package/dist/adapters/database/resource.adapter.d.ts +0 -12
- package/dist/adapters/database/resource.adapter.js +0 -68
- package/dist/kernel/shared/appearance/index.d.ts +0 -1
- package/dist/runtime/index.d.ts +0 -2
- package/dist/runtime/index.js +0 -39
- package/dist/runtime/server/bootstrap.validation.d.ts +0 -12
- package/dist/runtime/server/bootstrap.validation.js +0 -104
- package/dist/runtime/server/contracts/auth-provider.contract.d.ts +0 -58
- package/dist/runtime/server/contracts/auth-provider.contract.js +0 -23
- package/dist/runtime/server/contracts/repository/index.d.ts +0 -57
- package/dist/runtime/server/contracts/repository/index.js +0 -61
- package/dist/runtime/server/contracts/repository/repository.contract.d.ts +0 -224
- package/dist/runtime/server/contracts/repository/repository.contract.js +0 -341
- package/dist/runtime/server/contracts/repository/repository.types.d.ts +0 -51
- package/dist/runtime/server/contracts/repository/repository.types.js +0 -7
- package/dist/runtime/server/database/adapter.registry.d.ts +0 -4
- package/dist/runtime/server/database/adapter.registry.js +0 -14
- package/dist/runtime/server/database/database.contract.d.ts +0 -128
- package/dist/runtime/server/database/database.contract.js +0 -29
- package/dist/runtime/server/database/database.service.d.ts +0 -188
- package/dist/runtime/server/database/database.service.js +0 -287
- package/dist/runtime/server/database/index.d.ts +0 -5
- package/dist/runtime/server/database/index.js +0 -25
- package/dist/runtime/server/database/types.d.ts +0 -67
- package/dist/runtime/server/database/types.js +0 -7
- package/dist/runtime/server/database.d.ts +0 -7
- package/dist/runtime/server/devmode/hot-reload.server.d.ts +0 -74
- package/dist/runtime/server/devmode/hot-reload.server.js +0 -261
- package/dist/runtime/server/services/config.service.d.ts +0 -75
- package/dist/runtime/server/services/config.service.js +0 -116
- package/dist/runtime/server/services/http/http.service.d.ts +0 -50
- package/dist/runtime/server/services/http/http.service.js +0 -126
- /package/dist/adapters/contracts/{IPedAppearanceClient.js → client/IPedAppearanceClient.js} +0 -0
- /package/dist/adapters/contracts/{IPedAppearanceServer.d.ts → server/IPedAppearanceServer.d.ts} +0 -0
- /package/dist/adapters/contracts/{IPedAppearanceServer.js → server/IPedAppearanceServer.js} +0 -0
- /package/dist/adapters/contracts/{IVehicleServer.d.ts → server/IVehicleServer.d.ts} +0 -0
- /package/dist/adapters/contracts/{IVehicleServer.js → server/IVehicleServer.js} +0 -0
- /package/dist/kernel/{utils/error → error}/app.error.js +0 -0
- /package/dist/kernel/{shared/logger/transports/transport.interface.js → error/common.error-codes.js} +0 -0
- /package/dist/{runtime/server/types/security.types.js → kernel/error/framework.error-codes.js} +0 -0
- /package/dist/kernel/{utils/error → error}/security.error.js +0 -0
- /package/dist/{runtime/server/types → kernel/error}/security.types.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/index.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/index.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.config.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.config.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.types.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.types.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/console.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/console.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/http.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/http.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/index.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/index.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/transport.interface.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.js +0 -0
- /package/dist/kernel/shared/{appearance/appearance.interface.d.ts → player-appearance.types.d.ts} +0 -0
- /package/dist/kernel/shared/{appearance/appearance.interface.js → player-appearance.types.js} +0 -0
|
@@ -8,9 +8,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.ChatService = void 0;
|
|
13
16
|
const tsyringe_1 = require("tsyringe");
|
|
17
|
+
const INetTransport_1 = require("../../../adapters/contracts/INetTransport");
|
|
14
18
|
const player_directory_port_1 = require("./ports/player-directory.port");
|
|
15
19
|
/**
|
|
16
20
|
* Service for sending chat messages to players.
|
|
@@ -19,8 +23,9 @@ const player_directory_port_1 = require("./ports/player-directory.port");
|
|
|
19
23
|
* This service emits framework chat events over the network.
|
|
20
24
|
*/
|
|
21
25
|
let ChatService = class ChatService {
|
|
22
|
-
constructor(playerDirectory) {
|
|
26
|
+
constructor(playerDirectory, netTransport) {
|
|
23
27
|
this.playerDirectory = playerDirectory;
|
|
28
|
+
this.netTransport = netTransport;
|
|
24
29
|
}
|
|
25
30
|
/**
|
|
26
31
|
* Broadcast a chat message to all connected players.
|
|
@@ -30,7 +35,7 @@ let ChatService = class ChatService {
|
|
|
30
35
|
* @param color - Message color (RGB). Defaults to white.
|
|
31
36
|
*/
|
|
32
37
|
broadcast(message, author = 'SYSTEM', color = { r: 255, g: 255, b: 255 }) {
|
|
33
|
-
emitNet('core:chat:message',
|
|
38
|
+
this.netTransport.emitNet('core:chat:message', 'all', {
|
|
34
39
|
args: [author, message],
|
|
35
40
|
color: color,
|
|
36
41
|
});
|
|
@@ -44,7 +49,7 @@ let ChatService = class ChatService {
|
|
|
44
49
|
* @param color - Message color (RGB).
|
|
45
50
|
*/
|
|
46
51
|
sendPrivate(player, message, author = 'Private', color = { r: 200, g: 200, b: 200 }) {
|
|
47
|
-
emitNet('core:chat:addMessage', player.clientID, {
|
|
52
|
+
this.netTransport.emitNet('core:chat:addMessage', player.clientID, {
|
|
48
53
|
args: [author, message],
|
|
49
54
|
color: color,
|
|
50
55
|
});
|
|
@@ -55,7 +60,7 @@ let ChatService = class ChatService {
|
|
|
55
60
|
* @param player - Target player.
|
|
56
61
|
*/
|
|
57
62
|
clearChat(player) {
|
|
58
|
-
emitNet('core:chat:clear', player.clientID);
|
|
63
|
+
this.netTransport.emitNet('core:chat:clear', player.clientID);
|
|
59
64
|
}
|
|
60
65
|
/**
|
|
61
66
|
* Send a chat message to multiple players.
|
|
@@ -66,12 +71,10 @@ let ChatService = class ChatService {
|
|
|
66
71
|
* @param color - Message color (RGB).
|
|
67
72
|
*/
|
|
68
73
|
sendMany(players, message, author = 'SYSTEM', color = { r: 255, g: 255, b: 255 }) {
|
|
69
|
-
players.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
color: color,
|
|
74
|
-
});
|
|
74
|
+
const targetIds = players.map((p) => (typeof p === 'number' ? p : p.clientID));
|
|
75
|
+
this.netTransport.emitNet('core:chat:addMessage', targetIds, {
|
|
76
|
+
args: [author, message],
|
|
77
|
+
color: color,
|
|
75
78
|
});
|
|
76
79
|
}
|
|
77
80
|
/**
|
|
@@ -113,11 +116,13 @@ let ChatService = class ChatService {
|
|
|
113
116
|
* Clear chat for all connected players.
|
|
114
117
|
*/
|
|
115
118
|
clearChatAll() {
|
|
116
|
-
emitNet('core:chat:clear',
|
|
119
|
+
this.netTransport.emitNet('core:chat:clear', 'all');
|
|
117
120
|
}
|
|
118
121
|
};
|
|
119
122
|
exports.ChatService = ChatService;
|
|
120
123
|
exports.ChatService = ChatService = __decorate([
|
|
121
124
|
(0, tsyringe_1.injectable)(),
|
|
122
|
-
|
|
125
|
+
__param(1, (0, tsyringe_1.inject)(INetTransport_1.INetTransport)),
|
|
126
|
+
__metadata("design:paramtypes", [player_directory_port_1.PlayerDirectoryPort,
|
|
127
|
+
INetTransport_1.INetTransport])
|
|
123
128
|
], ChatService);
|
|
@@ -16,6 +16,13 @@ import { CommandExecutionPort, type CommandInfo } from '../ports/command-executi
|
|
|
16
16
|
*/
|
|
17
17
|
export declare class CommandService extends CommandExecutionPort {
|
|
18
18
|
private commands;
|
|
19
|
+
/**
|
|
20
|
+
* Returns decorator metadata for a registered command.
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* Mainly used by controllers to enrich error observation (usage/description/etc.).
|
|
24
|
+
*/
|
|
25
|
+
getCommandMeta(commandName: string): CommandMetadata | undefined;
|
|
19
26
|
/**
|
|
20
27
|
* Registers a command handler.
|
|
21
28
|
*
|
|
@@ -28,7 +35,8 @@ export declare class CommandService extends CommandExecutionPort {
|
|
|
28
35
|
*
|
|
29
36
|
* @remarks
|
|
30
37
|
* **Security**: Commands require authentication by default unless marked with @Public().
|
|
31
|
-
* Unauthenticated attempts are blocked
|
|
38
|
+
* Unauthenticated attempts are blocked by throwing an {@link AppError}.
|
|
39
|
+
* Higher-level controllers can observe the failure and decide how to notify the player.
|
|
32
40
|
*
|
|
33
41
|
* Argument parsing behavior depends on the schema:
|
|
34
42
|
* - Zod object schema: maps raw args to parameter names.
|
|
@@ -8,8 +8,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.CommandService = void 0;
|
|
10
10
|
const tsyringe_1 = require("tsyringe");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
11
|
+
const app_error_1 = require("../../../../kernel/error/app.error");
|
|
12
|
+
const logger_1 = require("../../../../kernel/logger");
|
|
13
13
|
const command_validation_helper_1 = require("../../helpers/command-validation.helper");
|
|
14
14
|
const command_execution_port_1 = require("../ports/command-execution.port");
|
|
15
15
|
/**
|
|
@@ -30,6 +30,16 @@ let CommandService = class CommandService extends command_execution_port_1.Comma
|
|
|
30
30
|
super(...arguments);
|
|
31
31
|
this.commands = new Map();
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns decorator metadata for a registered command.
|
|
35
|
+
*
|
|
36
|
+
* @remarks
|
|
37
|
+
* Mainly used by controllers to enrich error observation (usage/description/etc.).
|
|
38
|
+
*/
|
|
39
|
+
getCommandMeta(commandName) {
|
|
40
|
+
var _a;
|
|
41
|
+
return (_a = this.commands.get(commandName.toLowerCase())) === null || _a === void 0 ? void 0 : _a.meta;
|
|
42
|
+
}
|
|
33
43
|
/**
|
|
34
44
|
* Registers a command handler.
|
|
35
45
|
*
|
|
@@ -57,7 +67,8 @@ let CommandService = class CommandService extends command_execution_port_1.Comma
|
|
|
57
67
|
*
|
|
58
68
|
* @remarks
|
|
59
69
|
* **Security**: Commands require authentication by default unless marked with @Public().
|
|
60
|
-
* Unauthenticated attempts are blocked
|
|
70
|
+
* Unauthenticated attempts are blocked by throwing an {@link AppError}.
|
|
71
|
+
* Higher-level controllers can observe the failure and decide how to notify the player.
|
|
61
72
|
*
|
|
62
73
|
* Argument parsing behavior depends on the schema:
|
|
63
74
|
* - Zod object schema: maps raw args to parameter names.
|
|
@@ -73,7 +84,7 @@ let CommandService = class CommandService extends command_execution_port_1.Comma
|
|
|
73
84
|
async execute(player, commandName, args) {
|
|
74
85
|
const entry = this.commands.get(commandName.toLowerCase());
|
|
75
86
|
if (!entry)
|
|
76
|
-
throw new
|
|
87
|
+
throw new app_error_1.AppError('COMMAND:NOT_FOUND', `Command not found: ${commandName}`, 'client');
|
|
77
88
|
const { meta, handler, isPublic } = entry;
|
|
78
89
|
// ═══════════════════════════════════════════════════════════════
|
|
79
90
|
// SECURE BY DEFAULT: Require authentication unless @Public()
|
|
@@ -84,9 +95,7 @@ let CommandService = class CommandService extends command_execution_port_1.Comma
|
|
|
84
95
|
command: commandName,
|
|
85
96
|
clientId: player.clientID,
|
|
86
97
|
});
|
|
87
|
-
|
|
88
|
-
player.send('You must be authenticated to use this command', 'error');
|
|
89
|
-
return;
|
|
98
|
+
throw new app_error_1.AppError('AUTH:UNAUTHORIZED', 'You must be authenticated to use this command', 'client');
|
|
90
99
|
}
|
|
91
100
|
}
|
|
92
101
|
return await (0, command_validation_helper_1.validateAndExecuteCommand)(meta, player, args, handler);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { IPlayerInfo } from '../../../../adapters';
|
|
2
|
-
import { IEntityServer } from '../../../../adapters/contracts/IEntityServer';
|
|
3
2
|
import { INetTransport } from '../../../../adapters/contracts/INetTransport';
|
|
4
|
-
import {
|
|
3
|
+
import { IEntityServer } from '../../../../adapters/contracts/server/IEntityServer';
|
|
4
|
+
import { IPlayerServer } from '../../../../adapters/contracts/server/IPlayerServer';
|
|
5
|
+
import { WorldContext } from '../../../core/world';
|
|
5
6
|
import { Player } from '../../entities';
|
|
6
7
|
import { PlayerDirectoryPort } from '../ports/player-directory.port';
|
|
7
8
|
import { PlayerSessionLifecyclePort } from '../ports/player-session-lifecycle.port';
|
|
@@ -16,19 +17,14 @@ import { PlayerSession } from '../types/player-session.object';
|
|
|
16
17
|
* It exposes the operations defined by {@link PlayerDirectoryPort} and {@link PlayerSessionLifecyclePort}.
|
|
17
18
|
*/
|
|
18
19
|
export declare class PlayerService implements PlayerDirectoryPort, PlayerSessionLifecyclePort {
|
|
20
|
+
private readonly world;
|
|
19
21
|
private readonly playerInfo;
|
|
20
22
|
private readonly playerServer;
|
|
21
23
|
private readonly entityServer;
|
|
22
24
|
private readonly netTransport;
|
|
23
|
-
/**
|
|
24
|
-
* Internal map storing active player sessions indexed by their FiveM client ID (source).
|
|
25
|
-
*/
|
|
26
|
-
private playersByClient;
|
|
27
|
-
/**
|
|
28
|
-
* Cached adapters bundle for Player instances
|
|
29
|
-
*/
|
|
30
25
|
private readonly playerAdapters;
|
|
31
|
-
constructor(playerInfo: IPlayerInfo, playerServer: IPlayerServer, entityServer: IEntityServer, netTransport: INetTransport);
|
|
26
|
+
constructor(world: WorldContext, playerInfo: IPlayerInfo, playerServer: IPlayerServer, entityServer: IEntityServer, netTransport: INetTransport);
|
|
27
|
+
private isPlayer;
|
|
32
28
|
/**
|
|
33
29
|
* Initializes a new player session for a connecting client.
|
|
34
30
|
*
|
|
@@ -57,6 +53,12 @@ export declare class PlayerService implements PlayerDirectoryPort, PlayerSession
|
|
|
57
53
|
*/
|
|
58
54
|
getByClient(clientID: number): Player | undefined;
|
|
59
55
|
getMany(clientIds: number[]): Player[];
|
|
56
|
+
/**
|
|
57
|
+
* Returns a list of all currently active `Player` entities.
|
|
58
|
+
*
|
|
59
|
+
* @returns An array containing all connected players managed by this service.
|
|
60
|
+
*/
|
|
61
|
+
getAll(): Player[];
|
|
60
62
|
/**
|
|
61
63
|
* Helper to retrieve the authenticated Account ID for a given client.
|
|
62
64
|
*
|
|
@@ -82,12 +84,6 @@ export declare class PlayerService implements PlayerDirectoryPort, PlayerSession
|
|
|
82
84
|
* @returns The value cast to type `T`, or `undefined` if the key or player doesn't exist.
|
|
83
85
|
*/
|
|
84
86
|
getMeta<T = unknown>(clientID: number, key: string): Promise<T | undefined>;
|
|
85
|
-
/**
|
|
86
|
-
* Returns a list of all currently active `Player` entities.
|
|
87
|
-
*
|
|
88
|
-
* @returns An array containing all connected players managed by this service.
|
|
89
|
-
*/
|
|
90
|
-
getAll(): Player[];
|
|
91
87
|
/**
|
|
92
88
|
* Retrieves a Player by their persistent account ID.
|
|
93
89
|
*
|
|
@@ -15,10 +15,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.PlayerService = void 0;
|
|
16
16
|
const tsyringe_1 = require("tsyringe");
|
|
17
17
|
const adapters_1 = require("../../../../adapters");
|
|
18
|
-
const IEntityServer_1 = require("../../../../adapters/contracts/IEntityServer");
|
|
19
18
|
const INetTransport_1 = require("../../../../adapters/contracts/INetTransport");
|
|
20
|
-
const
|
|
21
|
-
const
|
|
19
|
+
const IEntityServer_1 = require("../../../../adapters/contracts/server/IEntityServer");
|
|
20
|
+
const IPlayerServer_1 = require("../../../../adapters/contracts/server/IPlayerServer");
|
|
21
|
+
const logger_1 = require("../../../../kernel/logger");
|
|
22
|
+
const world_1 = require("../../../core/world");
|
|
22
23
|
const entities_1 = require("../../entities");
|
|
23
24
|
/**
|
|
24
25
|
* Service responsible for managing the lifecycle of player sessions.
|
|
@@ -30,15 +31,12 @@ const entities_1 = require("../../entities");
|
|
|
30
31
|
* It exposes the operations defined by {@link PlayerDirectoryPort} and {@link PlayerSessionLifecyclePort}.
|
|
31
32
|
*/
|
|
32
33
|
let PlayerService = class PlayerService {
|
|
33
|
-
constructor(playerInfo, playerServer, entityServer, netTransport) {
|
|
34
|
+
constructor(world, playerInfo, playerServer, entityServer, netTransport) {
|
|
35
|
+
this.world = world;
|
|
34
36
|
this.playerInfo = playerInfo;
|
|
35
37
|
this.playerServer = playerServer;
|
|
36
38
|
this.entityServer = entityServer;
|
|
37
39
|
this.netTransport = netTransport;
|
|
38
|
-
/**
|
|
39
|
-
* Internal map storing active player sessions indexed by their FiveM client ID (source).
|
|
40
|
-
*/
|
|
41
|
-
this.playersByClient = new Map();
|
|
42
40
|
this.playerAdapters = {
|
|
43
41
|
playerInfo: this.playerInfo,
|
|
44
42
|
playerServer: this.playerServer,
|
|
@@ -46,6 +44,9 @@ let PlayerService = class PlayerService {
|
|
|
46
44
|
netTransport: this.netTransport,
|
|
47
45
|
};
|
|
48
46
|
}
|
|
47
|
+
isPlayer(e) {
|
|
48
|
+
return e.id.startsWith('player:');
|
|
49
|
+
}
|
|
49
50
|
/**
|
|
50
51
|
* Initializes a new player session for a connecting client.
|
|
51
52
|
*
|
|
@@ -63,10 +64,10 @@ let PlayerService = class PlayerService {
|
|
|
63
64
|
meta: {},
|
|
64
65
|
};
|
|
65
66
|
const player = new entities_1.Player(session, this.playerAdapters);
|
|
66
|
-
this.
|
|
67
|
+
this.world.add(player);
|
|
67
68
|
logger_1.loggers.session.debug('Player session bound', {
|
|
68
69
|
clientID,
|
|
69
|
-
totalPlayers: this.
|
|
70
|
+
totalPlayers: this.world.sizeBy('player'),
|
|
70
71
|
});
|
|
71
72
|
return player;
|
|
72
73
|
}
|
|
@@ -79,10 +80,12 @@ let PlayerService = class PlayerService {
|
|
|
79
80
|
* @param clientID - The FiveM server ID of the player disconnecting.
|
|
80
81
|
*/
|
|
81
82
|
unbind(clientID) {
|
|
82
|
-
this.
|
|
83
|
+
const player = this.getByClient(clientID);
|
|
84
|
+
if (player)
|
|
85
|
+
this.world.remove(player.id);
|
|
83
86
|
logger_1.loggers.session.debug('Player session unbound', {
|
|
84
87
|
clientID,
|
|
85
|
-
totalPlayers: this.
|
|
88
|
+
totalPlayers: this.world.sizeBy('player'),
|
|
86
89
|
});
|
|
87
90
|
}
|
|
88
91
|
/**
|
|
@@ -92,17 +95,25 @@ let PlayerService = class PlayerService {
|
|
|
92
95
|
* @returns The `Player` instance if found, or `null` if the session does not exist.
|
|
93
96
|
*/
|
|
94
97
|
getByClient(clientID) {
|
|
95
|
-
return this.
|
|
98
|
+
return this.world.get(`player:${clientID}`);
|
|
96
99
|
}
|
|
97
100
|
getMany(clientIds) {
|
|
98
101
|
const result = [];
|
|
99
102
|
for (const id of clientIds) {
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
102
|
-
result.push(
|
|
103
|
+
const p = this.getByClient(id);
|
|
104
|
+
if (p)
|
|
105
|
+
result.push(p);
|
|
103
106
|
}
|
|
104
107
|
return result;
|
|
105
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Returns a list of all currently active `Player` entities.
|
|
111
|
+
*
|
|
112
|
+
* @returns An array containing all connected players managed by this service.
|
|
113
|
+
*/
|
|
114
|
+
getAll() {
|
|
115
|
+
return this.world.find(this.isPlayer);
|
|
116
|
+
}
|
|
106
117
|
/**
|
|
107
118
|
* Helper to retrieve the authenticated Account ID for a given client.
|
|
108
119
|
*
|
|
@@ -110,8 +121,8 @@ let PlayerService = class PlayerService {
|
|
|
110
121
|
* @returns The bound Account ID (string/UUID) if the player is logged in, or `null` otherwise.
|
|
111
122
|
*/
|
|
112
123
|
getPlayerId(clientID) {
|
|
113
|
-
|
|
114
|
-
return
|
|
124
|
+
var _a;
|
|
125
|
+
return (_a = this.getByClient(clientID)) === null || _a === void 0 ? void 0 : _a.accountID;
|
|
115
126
|
}
|
|
116
127
|
/**
|
|
117
128
|
* Stores arbitrary metadata in the player's session.
|
|
@@ -122,7 +133,7 @@ let PlayerService = class PlayerService {
|
|
|
122
133
|
* @param value - The value to store.
|
|
123
134
|
*/
|
|
124
135
|
setMeta(clientID, key, value) {
|
|
125
|
-
const player = this.
|
|
136
|
+
const player = this.getByClient(clientID);
|
|
126
137
|
if (!player)
|
|
127
138
|
return;
|
|
128
139
|
player.setMeta(key, value);
|
|
@@ -136,16 +147,8 @@ let PlayerService = class PlayerService {
|
|
|
136
147
|
* @returns The value cast to type `T`, or `undefined` if the key or player doesn't exist.
|
|
137
148
|
*/
|
|
138
149
|
async getMeta(clientID, key) {
|
|
139
|
-
|
|
140
|
-
return
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Returns a list of all currently active `Player` entities.
|
|
144
|
-
*
|
|
145
|
-
* @returns An array containing all connected players managed by this service.
|
|
146
|
-
*/
|
|
147
|
-
getAll() {
|
|
148
|
-
return Array.from(this.playersByClient.values());
|
|
150
|
+
var _a;
|
|
151
|
+
return (_a = this.getByClient(clientID)) === null || _a === void 0 ? void 0 : _a.getMeta(key);
|
|
149
152
|
}
|
|
150
153
|
// ═══════════════════════════════════════════════════════════════
|
|
151
154
|
// Extended Query Methods
|
|
@@ -157,12 +160,7 @@ let PlayerService = class PlayerService {
|
|
|
157
160
|
* @returns The Player if found, or `undefined` if not online.
|
|
158
161
|
*/
|
|
159
162
|
getByAccountId(accountId) {
|
|
160
|
-
|
|
161
|
-
if (player.accountID === accountId) {
|
|
162
|
-
return player;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return undefined;
|
|
163
|
+
return this.world.find(this.isPlayer).find((p) => p.accountID === accountId);
|
|
166
164
|
}
|
|
167
165
|
/**
|
|
168
166
|
* Returns the current number of connected players.
|
|
@@ -170,7 +168,7 @@ let PlayerService = class PlayerService {
|
|
|
170
168
|
* @returns Player count.
|
|
171
169
|
*/
|
|
172
170
|
getPlayerCount() {
|
|
173
|
-
return this.
|
|
171
|
+
return this.world.sizeBy('player');
|
|
174
172
|
}
|
|
175
173
|
/**
|
|
176
174
|
* Checks if a player with the given account ID is currently online.
|
|
@@ -179,22 +177,19 @@ let PlayerService = class PlayerService {
|
|
|
179
177
|
* @returns `true` if online, `false` otherwise.
|
|
180
178
|
*/
|
|
181
179
|
isOnline(accountId) {
|
|
182
|
-
|
|
183
|
-
if (player.accountID === accountId) {
|
|
184
|
-
return true;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return false;
|
|
180
|
+
return !!this.getByAccountId(accountId);
|
|
188
181
|
}
|
|
189
182
|
};
|
|
190
183
|
exports.PlayerService = PlayerService;
|
|
191
184
|
exports.PlayerService = PlayerService = __decorate([
|
|
192
185
|
(0, tsyringe_1.injectable)(),
|
|
193
|
-
__param(0, (0, tsyringe_1.inject)(
|
|
194
|
-
__param(1, (0, tsyringe_1.inject)(
|
|
195
|
-
__param(2, (0, tsyringe_1.inject)(
|
|
196
|
-
__param(3, (0, tsyringe_1.inject)(
|
|
197
|
-
|
|
186
|
+
__param(0, (0, tsyringe_1.inject)(world_1.WorldContext)),
|
|
187
|
+
__param(1, (0, tsyringe_1.inject)(adapters_1.IPlayerInfo)),
|
|
188
|
+
__param(2, (0, tsyringe_1.inject)(IPlayerServer_1.IPlayerServer)),
|
|
189
|
+
__param(3, (0, tsyringe_1.inject)(IEntityServer_1.IEntityServer)),
|
|
190
|
+
__param(4, (0, tsyringe_1.inject)(INetTransport_1.INetTransport)),
|
|
191
|
+
__metadata("design:paramtypes", [world_1.WorldContext,
|
|
192
|
+
adapters_1.IPlayerInfo,
|
|
198
193
|
IPlayerServer_1.IPlayerServer,
|
|
199
194
|
IEntityServer_1.IEntityServer,
|
|
200
195
|
INetTransport_1.INetTransport])
|
|
@@ -11,7 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.LocalPrincipalService = void 0;
|
|
13
13
|
const tsyringe_1 = require("tsyringe");
|
|
14
|
-
const
|
|
14
|
+
const app_error_1 = require("../../../../kernel/error/app.error");
|
|
15
15
|
const contracts_1 = require("../../contracts");
|
|
16
16
|
const principal_port_1 = require("../ports/principal.port");
|
|
17
17
|
/**
|
|
@@ -102,19 +102,19 @@ let LocalPrincipalService = class LocalPrincipalService extends principal_port_1
|
|
|
102
102
|
if (requirements.rank !== undefined) {
|
|
103
103
|
const principal = await this.provider.getPrincipal(player);
|
|
104
104
|
if (!principal) {
|
|
105
|
-
throw new
|
|
105
|
+
throw new app_error_1.AppError('AUTH:UNAUTHORIZED', 'No principal found', 'core');
|
|
106
106
|
}
|
|
107
107
|
if (principal.rank === undefined) {
|
|
108
|
-
throw new
|
|
108
|
+
throw new app_error_1.AppError('GAME:NO_RANK_IN_PRINCIPAL', "You're trying to compare a Principal rank, but there's no defined rank!", 'core');
|
|
109
109
|
}
|
|
110
110
|
if (principal.rank < requirements.rank) {
|
|
111
|
-
throw new
|
|
111
|
+
throw new app_error_1.AppError('AUTH:PERMISSION_DENIED', `Access Denied: Requires minimum rank level ${requirements.rank}`, 'core');
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
if (requirements.permission) {
|
|
115
115
|
const hasPerm = await this.hasPermission(player, requirements.permission);
|
|
116
116
|
if (!hasPerm) {
|
|
117
|
-
throw new
|
|
117
|
+
throw new app_error_1.AppError('AUTH:PERMISSION_DENIED', `Access Denied: Missing required permission '${requirements.permission}'`, 'core');
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IPlayerServer } from '../../../../adapters/contracts/IPlayerServer';
|
|
1
|
+
import { IPlayerServer } from '../../../../adapters/contracts/server/IPlayerServer';
|
|
2
2
|
import { PlayerDirectoryPort } from '../ports/player-directory.port';
|
|
3
3
|
import { PlayerSessionLifecyclePort } from '../ports/player-session-lifecycle.port';
|
|
4
4
|
/**
|
|
@@ -11,8 +11,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.SessionRecoveryService = void 0;
|
|
13
13
|
const tsyringe_1 = require("tsyringe");
|
|
14
|
-
const IPlayerServer_1 = require("../../../../adapters/contracts/IPlayerServer");
|
|
15
|
-
const logger_1 = require("../../../../kernel/
|
|
14
|
+
const IPlayerServer_1 = require("../../../../adapters/contracts/server/IPlayerServer");
|
|
15
|
+
const logger_1 = require("../../../../kernel/logger");
|
|
16
16
|
const internal_event_bus_1 = require("../../bus/internal-event.bus");
|
|
17
17
|
const player_directory_port_1 = require("../ports/player-directory.port");
|
|
18
18
|
const player_session_lifecycle_port_1 = require("../ports/player-session-lifecycle.port");
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type CommandErrorContext, CommandErrorObserverContract } from '../../contracts/security/command-error-observer.contract';
|
|
2
|
+
/**
|
|
3
|
+
* Default implementation for {@link CommandErrorObserverContract}.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The framework ships with a safe default that only logs.
|
|
7
|
+
* Projects can override this by registering their own observer in the DI container.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DefaultCommandErrorObserver extends CommandErrorObserverContract {
|
|
10
|
+
/**
|
|
11
|
+
* Logs the error context using the command logger.
|
|
12
|
+
*/
|
|
13
|
+
onError(ctx: CommandErrorContext): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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.DefaultCommandErrorObserver = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const logger_1 = require("../../../../kernel/logger");
|
|
12
|
+
const command_error_observer_contract_1 = require("../../contracts/security/command-error-observer.contract");
|
|
13
|
+
/**
|
|
14
|
+
* Default implementation for {@link CommandErrorObserverContract}.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* The framework ships with a safe default that only logs.
|
|
18
|
+
* Projects can override this by registering their own observer in the DI container.
|
|
19
|
+
*/
|
|
20
|
+
let DefaultCommandErrorObserver = class DefaultCommandErrorObserver extends command_error_observer_contract_1.CommandErrorObserverContract {
|
|
21
|
+
/**
|
|
22
|
+
* Logs the error context using the command logger.
|
|
23
|
+
*/
|
|
24
|
+
async onError(ctx) {
|
|
25
|
+
logger_1.loggers.command.error(`Command error`, {
|
|
26
|
+
mode: ctx.mode,
|
|
27
|
+
scope: ctx.scope,
|
|
28
|
+
stage: ctx.stage,
|
|
29
|
+
command: ctx.commandName,
|
|
30
|
+
ownerResourceName: ctx.ownerResourceName,
|
|
31
|
+
playerId: ctx.player.clientId,
|
|
32
|
+
accountId: ctx.player.accountId,
|
|
33
|
+
code: ctx.error.code,
|
|
34
|
+
origin: ctx.error.origin,
|
|
35
|
+
message: ctx.error.message,
|
|
36
|
+
details: ctx.error.details,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.DefaultCommandErrorObserver = DefaultCommandErrorObserver;
|
|
41
|
+
exports.DefaultCommandErrorObserver = DefaultCommandErrorObserver = __decorate([
|
|
42
|
+
(0, tsyringe_1.injectable)()
|
|
43
|
+
], DefaultCommandErrorObserver);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Server } from '../..';
|
|
2
|
+
import { Principal } from '../../contracts/security/permission.types';
|
|
3
|
+
import { PrincipalProviderContract } from '../../contracts/security/principal-provider.contract';
|
|
4
|
+
import { LinkedID } from '../types/linked-id';
|
|
5
|
+
/**
|
|
6
|
+
* Default principal provider that grants no permissions.
|
|
7
|
+
* Used when no custom principal provider is configured.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DefaultPrincipalProvider extends PrincipalProviderContract {
|
|
10
|
+
getPrincipal(player: Server.Player): Promise<Principal | null>;
|
|
11
|
+
refreshPrincipal(_player: Server.Player): Promise<void>;
|
|
12
|
+
getPrincipalByLinkedID(linkedID: LinkedID): Promise<Principal | null>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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.DefaultPrincipalProvider = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const principal_provider_contract_1 = require("../../contracts/security/principal-provider.contract");
|
|
12
|
+
/**
|
|
13
|
+
* Default principal provider that grants no permissions.
|
|
14
|
+
* Used when no custom principal provider is configured.
|
|
15
|
+
*/
|
|
16
|
+
let DefaultPrincipalProvider = class DefaultPrincipalProvider extends principal_provider_contract_1.PrincipalProviderContract {
|
|
17
|
+
async getPrincipal(player) {
|
|
18
|
+
return {
|
|
19
|
+
id: player.accountID || player.clientID.toString(),
|
|
20
|
+
permissions: [],
|
|
21
|
+
rank: 0,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async refreshPrincipal(_player) {
|
|
25
|
+
// No-op
|
|
26
|
+
}
|
|
27
|
+
async getPrincipalByLinkedID(linkedID) {
|
|
28
|
+
return {
|
|
29
|
+
id: String(linkedID),
|
|
30
|
+
permissions: [],
|
|
31
|
+
rank: 0,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.DefaultPrincipalProvider = DefaultPrincipalProvider;
|
|
36
|
+
exports.DefaultPrincipalProvider = DefaultPrincipalProvider = __decorate([
|
|
37
|
+
(0, tsyringe_1.injectable)()
|
|
38
|
+
], DefaultPrincipalProvider);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SecurityError } from '../../../../kernel/
|
|
1
|
+
import { SecurityError } from '../../../../kernel/error/security.error';
|
|
2
2
|
import { SecurityHandlerContract } from '../../contracts/security/security-handler.contract';
|
|
3
3
|
import { Player } from '../../entities';
|
|
4
4
|
/**
|
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.DefaultSecurityHandler = void 0;
|
|
10
10
|
const tsyringe_1 = require("tsyringe");
|
|
11
|
-
const logger_1 = require("../../../../kernel/
|
|
11
|
+
const logger_1 = require("../../../../kernel/logger");
|
|
12
12
|
const security_handler_contract_1 = require("../../contracts/security/security-handler.contract");
|
|
13
13
|
/**
|
|
14
14
|
* Default implementation of the security handler.
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
export * from '../database';
|
|
2
1
|
export * from './appearance.service';
|
|
3
2
|
export { ChatService } from './chat.service';
|
|
4
|
-
export { ConfigService } from './config.service';
|
|
5
3
|
export { SessionRecoveryService } from './core/session-recovery.service';
|
|
6
|
-
export { type HttpOptions, HttpService } from './http/http.service';
|
|
7
4
|
export * from './parallel';
|
|
8
5
|
export { PlayerPersistenceService } from './persistence.service';
|
|
9
6
|
export * from './ports/command-execution.port';
|
|
@@ -15,17 +15,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
16
|
};
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.RateLimiterService = exports.PlayerPersistenceService = exports.
|
|
19
|
-
__exportStar(require("../database"), exports);
|
|
18
|
+
exports.RateLimiterService = exports.PlayerPersistenceService = exports.SessionRecoveryService = exports.ChatService = void 0;
|
|
20
19
|
__exportStar(require("./appearance.service"), exports);
|
|
21
20
|
var chat_service_1 = require("./chat.service");
|
|
22
21
|
Object.defineProperty(exports, "ChatService", { enumerable: true, get: function () { return chat_service_1.ChatService; } });
|
|
23
|
-
var config_service_1 = require("./config.service");
|
|
24
|
-
Object.defineProperty(exports, "ConfigService", { enumerable: true, get: function () { return config_service_1.ConfigService; } });
|
|
25
22
|
var session_recovery_service_1 = require("./core/session-recovery.service");
|
|
26
23
|
Object.defineProperty(exports, "SessionRecoveryService", { enumerable: true, get: function () { return session_recovery_service_1.SessionRecoveryService; } });
|
|
27
|
-
var http_service_1 = require("./http/http.service");
|
|
28
|
-
Object.defineProperty(exports, "HttpService", { enumerable: true, get: function () { return http_service_1.HttpService; } });
|
|
29
24
|
__exportStar(require("./parallel"), exports);
|
|
30
25
|
var persistence_service_1 = require("./persistence.service");
|
|
31
26
|
Object.defineProperty(exports, "PlayerPersistenceService", { enumerable: true, get: function () { return persistence_service_1.PlayerPersistenceService; } });
|