@open-core/framework 0.2.8 → 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/README.md +10 -0
- 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 +5 -4
- 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.d.ts +8 -6
- package/dist/runtime/server/decorators/guard.js +10 -8
- package/dist/runtime/server/decorators/index.d.ts +1 -1
- package/dist/runtime/server/decorators/index.js +1 -1
- package/dist/runtime/server/decorators/onNet.d.ts +3 -3
- 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/parallel/index.d.ts +1 -45
- package/dist/runtime/server/services/parallel/index.js +0 -44
- package/dist/runtime/server/services/parallel/native-worker.entry.d.ts +1 -0
- package/dist/runtime/server/services/parallel/native-worker.entry.js +12 -0
- package/dist/runtime/server/services/parallel/parallel-compute.service.d.ts +17 -17
- package/dist/runtime/server/services/parallel/parallel-compute.service.js +10 -3
- package/dist/runtime/server/services/parallel/types.d.ts +5 -2
- package/dist/runtime/server/services/parallel/worker-pool.d.ts +5 -9
- package/dist/runtime/server/services/parallel/worker-pool.js +167 -57
- package/dist/runtime/server/services/parallel/worker.d.ts +8 -5
- package/dist/runtime/server/services/parallel/worker.js +8 -5
- 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 +8 -16
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RGB } from '../../../kernel/utils';
|
|
1
|
+
import { RGB } from '../../../kernel/utils/rgb';
|
|
2
2
|
import { ChatService } from '../services/chat.service';
|
|
3
3
|
import { PlayerDirectoryPort } from '../services/ports/player-directory.port';
|
|
4
4
|
export declare class ChatController {
|
|
@@ -8,8 +8,12 @@ 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.ChatController = void 0;
|
|
16
|
+
const tsyringe_1 = require("tsyringe");
|
|
13
17
|
const controller_1 = require("../decorators/controller");
|
|
14
18
|
const export_1 = require("../decorators/export");
|
|
15
19
|
const chat_service_1 = require("../services/chat.service");
|
|
@@ -57,6 +61,7 @@ __decorate([
|
|
|
57
61
|
], ChatController.prototype, "coreSendToGroupOfPlayers", null);
|
|
58
62
|
exports.ChatController = ChatController = __decorate([
|
|
59
63
|
(0, controller_1.Controller)(),
|
|
64
|
+
__param(1, (0, tsyringe_1.inject)(player_directory_port_1.PlayerDirectoryPort)),
|
|
60
65
|
__metadata("design:paramtypes", [chat_service_1.ChatService,
|
|
61
66
|
player_directory_port_1.PlayerDirectoryPort])
|
|
62
67
|
], ChatController);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { IEngineEvents } from '../../../adapters/contracts/IEngineEvents';
|
|
2
|
+
import { CommandErrorObserverContract } from '../contracts/security/command-error-observer.contract';
|
|
2
3
|
import { Player } from '../entities';
|
|
3
4
|
import { CommandExecutionPort, type CommandInfo } from '../services/ports/command-execution.port';
|
|
4
5
|
import { PlayerDirectoryPort } from '../services/ports/player-directory.port';
|
|
5
6
|
import { PrincipalPort } from '../services/ports/principal.port';
|
|
6
7
|
import { RateLimiterService } from '../services/rate-limiter.service';
|
|
7
|
-
import { CommandRegistrationDto,
|
|
8
|
+
import { CommandRegistrationDto, InternalCommandsExports } from '../types/core-exports';
|
|
8
9
|
/**
|
|
9
10
|
* Export controller for command system (CORE mode only).
|
|
10
11
|
*
|
|
@@ -13,14 +14,22 @@ import { CommandRegistrationDto, CoreCommandsExports } from '../types/core-expor
|
|
|
13
14
|
* Maintains a registry of both local and remote commands, delegating
|
|
14
15
|
* remote command execution back to the owning resource via net events.
|
|
15
16
|
*/
|
|
16
|
-
export declare class CommandExportController implements
|
|
17
|
+
export declare class CommandExportController implements InternalCommandsExports {
|
|
17
18
|
private commandService;
|
|
18
19
|
private playerDirectory;
|
|
19
20
|
private principalPort;
|
|
20
21
|
private rateLimiter;
|
|
22
|
+
private readonly commandErrorObserver;
|
|
21
23
|
private engineEvents;
|
|
22
24
|
private remoteCommands;
|
|
23
|
-
constructor(commandService: CommandExecutionPort, playerDirectory: PlayerDirectoryPort, principalPort: PrincipalPort, rateLimiter: RateLimiterService, engineEvents: IEngineEvents);
|
|
25
|
+
constructor(commandService: CommandExecutionPort, playerDirectory: PlayerDirectoryPort, principalPort: PrincipalPort, rateLimiter: RateLimiterService, commandErrorObserver: CommandErrorObserverContract, engineEvents: IEngineEvents);
|
|
26
|
+
/**
|
|
27
|
+
* Invokes the global {@link CommandErrorObserverContract} safely.
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* Observers are user-land code; failures must never break the command pipeline.
|
|
31
|
+
*/
|
|
32
|
+
private safeObserve;
|
|
24
33
|
/**
|
|
25
34
|
* Receives command execution requests from clients.
|
|
26
35
|
*
|
|
@@ -15,12 +15,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.CommandExportController = void 0;
|
|
16
16
|
const tsyringe_1 = require("tsyringe");
|
|
17
17
|
const IEngineEvents_1 = require("../../../adapters/contracts/IEngineEvents");
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
18
|
+
const error_1 = require("../../../kernel/error");
|
|
19
|
+
const logger_1 = require("../../../kernel/logger");
|
|
20
|
+
const command_error_observer_contract_1 = require("../contracts/security/command-error-observer.contract");
|
|
21
21
|
const decorators_1 = require("../decorators");
|
|
22
22
|
const onNet_1 = require("../decorators/onNet");
|
|
23
23
|
const entities_1 = require("../entities");
|
|
24
|
+
const normalize_app_error_1 = require("../helpers/normalize-app-error");
|
|
25
|
+
const runtime_1 = require("../runtime");
|
|
24
26
|
const command_execution_port_1 = require("../services/ports/command-execution.port");
|
|
25
27
|
const player_directory_port_1 = require("../services/ports/player-directory.port");
|
|
26
28
|
const principal_port_1 = require("../services/ports/principal.port");
|
|
@@ -34,14 +36,29 @@ const rate_limiter_service_1 = require("../services/rate-limiter.service");
|
|
|
34
36
|
* remote command execution back to the owning resource via net events.
|
|
35
37
|
*/
|
|
36
38
|
let CommandExportController = class CommandExportController {
|
|
37
|
-
constructor(commandService, playerDirectory, principalPort, rateLimiter, engineEvents) {
|
|
39
|
+
constructor(commandService, playerDirectory, principalPort, rateLimiter, commandErrorObserver, engineEvents) {
|
|
38
40
|
this.commandService = commandService;
|
|
39
41
|
this.playerDirectory = playerDirectory;
|
|
40
42
|
this.principalPort = principalPort;
|
|
41
43
|
this.rateLimiter = rateLimiter;
|
|
44
|
+
this.commandErrorObserver = commandErrorObserver;
|
|
42
45
|
this.engineEvents = engineEvents;
|
|
43
46
|
this.remoteCommands = new Map();
|
|
44
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Invokes the global {@link CommandErrorObserverContract} safely.
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* Observers are user-land code; failures must never break the command pipeline.
|
|
53
|
+
*/
|
|
54
|
+
async safeObserve(ctx) {
|
|
55
|
+
try {
|
|
56
|
+
await this.commandErrorObserver.onError(ctx);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
logger_1.loggers.command.fatal(`Command error observer failed`, ctx, e);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
45
62
|
// ═══════════════════════════════════════════════════════════════
|
|
46
63
|
// Network Event Handler (receives commands from clients)
|
|
47
64
|
// ═══════════════════════════════════════════════════════════════
|
|
@@ -73,22 +90,60 @@ let CommandExportController = class CommandExportController {
|
|
|
73
90
|
await this.executeCommand(player.clientID, command, args);
|
|
74
91
|
}
|
|
75
92
|
catch (error) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
93
|
+
const runtime = (0, runtime_1.getRuntimeContext)();
|
|
94
|
+
const remoteEntry = this.remoteCommands.get(command.toLowerCase());
|
|
95
|
+
const localMeta = this.commandService.getCommandMeta(command);
|
|
96
|
+
const appError = (0, normalize_app_error_1.normalizeToAppError)(error, 'server');
|
|
97
|
+
// If we have an error and it's not a remote command, try to find local meta
|
|
98
|
+
// to populate the error context properly for the observer.
|
|
99
|
+
const commandInfo = localMeta
|
|
100
|
+
? {
|
|
101
|
+
command: localMeta.command,
|
|
102
|
+
description: localMeta.description,
|
|
103
|
+
usage: localMeta.usage,
|
|
104
|
+
isPublic: localMeta.isPublic,
|
|
105
|
+
methodName: localMeta.methodName,
|
|
106
|
+
expectsPlayer: localMeta.expectsPlayer,
|
|
107
|
+
paramNames: localMeta.paramNames,
|
|
79
108
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
109
|
+
: remoteEntry
|
|
110
|
+
? {
|
|
111
|
+
command: remoteEntry.metadata.command,
|
|
112
|
+
description: remoteEntry.metadata.description,
|
|
113
|
+
usage: remoteEntry.metadata.usage,
|
|
114
|
+
isPublic: remoteEntry.metadata.isPublic,
|
|
115
|
+
}
|
|
116
|
+
: undefined;
|
|
117
|
+
const stage = error instanceof error_1.SecurityError
|
|
118
|
+
? 'security'
|
|
119
|
+
: appError.code === 'AUTH:UNAUTHORIZED'
|
|
120
|
+
? 'auth'
|
|
121
|
+
: appError.code === 'GAME:BAD_REQUEST' || appError.code.startsWith('SCHEMA:')
|
|
122
|
+
? 'validation'
|
|
123
|
+
: appError.code === 'COMMAND:NOT_FOUND'
|
|
124
|
+
? 'dispatch'
|
|
125
|
+
: 'unknown';
|
|
126
|
+
await this.safeObserve({
|
|
127
|
+
mode: runtime.mode,
|
|
128
|
+
scope: runtime.mode === 'CORE'
|
|
129
|
+
? 'core'
|
|
130
|
+
: runtime.mode === 'RESOURCE'
|
|
131
|
+
? 'resource'
|
|
132
|
+
: 'standalone',
|
|
133
|
+
stage,
|
|
134
|
+
error: appError,
|
|
135
|
+
commandName: command,
|
|
136
|
+
args,
|
|
137
|
+
player: {
|
|
138
|
+
clientId: player.clientID,
|
|
139
|
+
accountId: player.accountID || player.clientID.toString(),
|
|
140
|
+
name: player.name,
|
|
141
|
+
},
|
|
142
|
+
playerRef: player,
|
|
143
|
+
ownerResourceName: remoteEntry === null || remoteEntry === void 0 ? void 0 : remoteEntry.resourceName,
|
|
144
|
+
command: commandInfo,
|
|
145
|
+
commandMeta: localMeta,
|
|
146
|
+
});
|
|
92
147
|
}
|
|
93
148
|
}
|
|
94
149
|
// ═══════════════════════════════════════════════════════════════
|
|
@@ -133,7 +188,7 @@ let CommandExportController = class CommandExportController {
|
|
|
133
188
|
async executeCommand(clientID, commandName, args) {
|
|
134
189
|
const player = this.playerDirectory.getByClient(clientID);
|
|
135
190
|
if (!player) {
|
|
136
|
-
throw new
|
|
191
|
+
throw new error_1.AppError('GAME:PLAYER_NOT_FOUND', `Player not found: ${clientID}`, 'core');
|
|
137
192
|
}
|
|
138
193
|
const commandKey = commandName.toLowerCase();
|
|
139
194
|
const remoteEntry = this.remoteCommands.get(commandKey);
|
|
@@ -199,7 +254,7 @@ let CommandExportController = class CommandExportController {
|
|
|
199
254
|
if (onExceed === 'KICK') {
|
|
200
255
|
DropPlayer(player.clientID.toString(), errorMessage);
|
|
201
256
|
}
|
|
202
|
-
throw new
|
|
257
|
+
throw new error_1.SecurityError(onExceed || 'LOG', errorMessage, { clientID: player.clientID });
|
|
203
258
|
}
|
|
204
259
|
}
|
|
205
260
|
// 3. Validate @RequiresState (player state)
|
|
@@ -208,14 +263,14 @@ let CommandExportController = class CommandExportController {
|
|
|
208
263
|
if (has) {
|
|
209
264
|
for (const state of has) {
|
|
210
265
|
if (!player.hasState(state)) {
|
|
211
|
-
throw new
|
|
266
|
+
throw new error_1.AppError('GAME:INVALID_STATE', errorMessage || `Command requires state: ${state}`, 'core');
|
|
212
267
|
}
|
|
213
268
|
}
|
|
214
269
|
}
|
|
215
270
|
if (missing) {
|
|
216
271
|
for (const state of missing) {
|
|
217
272
|
if (player.hasState(state)) {
|
|
218
|
-
throw new
|
|
273
|
+
throw new error_1.AppError('GAME:INVALID_STATE', errorMessage || `Command cannot be used in state: ${state}`, 'core');
|
|
219
274
|
}
|
|
220
275
|
}
|
|
221
276
|
}
|
|
@@ -249,12 +304,13 @@ __decorate([
|
|
|
249
304
|
__metadata("design:returntype", Array)
|
|
250
305
|
], CommandExportController.prototype, "getAllCommands", null);
|
|
251
306
|
exports.CommandExportController = CommandExportController = __decorate([
|
|
252
|
-
(0, tsyringe_1.injectable)(),
|
|
253
307
|
(0, decorators_1.Controller)(),
|
|
254
|
-
__param(4, (0, tsyringe_1.inject)(
|
|
308
|
+
__param(4, (0, tsyringe_1.inject)(command_error_observer_contract_1.CommandErrorObserverContract)),
|
|
309
|
+
__param(5, (0, tsyringe_1.inject)(IEngineEvents_1.IEngineEvents)),
|
|
255
310
|
__metadata("design:paramtypes", [command_execution_port_1.CommandExecutionPort,
|
|
256
311
|
player_directory_port_1.PlayerDirectoryPort,
|
|
257
312
|
principal_port_1.PrincipalPort,
|
|
258
313
|
rate_limiter_service_1.RateLimiterService,
|
|
314
|
+
command_error_observer_contract_1.CommandErrorObserverContract,
|
|
259
315
|
IEngineEvents_1.IEngineEvents])
|
|
260
316
|
], CommandExportController);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PlayerDirectoryPort } from '../services/ports/player-directory.port';
|
|
2
|
-
import {
|
|
2
|
+
import { InternalPlayerExports, SerializedPlayerData } from '../types/core-exports';
|
|
3
3
|
/**
|
|
4
4
|
* Exports player directory functionality for RESOURCE mode access.
|
|
5
5
|
*
|
|
@@ -10,7 +10,7 @@ import { CorePlayerExports, SerializedPlayerData } from '../types/core-exports';
|
|
|
10
10
|
* - Read/write session metadata
|
|
11
11
|
* - Manage player state flags
|
|
12
12
|
*/
|
|
13
|
-
export declare class PlayerExportController implements
|
|
13
|
+
export declare class PlayerExportController implements InternalPlayerExports {
|
|
14
14
|
private playerService;
|
|
15
15
|
constructor(playerService: PlayerDirectoryPort);
|
|
16
16
|
getPlayerId(clientID: number): string | undefined;
|
|
@@ -8,8 +8,12 @@ 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.PlayerExportController = void 0;
|
|
16
|
+
const tsyringe_1 = require("tsyringe");
|
|
13
17
|
const controller_1 = require("../decorators/controller");
|
|
14
18
|
const export_1 = require("../decorators/export");
|
|
15
19
|
const player_directory_port_1 = require("../services/ports/player-directory.port");
|
|
@@ -169,5 +173,6 @@ __decorate([
|
|
|
169
173
|
], PlayerExportController.prototype, "removePlayerState", null);
|
|
170
174
|
exports.PlayerExportController = PlayerExportController = __decorate([
|
|
171
175
|
(0, controller_1.Controller)(),
|
|
176
|
+
__param(0, (0, tsyringe_1.inject)(player_directory_port_1.PlayerDirectoryPort)),
|
|
172
177
|
__metadata("design:paramtypes", [player_directory_port_1.PlayerDirectoryPort])
|
|
173
178
|
], PlayerExportController);
|
|
@@ -14,7 +14,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.PrincipalExportController = void 0;
|
|
16
16
|
const tsyringe_1 = require("tsyringe");
|
|
17
|
-
const
|
|
17
|
+
const app_error_1 = require("../../../kernel/error/app.error");
|
|
18
18
|
const index_1 = require("../contracts/index");
|
|
19
19
|
const export_1 = require("../decorators/export");
|
|
20
20
|
const index_2 = require("../decorators/index");
|
|
@@ -188,29 +188,29 @@ let PrincipalExportController = class PrincipalExportController {
|
|
|
188
188
|
async enforce(source, requirements) {
|
|
189
189
|
const player = this.playerService.getByClient(source);
|
|
190
190
|
if (!player) {
|
|
191
|
-
throw new
|
|
191
|
+
throw new app_error_1.AppError('GAME:PLAYER_NOT_FOUND', `Player not found: ${source}`, 'core');
|
|
192
192
|
}
|
|
193
193
|
if (requirements.rank !== undefined) {
|
|
194
194
|
const principal = await this.principalProvider.getPrincipal(player);
|
|
195
195
|
if (!principal) {
|
|
196
|
-
throw new
|
|
196
|
+
throw new app_error_1.AppError('AUTH:UNAUTHORIZED', 'No principal found', 'core');
|
|
197
197
|
}
|
|
198
198
|
if (principal.rank === undefined) {
|
|
199
|
-
throw new
|
|
199
|
+
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');
|
|
200
200
|
}
|
|
201
201
|
if (principal.rank < requirements.rank) {
|
|
202
|
-
throw new
|
|
202
|
+
throw new app_error_1.AppError('AUTH:PERMISSION_DENIED', `Access Denied: Requires minimum rank level ${requirements.rank}`, 'core');
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
if (requirements.permission) {
|
|
206
206
|
const principal = await this.principalProvider.getPrincipal(player);
|
|
207
207
|
if (!principal) {
|
|
208
|
-
throw new
|
|
208
|
+
throw new app_error_1.AppError('AUTH:PERMISSION_DENIED', `Access Denied: Missing required permission '${requirements.permission}'`, 'core');
|
|
209
209
|
}
|
|
210
210
|
const hasPerm = principal.permissions.includes('*') ||
|
|
211
211
|
principal.permissions.includes(requirements.permission);
|
|
212
212
|
if (!hasPerm) {
|
|
213
|
-
throw new
|
|
213
|
+
throw new app_error_1.AppError('AUTH:PERMISSION_DENIED', `Access Denied: Missing required permission '${requirements.permission}'`, 'core');
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
}
|
|
@@ -290,6 +290,7 @@ __decorate([
|
|
|
290
290
|
], PrincipalExportController.prototype, "enforce", null);
|
|
291
291
|
exports.PrincipalExportController = PrincipalExportController = __decorate([
|
|
292
292
|
(0, index_2.Controller)(),
|
|
293
|
+
__param(0, (0, tsyringe_1.inject)(player_directory_port_1.PlayerDirectoryPort)),
|
|
293
294
|
__param(1, (0, tsyringe_1.inject)(index_1.PrincipalProviderContract)),
|
|
294
295
|
__metadata("design:paramtypes", [player_directory_port_1.PlayerDirectoryPort,
|
|
295
296
|
index_1.PrincipalProviderContract])
|
|
@@ -0,0 +1,37 @@
|
|
|
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.ReadyController = void 0;
|
|
13
|
+
const controller_1 = require("../decorators/controller");
|
|
14
|
+
const export_1 = require("../decorators/export");
|
|
15
|
+
let ReadyController = class ReadyController {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.isReady = false;
|
|
18
|
+
// Set ready after a small tick to ensure bootstrap finishes
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
this.isReady = true;
|
|
21
|
+
}, 0);
|
|
22
|
+
}
|
|
23
|
+
isCoreReady() {
|
|
24
|
+
return this.isReady;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.ReadyController = ReadyController;
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, export_1.Export)(),
|
|
30
|
+
__metadata("design:type", Function),
|
|
31
|
+
__metadata("design:paramtypes", []),
|
|
32
|
+
__metadata("design:returntype", Boolean)
|
|
33
|
+
], ReadyController.prototype, "isCoreReady", null);
|
|
34
|
+
exports.ReadyController = ReadyController = __decorate([
|
|
35
|
+
(0, controller_1.Controller)(),
|
|
36
|
+
__metadata("design:paramtypes", [])
|
|
37
|
+
], ReadyController);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IEngineEvents } from '../../../adapters/contracts/IEngineEvents';
|
|
2
2
|
import { IResourceInfo } from '../../../adapters/contracts/IResourceInfo';
|
|
3
|
+
import { CommandErrorObserverContract } from '../contracts/security/command-error-observer.contract';
|
|
3
4
|
import { CommandExecutionPort } from '../services/ports/command-execution.port';
|
|
4
5
|
import { PlayerDirectoryPort } from '../services/ports/player-directory.port';
|
|
5
6
|
/**
|
|
@@ -21,9 +22,17 @@ import { PlayerDirectoryPort } from '../services/ports/player-directory.port';
|
|
|
21
22
|
export declare class RemoteCommandExecutionController {
|
|
22
23
|
private commandService;
|
|
23
24
|
private playerDirectory;
|
|
25
|
+
private readonly commandErrorObserver;
|
|
24
26
|
private engineEvents;
|
|
25
27
|
private resourceInfo;
|
|
26
|
-
constructor(commandService: CommandExecutionPort, playerDirectory: PlayerDirectoryPort, engineEvents: IEngineEvents, resourceInfo: IResourceInfo);
|
|
28
|
+
constructor(commandService: CommandExecutionPort, playerDirectory: PlayerDirectoryPort, commandErrorObserver: CommandErrorObserverContract, engineEvents: IEngineEvents, resourceInfo: IResourceInfo);
|
|
29
|
+
/**
|
|
30
|
+
* Invokes the global {@link CommandErrorObserverContract} safely.
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* Observers are user-land code; failures must never break command execution.
|
|
34
|
+
*/
|
|
35
|
+
private safeObserve;
|
|
27
36
|
/**
|
|
28
37
|
* Registers the event handler for command execution from CORE.
|
|
29
38
|
*
|
|
@@ -16,9 +16,11 @@ exports.RemoteCommandExecutionController = void 0;
|
|
|
16
16
|
const tsyringe_1 = require("tsyringe");
|
|
17
17
|
const IEngineEvents_1 = require("../../../adapters/contracts/IEngineEvents");
|
|
18
18
|
const IResourceInfo_1 = require("../../../adapters/contracts/IResourceInfo");
|
|
19
|
-
const
|
|
20
|
-
const
|
|
19
|
+
const logger_1 = require("../../../kernel/logger");
|
|
20
|
+
const command_error_observer_contract_1 = require("../contracts/security/command-error-observer.contract");
|
|
21
21
|
const decorators_1 = require("../decorators");
|
|
22
|
+
const normalize_app_error_1 = require("../helpers/normalize-app-error");
|
|
23
|
+
const runtime_1 = require("../runtime");
|
|
22
24
|
const command_execution_port_1 = require("../services/ports/command-execution.port");
|
|
23
25
|
const player_directory_port_1 = require("../services/ports/player-directory.port");
|
|
24
26
|
/**
|
|
@@ -38,13 +40,28 @@ const player_directory_port_1 = require("../services/ports/player-directory.port
|
|
|
38
40
|
* Event registration happens in constructor via adapter layer.
|
|
39
41
|
*/
|
|
40
42
|
let RemoteCommandExecutionController = class RemoteCommandExecutionController {
|
|
41
|
-
constructor(commandService, playerDirectory, engineEvents, resourceInfo) {
|
|
43
|
+
constructor(commandService, playerDirectory, commandErrorObserver, engineEvents, resourceInfo) {
|
|
42
44
|
this.commandService = commandService;
|
|
43
45
|
this.playerDirectory = playerDirectory;
|
|
46
|
+
this.commandErrorObserver = commandErrorObserver;
|
|
44
47
|
this.engineEvents = engineEvents;
|
|
45
48
|
this.resourceInfo = resourceInfo;
|
|
46
49
|
this.registerEventHandler();
|
|
47
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Invokes the global {@link CommandErrorObserverContract} safely.
|
|
53
|
+
*
|
|
54
|
+
* @remarks
|
|
55
|
+
* Observers are user-land code; failures must never break command execution.
|
|
56
|
+
*/
|
|
57
|
+
async safeObserve(ctx) {
|
|
58
|
+
try {
|
|
59
|
+
await this.commandErrorObserver.onError(ctx);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
logger_1.loggers.command.fatal(`Command error observer failed`, ctx, e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
48
65
|
/**
|
|
49
66
|
* Registers the event handler for command execution from CORE.
|
|
50
67
|
*
|
|
@@ -80,25 +97,60 @@ let RemoteCommandExecutionController = class RemoteCommandExecutionController {
|
|
|
80
97
|
await this.commandService.execute(player, commandName, args);
|
|
81
98
|
}
|
|
82
99
|
catch (error) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
// Do not notify the player here. Report through the global observer.
|
|
101
|
+
const runtime = (0, runtime_1.getRuntimeContext)();
|
|
102
|
+
const appError = (0, normalize_app_error_1.normalizeToAppError)(error, 'server');
|
|
103
|
+
const meta = this.commandService.getCommandMeta(commandName);
|
|
104
|
+
const stage = appError.code === 'GAME:BAD_REQUEST' || appError.code.startsWith('SCHEMA:')
|
|
105
|
+
? 'validation'
|
|
106
|
+
: appError.code === 'COMMAND:NOT_FOUND'
|
|
107
|
+
? 'dispatch'
|
|
108
|
+
: 'handler';
|
|
109
|
+
await this.safeObserve({
|
|
110
|
+
mode: runtime.mode,
|
|
111
|
+
scope: runtime.mode === 'CORE'
|
|
112
|
+
? 'core'
|
|
113
|
+
: runtime.mode === 'RESOURCE'
|
|
114
|
+
? 'resource'
|
|
115
|
+
: 'standalone',
|
|
116
|
+
stage,
|
|
117
|
+
error: appError,
|
|
118
|
+
commandName,
|
|
119
|
+
args,
|
|
120
|
+
player: {
|
|
121
|
+
clientId: player.clientID,
|
|
122
|
+
accountId: player.accountID,
|
|
123
|
+
name: player.name,
|
|
124
|
+
},
|
|
125
|
+
playerRef: player,
|
|
126
|
+
command: meta
|
|
127
|
+
? {
|
|
128
|
+
command: meta.command,
|
|
129
|
+
description: meta.description,
|
|
130
|
+
usage: meta.usage,
|
|
131
|
+
isPublic: meta.isPublic,
|
|
132
|
+
methodName: meta.methodName,
|
|
133
|
+
expectsPlayer: meta.expectsPlayer,
|
|
134
|
+
paramNames: meta.paramNames,
|
|
135
|
+
}
|
|
136
|
+
: undefined,
|
|
137
|
+
commandMeta: meta,
|
|
138
|
+
ownerResourceName: this.resourceInfo.getCurrentResourceName(),
|
|
90
139
|
});
|
|
91
140
|
}
|
|
92
141
|
}
|
|
93
142
|
};
|
|
94
143
|
exports.RemoteCommandExecutionController = RemoteCommandExecutionController;
|
|
95
144
|
exports.RemoteCommandExecutionController = RemoteCommandExecutionController = __decorate([
|
|
96
|
-
(0, tsyringe_1.injectable)(),
|
|
97
145
|
(0, decorators_1.Controller)(),
|
|
98
|
-
__param(
|
|
99
|
-
__param(
|
|
146
|
+
__param(0, (0, tsyringe_1.inject)(command_execution_port_1.CommandExecutionPort)),
|
|
147
|
+
__param(1, (0, tsyringe_1.inject)(player_directory_port_1.PlayerDirectoryPort)),
|
|
148
|
+
__param(2, (0, tsyringe_1.inject)(command_error_observer_contract_1.CommandErrorObserverContract)),
|
|
149
|
+
__param(3, (0, tsyringe_1.inject)(IEngineEvents_1.IEngineEvents)),
|
|
150
|
+
__param(4, (0, tsyringe_1.inject)(IResourceInfo_1.IResourceInfo)),
|
|
100
151
|
__metadata("design:paramtypes", [command_execution_port_1.CommandExecutionPort,
|
|
101
152
|
player_directory_port_1.PlayerDirectoryPort,
|
|
153
|
+
command_error_observer_contract_1.CommandErrorObserverContract,
|
|
102
154
|
IEngineEvents_1.IEngineEvents,
|
|
103
155
|
IResourceInfo_1.IResourceInfo])
|
|
104
156
|
], RemoteCommandExecutionController);
|
|
@@ -6,6 +6,6 @@ export declare class SessionController {
|
|
|
6
6
|
private readonly playerDirectory;
|
|
7
7
|
private readonly persistance;
|
|
8
8
|
constructor(playerSessionLifecycle: PlayerSessionLifecyclePort, playerDirectory: PlayerDirectoryPort, persistance: PlayerPersistenceService);
|
|
9
|
-
onPlayerJoining(): Promise<void>;
|
|
10
|
-
onPlayerDropped(): Promise<void>;
|
|
9
|
+
onPlayerJoining(clientId: number, identifiers?: Record<string, string>): Promise<void>;
|
|
10
|
+
onPlayerDropped(clientId: number): Promise<void>;
|
|
11
11
|
}
|
|
@@ -8,12 +8,16 @@ 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.SessionController = void 0;
|
|
13
|
-
const
|
|
16
|
+
const tsyringe_1 = require("tsyringe");
|
|
17
|
+
const logger_1 = require("../../../kernel/logger");
|
|
14
18
|
const internal_event_bus_1 = require("../bus/internal-event.bus");
|
|
15
19
|
const decorators_1 = require("../decorators");
|
|
16
|
-
const
|
|
20
|
+
const onRuntimeEvent_1 = require("../decorators/onRuntimeEvent");
|
|
17
21
|
const services_1 = require("../services");
|
|
18
22
|
const persistence_service_1 = require("../services/persistence.service");
|
|
19
23
|
const player_session_lifecycle_port_1 = require("../services/ports/player-session-lifecycle.port");
|
|
@@ -23,50 +27,54 @@ let SessionController = class SessionController {
|
|
|
23
27
|
this.playerDirectory = playerDirectory;
|
|
24
28
|
this.persistance = persistance;
|
|
25
29
|
}
|
|
26
|
-
async onPlayerJoining() {
|
|
30
|
+
async onPlayerJoining(clientId, identifiers) {
|
|
27
31
|
var _a;
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
const player = this.playerSessionLifecycle.bind(clientId, { license });
|
|
31
|
-
shared_1.loggers.session.info(`Player session created`, {
|
|
32
|
+
const player = this.playerSessionLifecycle.bind(clientId, Object.assign({ license: identifiers === null || identifiers === void 0 ? void 0 : identifiers.license }, identifiers));
|
|
33
|
+
logger_1.loggers.session.info(`Player session created`, {
|
|
32
34
|
clientId,
|
|
33
|
-
license: license !== null &&
|
|
35
|
+
license: (_a = identifiers === null || identifiers === void 0 ? void 0 : identifiers.license) !== null && _a !== void 0 ? _a : 'none',
|
|
34
36
|
});
|
|
35
37
|
await this.persistance.handleSessionLoad(player);
|
|
36
|
-
(0, internal_event_bus_1.emitFrameworkEvent)('internal:playerSessionCreated', {
|
|
38
|
+
(0, internal_event_bus_1.emitFrameworkEvent)('internal:playerSessionCreated', {
|
|
39
|
+
clientId,
|
|
40
|
+
license: identifiers === null || identifiers === void 0 ? void 0 : identifiers.license,
|
|
41
|
+
});
|
|
37
42
|
setImmediate(() => {
|
|
38
43
|
const currentPlayer = this.playerDirectory.getByClient(clientId);
|
|
39
44
|
if (!currentPlayer)
|
|
40
45
|
return;
|
|
41
|
-
|
|
46
|
+
const payload = { player: currentPlayer };
|
|
47
|
+
(0, internal_event_bus_1.emitFrameworkEvent)('internal:playerFullyConnected', payload);
|
|
42
48
|
});
|
|
43
49
|
}
|
|
44
|
-
async onPlayerDropped() {
|
|
45
|
-
const clientId = Number(source);
|
|
50
|
+
async onPlayerDropped(clientId) {
|
|
46
51
|
const player = this.playerDirectory.getByClient(clientId);
|
|
47
52
|
if (player) {
|
|
48
53
|
await this.persistance.handleSessionSave(player);
|
|
49
54
|
}
|
|
50
55
|
this.playerSessionLifecycle.unbind(clientId);
|
|
51
56
|
(0, internal_event_bus_1.emitFrameworkEvent)('internal:playerSessionDestroyed', { clientId });
|
|
52
|
-
|
|
57
|
+
logger_1.loggers.session.info(`Player session destroyed`, { clientId });
|
|
53
58
|
}
|
|
54
59
|
};
|
|
55
60
|
exports.SessionController = SessionController;
|
|
56
61
|
__decorate([
|
|
57
|
-
(0,
|
|
62
|
+
(0, onRuntimeEvent_1.OnRuntimeEvent)('playerJoining'),
|
|
58
63
|
__metadata("design:type", Function),
|
|
59
|
-
__metadata("design:paramtypes", []),
|
|
64
|
+
__metadata("design:paramtypes", [Number, Object]),
|
|
60
65
|
__metadata("design:returntype", Promise)
|
|
61
66
|
], SessionController.prototype, "onPlayerJoining", null);
|
|
62
67
|
__decorate([
|
|
63
|
-
(0,
|
|
68
|
+
(0, onRuntimeEvent_1.OnRuntimeEvent)('playerDropped'),
|
|
64
69
|
__metadata("design:type", Function),
|
|
65
|
-
__metadata("design:paramtypes", []),
|
|
70
|
+
__metadata("design:paramtypes", [Number]),
|
|
66
71
|
__metadata("design:returntype", Promise)
|
|
67
72
|
], SessionController.prototype, "onPlayerDropped", null);
|
|
68
73
|
exports.SessionController = SessionController = __decorate([
|
|
69
74
|
(0, decorators_1.Controller)(),
|
|
75
|
+
__param(0, (0, tsyringe_1.inject)(player_session_lifecycle_port_1.PlayerSessionLifecyclePort)),
|
|
76
|
+
__param(1, (0, tsyringe_1.inject)(services_1.PlayerDirectoryPort)),
|
|
77
|
+
__param(2, (0, tsyringe_1.inject)(persistence_service_1.PlayerPersistenceService)),
|
|
70
78
|
__metadata("design:paramtypes", [player_session_lifecycle_port_1.PlayerSessionLifecyclePort,
|
|
71
79
|
services_1.PlayerDirectoryPort,
|
|
72
80
|
persistence_service_1.PlayerPersistenceService])
|