@open-core/framework 0.2.9 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +84 -108
- 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 +94 -28
- 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 +4 -0
- package/dist/runtime/server/controllers/ready.controller.js +32 -0
- package/dist/runtime/server/controllers/remote-command-execution.controller.d.ts +10 -1
- package/dist/runtime/server/controllers/remote-command-execution.controller.js +79 -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/command-validation.helper.d.ts +0 -3
- package/dist/runtime/server/helpers/command-validation.helper.js +3 -7
- 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/process-tuple-schema.d.ts +20 -0
- package/dist/runtime/server/helpers/process-tuple-schema.js +51 -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 +30 -11
- 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 +11 -10
- 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 +5 -3
- 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
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseEntity, EntityId } from './entity';
|
|
2
|
+
export declare class WorldContext {
|
|
3
|
+
private entities;
|
|
4
|
+
private readonly kindIndex;
|
|
5
|
+
add(entity: BaseEntity): void;
|
|
6
|
+
remove(id: EntityId): void;
|
|
7
|
+
get<T extends BaseEntity = BaseEntity>(id: EntityId): T | undefined;
|
|
8
|
+
find<T extends BaseEntity>(predicate: (e: BaseEntity) => e is T): T[];
|
|
9
|
+
find(predicate: (e: BaseEntity) => boolean): BaseEntity[];
|
|
10
|
+
all(): BaseEntity[];
|
|
11
|
+
size(): number;
|
|
12
|
+
sizeBy(kind: string): number;
|
|
13
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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.WorldContext = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
function getKind(id) {
|
|
12
|
+
const i = id.indexOf(':');
|
|
13
|
+
return i === -1 ? id : id.slice(0, i);
|
|
14
|
+
}
|
|
15
|
+
let WorldContext = class WorldContext {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.entities = new Map();
|
|
18
|
+
this.kindIndex = new Map();
|
|
19
|
+
}
|
|
20
|
+
add(entity) {
|
|
21
|
+
var _a;
|
|
22
|
+
// If replacing, remove first to keep index consistent
|
|
23
|
+
const prev = this.entities.get(entity.id);
|
|
24
|
+
if (prev)
|
|
25
|
+
this.remove(entity.id);
|
|
26
|
+
this.entities.set(entity.id, entity);
|
|
27
|
+
const kind = getKind(entity.id);
|
|
28
|
+
this.kindIndex.set(kind, ((_a = this.kindIndex.get(kind)) !== null && _a !== void 0 ? _a : 0) + 1);
|
|
29
|
+
}
|
|
30
|
+
remove(id) {
|
|
31
|
+
const entity = this.entities.get(id);
|
|
32
|
+
if (!entity)
|
|
33
|
+
return;
|
|
34
|
+
const kind = getKind(id);
|
|
35
|
+
const n = this.kindIndex.get(kind);
|
|
36
|
+
if (n !== undefined) {
|
|
37
|
+
if (n <= 1)
|
|
38
|
+
this.kindIndex.delete(kind);
|
|
39
|
+
else
|
|
40
|
+
this.kindIndex.set(kind, n - 1);
|
|
41
|
+
}
|
|
42
|
+
this.entities.delete(id);
|
|
43
|
+
}
|
|
44
|
+
get(id) {
|
|
45
|
+
return this.entities.get(id);
|
|
46
|
+
}
|
|
47
|
+
find(predicate) {
|
|
48
|
+
return [...this.entities.values()].filter(predicate);
|
|
49
|
+
}
|
|
50
|
+
all() {
|
|
51
|
+
return [...this.entities.values()];
|
|
52
|
+
}
|
|
53
|
+
size() {
|
|
54
|
+
return this.entities.size;
|
|
55
|
+
}
|
|
56
|
+
sizeBy(kind) {
|
|
57
|
+
var _a;
|
|
58
|
+
return (_a = this.kindIndex.get(kind)) !== null && _a !== void 0 ? _a : 0;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
exports.WorldContext = WorldContext;
|
|
62
|
+
exports.WorldContext = WorldContext = __decorate([
|
|
63
|
+
(0, tsyringe_1.injectable)()
|
|
64
|
+
], WorldContext);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { onFrameworkEvent } from './bus/internal-event.bus';
|
|
2
|
+
export * from './configs';
|
|
3
|
+
export * from './contracts/index';
|
|
4
|
+
export { init } from './core';
|
|
5
|
+
export * from './decorators';
|
|
6
|
+
export * from './devmode';
|
|
7
|
+
export * from './entities';
|
|
8
|
+
export * from './runtime';
|
|
9
|
+
export * from './services';
|
|
10
|
+
export * from './setup';
|
|
11
|
+
export * from './templates';
|
|
12
|
+
export type * from './types/internal-events';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Framework modules
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.init = exports.onFrameworkEvent = void 0;
|
|
19
|
+
var internal_event_bus_1 = require("./bus/internal-event.bus");
|
|
20
|
+
Object.defineProperty(exports, "onFrameworkEvent", { enumerable: true, get: function () { return internal_event_bus_1.onFrameworkEvent; } });
|
|
21
|
+
// Configs
|
|
22
|
+
__exportStar(require("./configs"), exports);
|
|
23
|
+
__exportStar(require("./contracts/index"), exports);
|
|
24
|
+
var core_1 = require("./core");
|
|
25
|
+
Object.defineProperty(exports, "init", { enumerable: true, get: function () { return core_1.init; } });
|
|
26
|
+
__exportStar(require("./decorators"), exports);
|
|
27
|
+
// DevMode (development tools)
|
|
28
|
+
__exportStar(require("./devmode"), exports);
|
|
29
|
+
// Entities
|
|
30
|
+
__exportStar(require("./entities"), exports);
|
|
31
|
+
__exportStar(require("./runtime"), exports);
|
|
32
|
+
__exportStar(require("./services"), exports);
|
|
33
|
+
__exportStar(require("./setup"), exports);
|
|
34
|
+
__exportStar(require("./templates"), exports);
|
|
@@ -37,8 +37,7 @@ exports.initServer = initServer;
|
|
|
37
37
|
const adapters_1 = require("../../adapters");
|
|
38
38
|
const register_capabilities_1 = require("../../adapters/register-capabilities");
|
|
39
39
|
const index_1 = require("../../kernel/di/index");
|
|
40
|
-
const logger_1 = require("../../kernel/
|
|
41
|
-
const bootstrap_validation_1 = require("./bootstrap.validation");
|
|
40
|
+
const logger_1 = require("../../kernel/logger");
|
|
42
41
|
const index_2 = require("./contracts/index");
|
|
43
42
|
const controller_1 = require("./decorators/controller");
|
|
44
43
|
const runtime_1 = require("./runtime");
|
|
@@ -49,22 +48,14 @@ const CORE_WAIT_TIMEOUT = 10000;
|
|
|
49
48
|
function checkProviders(ctx) {
|
|
50
49
|
if (ctx.mode === 'RESOURCE')
|
|
51
50
|
return;
|
|
52
|
-
if (ctx.features.principal.enabled
|
|
53
|
-
if (!index_1.
|
|
51
|
+
if (ctx.features.principal.enabled) {
|
|
52
|
+
if (!index_1.GLOBAL_CONTAINER.isRegistered(index_2.PrincipalProviderContract)) {
|
|
54
53
|
const errorMsg = 'No Principal Provider configured. ' +
|
|
55
54
|
"Please call 'Server.setPrincipalProvider(YourProvider)' before init(). This is required for authorization.";
|
|
56
55
|
logger_1.loggers.bootstrap.fatal(errorMsg);
|
|
57
56
|
throw new Error(`[OpenCore] CRITICAL: ${errorMsg}`);
|
|
58
57
|
}
|
|
59
58
|
}
|
|
60
|
-
if (ctx.features.auth.enabled && ctx.features.auth.required) {
|
|
61
|
-
if (!index_1.di.isRegistered(index_2.AuthProviderContract)) {
|
|
62
|
-
const errorMsg = 'No Authentication Provider configured. ' +
|
|
63
|
-
"Please call 'Server.setAuthProvider(YourProvider)' before init(). This is required for authentication.";
|
|
64
|
-
logger_1.loggers.bootstrap.fatal(errorMsg);
|
|
65
|
-
throw new Error(`[OpenCore] CRITICAL: ${errorMsg}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
59
|
}
|
|
69
60
|
async function loadFrameworkControllers(ctx) {
|
|
70
61
|
if (ctx.features.commands.enabled) {
|
|
@@ -89,6 +80,9 @@ async function loadFrameworkControllers(ctx) {
|
|
|
89
80
|
if (ctx.features.players.enabled && ctx.features.players.export && ctx.features.exports.enabled) {
|
|
90
81
|
await Promise.resolve().then(() => __importStar(require('./controllers/player-export.controller')));
|
|
91
82
|
}
|
|
83
|
+
if (ctx.mode === 'CORE') {
|
|
84
|
+
await Promise.resolve().then(() => __importStar(require('./controllers/ready.controller')));
|
|
85
|
+
}
|
|
92
86
|
if (ctx.features.principal.enabled &&
|
|
93
87
|
ctx.features.principal.export &&
|
|
94
88
|
ctx.features.exports.enabled) {
|
|
@@ -120,8 +114,9 @@ async function initServer(options) {
|
|
|
120
114
|
mode: ctx.mode,
|
|
121
115
|
scope: (0, runtime_1.getFrameworkModeScope)(ctx.mode),
|
|
122
116
|
});
|
|
123
|
-
//
|
|
117
|
+
// Register platform-specific capabilities (adapters)
|
|
124
118
|
await (0, register_capabilities_1.registerServerCapabilities)();
|
|
119
|
+
logger_1.loggers.bootstrap.debug('Platform capabilities registered');
|
|
125
120
|
const dependenciesToWaitFor = [];
|
|
126
121
|
if (ctx.mode === 'RESOURCE') {
|
|
127
122
|
logger_1.loggers.bootstrap.info(`[WAIT] Standing by for Core '${ctx.coreResourceName}' to be ready...`);
|
|
@@ -140,89 +135,20 @@ async function initServer(options) {
|
|
|
140
135
|
logger_1.loggers.bootstrap.info(`Core ready detected!`);
|
|
141
136
|
}
|
|
142
137
|
logger_1.loggers.bootstrap.debug('Dependencies resolved. Proceeding with system boot.');
|
|
138
|
+
// 1. Register Core Services (WorldContext, PlayerService, etc.)
|
|
143
139
|
(0, services_register_1.registerServicesServer)(ctx);
|
|
144
140
|
logger_1.loggers.bootstrap.debug('Core services registered');
|
|
141
|
+
// 2. Load Controllers (Framework & User controllers)
|
|
142
|
+
// This is where user services get registered if they are decorated with @injectable()
|
|
143
|
+
// and imported before init() or discovered here.
|
|
144
|
+
await loadFrameworkControllers(ctx);
|
|
145
|
+
logger_1.loggers.bootstrap.debug('Controllers loaded');
|
|
146
|
+
// 3. Register System Processors (Command, NetEvent, etc.)
|
|
147
|
+
// These processors check if contracts are already registered before applying defaults.
|
|
145
148
|
(0, processors_register_1.registerSystemServer)(ctx);
|
|
146
149
|
logger_1.loggers.bootstrap.debug('System processors registered');
|
|
147
150
|
checkProviders(ctx);
|
|
148
|
-
|
|
149
|
-
if (ctx.mode === 'RESOURCE') {
|
|
150
|
-
const needsCoreExports = ctx.features.players.provider === 'core' ||
|
|
151
|
-
ctx.features.commands.provider === 'core' ||
|
|
152
|
-
ctx.features.principal.provider === 'core' ||
|
|
153
|
-
ctx.features.auth.provider === 'core';
|
|
154
|
-
if (needsCoreExports) {
|
|
155
|
-
const { coreResourceName } = ctx;
|
|
156
|
-
logger_1.loggers.bootstrap.debug(`Verifying CORE exports availability`, {
|
|
157
|
-
coreResourceName,
|
|
158
|
-
globalExportsKeys: Object.keys(globalThis.exports || {}),
|
|
159
|
-
});
|
|
160
|
-
// Build list of required exports
|
|
161
|
-
const requiredExports = [];
|
|
162
|
-
if (ctx.features.commands.provider === 'core') {
|
|
163
|
-
requiredExports.push('registerCommand', 'executeCommand', 'getAllCommands');
|
|
164
|
-
}
|
|
165
|
-
if (ctx.features.players.provider === 'core') {
|
|
166
|
-
requiredExports.push('getPlayerId', 'getPlayerData', 'getAllPlayersData', 'getPlayerByAccountId', 'getPlayerCount', 'isPlayerOnline', 'getPlayerMeta', 'setPlayerMeta', 'getPlayerStates', 'hasPlayerState', 'addPlayerState', 'removePlayerState');
|
|
167
|
-
}
|
|
168
|
-
if (ctx.features.principal.provider === 'core') {
|
|
169
|
-
requiredExports.push('getPrincipal', 'getPrincipalByAccountId', 'refreshPrincipal', 'hasPermission', 'hasRank', 'hasAnyPermission', 'hasAllPermissions', 'getPermissions', 'getRank', 'getPrincipalName', 'getPrincipalMeta');
|
|
170
|
-
}
|
|
171
|
-
logger_1.loggers.bootstrap.debug(`Checking CORE exports`, {
|
|
172
|
-
coreResourceName,
|
|
173
|
-
requiredExports,
|
|
174
|
-
});
|
|
175
|
-
// Access exports directly using FiveM's global exports object
|
|
176
|
-
const globalExports = globalThis.exports;
|
|
177
|
-
if (!globalExports) {
|
|
178
|
-
throw new Error(`[OpenCore] FiveM 'exports' global not found. This should never happen in a FiveM environment.`);
|
|
179
|
-
}
|
|
180
|
-
const coreExports = globalExports[coreResourceName];
|
|
181
|
-
// Check each required export directly (can't use Object.keys on FiveM exports proxy)
|
|
182
|
-
const missingExports = [];
|
|
183
|
-
for (const exportName of requiredExports) {
|
|
184
|
-
try {
|
|
185
|
-
const exportValue = coreExports === null || coreExports === void 0 ? void 0 : coreExports[exportName];
|
|
186
|
-
if (typeof exportValue !== 'function') {
|
|
187
|
-
missingExports.push(exportName);
|
|
188
|
-
logger_1.loggers.bootstrap.warn(`Export '${exportName}' is not a function`, {
|
|
189
|
-
exportName,
|
|
190
|
-
type: typeof exportValue,
|
|
191
|
-
value: exportValue,
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
missingExports.push(exportName);
|
|
197
|
-
logger_1.loggers.bootstrap.warn(`Failed to access export '${exportName}'`, {
|
|
198
|
-
exportName,
|
|
199
|
-
error: error instanceof Error ? error.message : String(error),
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
if (missingExports.length > 0) {
|
|
204
|
-
const errorMsg = `CORE resource '${coreResourceName}' is missing ${missingExports.length} required exports: ${missingExports.join(', ')}\n` +
|
|
205
|
-
`\n` +
|
|
206
|
-
`This usually means:\n` +
|
|
207
|
-
` 1. The CORE resource failed to initialize properly\n` +
|
|
208
|
-
` 2. The CORE resource doesn't have the 'exports' feature enabled\n` +
|
|
209
|
-
` 3. The CORE resource doesn't have the required features enabled (commands: ${ctx.features.commands.provider === 'core'})\n` +
|
|
210
|
-
`\n` +
|
|
211
|
-
`Verify in '${coreResourceName}/src/server/server.ts':\n` +
|
|
212
|
-
` - mode: 'CORE'\n` +
|
|
213
|
-
` - features.exports.enabled: true\n` +
|
|
214
|
-
` - features.commands.enabled: true (if using commands)`;
|
|
215
|
-
logger_1.loggers.bootstrap.fatal(errorMsg);
|
|
216
|
-
throw new Error(`[OpenCore] ${errorMsg}`);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
await loadFrameworkControllers(ctx);
|
|
221
|
-
if (ctx.features.database.enabled) {
|
|
222
|
-
(0, bootstrap_validation_1.registerDefaultBootstrapValidators)();
|
|
223
|
-
await (0, bootstrap_validation_1.runBootstrapValidatorsOrThrow)();
|
|
224
|
-
}
|
|
225
|
-
const scanner = index_1.di.resolve(index_1.MetadataScanner);
|
|
151
|
+
const scanner = index_1.GLOBAL_CONTAINER.resolve(index_1.MetadataScanner);
|
|
226
152
|
scanner.scan((0, controller_1.getServerControllerRegistry)());
|
|
227
153
|
// Initialize DevMode if enabled
|
|
228
154
|
if ((_d = ctx.devMode) === null || _d === void 0 ? void 0 : _d.enabled) {
|
|
@@ -233,31 +159,82 @@ async function initServer(options) {
|
|
|
233
159
|
runSessionRecovery();
|
|
234
160
|
}
|
|
235
161
|
logger_1.loggers.bootstrap.info('OpenCore Server initialized successfully');
|
|
236
|
-
if (ctx.mode === 'CORE' &&
|
|
237
|
-
|
|
238
|
-
|
|
162
|
+
if (ctx.mode === 'CORE' &&
|
|
163
|
+
index_1.GLOBAL_CONTAINER.isRegistered(adapters_1.IEngineEvents) &&
|
|
164
|
+
index_1.GLOBAL_CONTAINER.isRegistered(adapters_1.INetTransport)) {
|
|
165
|
+
const engineEvents = index_1.GLOBAL_CONTAINER.resolve(adapters_1.IEngineEvents);
|
|
166
|
+
const net = index_1.GLOBAL_CONTAINER.resolve(adapters_1.INetTransport);
|
|
167
|
+
// 1. Broadast to resources already running
|
|
168
|
+
engineEvents.emit('core:ready');
|
|
169
|
+
net.emitNet('core:ready', 'all');
|
|
170
|
+
// 2. Listen for 'core:request-ready' for resources starting late (hot-reload)
|
|
171
|
+
engineEvents.on('core:request-ready', () => {
|
|
172
|
+
engineEvents.emit('core:ready');
|
|
173
|
+
});
|
|
174
|
+
logger_1.loggers.bootstrap.info(`'core:ready' logic initialized and broadcasted`);
|
|
239
175
|
}
|
|
176
|
+
const logLevelLabel = logger_1.LogLevelLabels[(0, logger_1.getLogLevel)()];
|
|
177
|
+
logger_1.loggers.bootstrap.info(`LogLevel Setted: ${logLevelLabel}`);
|
|
240
178
|
}
|
|
241
179
|
function createCoreDependency(coreName) {
|
|
180
|
+
logger_1.loggers.bootstrap.debug(`Setting up detection mechanisms for Core '${coreName}'...`);
|
|
242
181
|
return new Promise((resolve, reject) => {
|
|
243
182
|
let resolved = false;
|
|
244
|
-
|
|
183
|
+
let pollingInterval;
|
|
184
|
+
let timeout;
|
|
185
|
+
const engineEvents = index_1.GLOBAL_CONTAINER.resolve(adapters_1.IEngineEvents);
|
|
245
186
|
const cleanup = () => {
|
|
246
187
|
resolved = true;
|
|
247
|
-
|
|
188
|
+
if (timeout)
|
|
189
|
+
clearTimeout(timeout);
|
|
190
|
+
if (pollingInterval)
|
|
191
|
+
clearInterval(pollingInterval);
|
|
248
192
|
};
|
|
249
|
-
|
|
250
|
-
if (!resolved) {
|
|
251
|
-
reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' within ${CORE_WAIT_TIMEOUT}ms.`));
|
|
252
|
-
}
|
|
253
|
-
}, CORE_WAIT_TIMEOUT);
|
|
193
|
+
// 1. Register listener FIRST (before any requests)
|
|
254
194
|
const onReady = () => {
|
|
255
195
|
if (!resolved) {
|
|
196
|
+
logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected via 'core:ready' event!`);
|
|
256
197
|
cleanup();
|
|
257
198
|
resolve();
|
|
258
199
|
}
|
|
259
200
|
};
|
|
260
201
|
engineEvents.on('core:ready', onReady);
|
|
202
|
+
logger_1.loggers.bootstrap.debug(`Listening for 'core:ready' event from Core`);
|
|
203
|
+
// 2. Check if already ready via export (Polling)
|
|
204
|
+
const checkReady = () => {
|
|
205
|
+
var _a, _b;
|
|
206
|
+
if (resolved)
|
|
207
|
+
return;
|
|
208
|
+
try {
|
|
209
|
+
const globalExports = globalThis.exports;
|
|
210
|
+
const isReady = (_b = (_a = globalExports === null || globalExports === void 0 ? void 0 : globalExports[coreName]) === null || _a === void 0 ? void 0 : _a.isCoreReady) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
211
|
+
logger_1.loggers.bootstrap.debug(`Polling isCoreReady export: ${isReady}`);
|
|
212
|
+
if (isReady === true) {
|
|
213
|
+
logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected via isCoreReady export!`);
|
|
214
|
+
cleanup();
|
|
215
|
+
resolve();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch (e) {
|
|
219
|
+
logger_1.loggers.bootstrap.debug(`Export check failed: ${e}`);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
pollingInterval = setInterval(checkReady, 500);
|
|
223
|
+
checkReady(); // Initial check
|
|
224
|
+
// 3. Request status (for hot-reload cases where Core is already up)
|
|
225
|
+
// This is sent AFTER registering the listener so we can receive the response
|
|
226
|
+
if (!resolved) {
|
|
227
|
+
logger_1.loggers.bootstrap.debug(`Requesting Core status via 'core:request-ready' event`);
|
|
228
|
+
engineEvents.emit('core:request-ready');
|
|
229
|
+
}
|
|
230
|
+
// 4. Timeout protection
|
|
231
|
+
timeout = setTimeout(() => {
|
|
232
|
+
if (!resolved) {
|
|
233
|
+
logger_1.loggers.bootstrap.warn(`Timeout waiting for Core '${coreName}' after ${CORE_WAIT_TIMEOUT}ms`);
|
|
234
|
+
cleanup();
|
|
235
|
+
reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' or expose 'isCoreReady' within ${CORE_WAIT_TIMEOUT}ms.`));
|
|
236
|
+
}
|
|
237
|
+
}, CORE_WAIT_TIMEOUT);
|
|
261
238
|
});
|
|
262
239
|
}
|
|
263
240
|
async function dependencyResolver(waitFor, onReady) {
|
|
@@ -293,7 +270,7 @@ async function dependencyResolver(waitFor, onReady) {
|
|
|
293
270
|
*/
|
|
294
271
|
function runSessionRecovery() {
|
|
295
272
|
try {
|
|
296
|
-
const recoveryService = index_1.
|
|
273
|
+
const recoveryService = index_1.GLOBAL_CONTAINER.resolve(session_recovery_service_1.SessionRecoveryService);
|
|
297
274
|
const stats = recoveryService.recoverSessions();
|
|
298
275
|
if (stats.recovered > 0) {
|
|
299
276
|
logger_1.loggers.bootstrap.info(`[SessionRecovery] Recovered ${stats.recovered} player session(s)`);
|
|
@@ -315,15 +292,14 @@ async function initDevMode(config) {
|
|
|
315
292
|
const { StateInspectorService } = await Promise.resolve().then(() => __importStar(require('./devmode/state-inspector.service')));
|
|
316
293
|
const { PlayerSimulatorService } = await Promise.resolve().then(() => __importStar(require('./devmode/player-simulator.service')));
|
|
317
294
|
// Register DevMode services
|
|
318
|
-
index_1.
|
|
319
|
-
index_1.
|
|
320
|
-
index_1.
|
|
321
|
-
index_1.
|
|
295
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(EventInterceptorService, EventInterceptorService);
|
|
296
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(StateInspectorService, StateInspectorService);
|
|
297
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(PlayerSimulatorService, PlayerSimulatorService);
|
|
298
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(DevModeService, DevModeService);
|
|
322
299
|
// Enable DevMode
|
|
323
|
-
const devModeService = index_1.
|
|
300
|
+
const devModeService = index_1.GLOBAL_CONTAINER.resolve(DevModeService);
|
|
324
301
|
await devModeService.enable({
|
|
325
302
|
enabled: true,
|
|
326
|
-
hotReload: config.hotReload,
|
|
327
303
|
bridge: config.bridge,
|
|
328
304
|
interceptor: config.interceptor,
|
|
329
305
|
simulator: config.simulator,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.onFrameworkEvent = onFrameworkEvent;
|
|
4
4
|
exports.emitFrameworkEvent = emitFrameworkEvent;
|
|
5
|
-
const logger_1 = require("../../../kernel/
|
|
5
|
+
const logger_1 = require("../../../kernel/logger");
|
|
6
6
|
const handlers = {};
|
|
7
7
|
function onFrameworkEvent(event, handler) {
|
|
8
8
|
let list = handlers[event];
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export * from './auth-provider.contract';
|
|
2
1
|
export * from './player-persistence.contract';
|
|
3
|
-
export * from './
|
|
2
|
+
export * from './security/command-error-observer.contract';
|
|
4
3
|
export * from './security/net-event-security-observer.contract';
|
|
5
4
|
export * from './security/permission.types';
|
|
6
5
|
export * from './security/principal-provider.contract';
|
|
@@ -15,10 +15,9 @@ 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
|
-
|
|
18
|
+
// Persistence
|
|
19
19
|
__exportStar(require("./player-persistence.contract"), exports);
|
|
20
|
-
|
|
21
|
-
__exportStar(require("./repository/index"), exports);
|
|
20
|
+
__exportStar(require("./security/command-error-observer.contract"), exports);
|
|
22
21
|
__exportStar(require("./security/net-event-security-observer.contract"), exports);
|
|
23
22
|
__exportStar(require("./security/permission.types"), exports);
|
|
24
23
|
__exportStar(require("./security/principal-provider.contract"), exports);
|
|
@@ -36,24 +36,22 @@ export declare const DEFAULT_PERSISTENCE_CONFIG: PersistenceConfig;
|
|
|
36
36
|
* }
|
|
37
37
|
*
|
|
38
38
|
* async onSessionLoad(player: Player): Promise<void> {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
* await this.onSessionSave(player)
|
|
56
|
-
* }
|
|
39
|
+
// Example: fetch data from your own storage
|
|
40
|
+
// const data = await myStorage.find(player.license)
|
|
41
|
+
// if (data) {
|
|
42
|
+
// player.setMeta('money', data.money)
|
|
43
|
+
// }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async onSessionSave(player: Player): Promise<void> {
|
|
47
|
+
// Example: save data to your own storage
|
|
48
|
+
// await myStorage.save(player.license, { money: player.getMeta('money') })
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async onAutoSave(player: Player): Promise<void> {
|
|
52
|
+
// Can delegate to onSessionSave or implement lighter save logic
|
|
53
|
+
await this.onSessionSave(player)
|
|
54
|
+
}
|
|
57
55
|
* }
|
|
58
56
|
* ```
|
|
59
57
|
*/
|
|
@@ -26,24 +26,22 @@ exports.DEFAULT_PERSISTENCE_CONFIG = {
|
|
|
26
26
|
* }
|
|
27
27
|
*
|
|
28
28
|
* async onSessionLoad(player: Player): Promise<void> {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
* await this.onSessionSave(player)
|
|
46
|
-
* }
|
|
29
|
+
// Example: fetch data from your own storage
|
|
30
|
+
// const data = await myStorage.find(player.license)
|
|
31
|
+
// if (data) {
|
|
32
|
+
// player.setMeta('money', data.money)
|
|
33
|
+
// }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async onSessionSave(player: Player): Promise<void> {
|
|
37
|
+
// Example: save data to your own storage
|
|
38
|
+
// await myStorage.save(player.license, { money: player.getMeta('money') })
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async onAutoSave(player: Player): Promise<void> {
|
|
42
|
+
// Can delegate to onSessionSave or implement lighter save logic
|
|
43
|
+
await this.onSessionSave(player)
|
|
44
|
+
}
|
|
47
45
|
* }
|
|
48
46
|
* ```
|
|
49
47
|
*/
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AppError } from '../../../../kernel/error';
|
|
2
|
+
import type { CommandMetadata } from '../../decorators/command';
|
|
3
|
+
import type { Player } from '../../entities/player';
|
|
4
|
+
import type { FeatureScope, FrameworkMode } from '../../runtime';
|
|
5
|
+
/**
|
|
6
|
+
* High-level stage where a command error happened.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* Useful to drive decisions (e.g. show usage on validation errors).
|
|
10
|
+
*/
|
|
11
|
+
export type CommandErrorStage = 'dispatch' | 'auth' | 'security' | 'validation' | 'handler' | 'unknown';
|
|
12
|
+
/**
|
|
13
|
+
* Public-facing command info intended for error reporting.
|
|
14
|
+
*/
|
|
15
|
+
export interface CommandErrorCommandInfo {
|
|
16
|
+
command: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
usage?: string;
|
|
19
|
+
isPublic?: boolean;
|
|
20
|
+
methodName?: string;
|
|
21
|
+
expectsPlayer?: boolean;
|
|
22
|
+
paramNames?: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Minimal player identity for error reporting.
|
|
26
|
+
*/
|
|
27
|
+
export interface CommandErrorPlayerInfo {
|
|
28
|
+
clientId: number;
|
|
29
|
+
accountId?: string;
|
|
30
|
+
name?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Rich context emitted whenever command execution fails.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* The framework does not notify players directly. Consumers can implement
|
|
37
|
+
* {@link CommandErrorObserverContract} to decide how to report errors.
|
|
38
|
+
*/
|
|
39
|
+
export interface CommandErrorContext {
|
|
40
|
+
mode: FrameworkMode;
|
|
41
|
+
scope: FeatureScope;
|
|
42
|
+
stage: CommandErrorStage;
|
|
43
|
+
error: AppError;
|
|
44
|
+
commandName: string;
|
|
45
|
+
args: string[];
|
|
46
|
+
player: CommandErrorPlayerInfo;
|
|
47
|
+
/**
|
|
48
|
+
* Optional reference to the Player entity. Useful for custom
|
|
49
|
+
* (e.g. sending a chat message).
|
|
50
|
+
*/
|
|
51
|
+
playerRef?: Player;
|
|
52
|
+
/**
|
|
53
|
+
* Best-effort command info (usage/description/etc.) to support.
|
|
54
|
+
*/
|
|
55
|
+
command?: CommandErrorCommandInfo;
|
|
56
|
+
/**
|
|
57
|
+
* Raw metadata from the decorator, when available in the current runtime.
|
|
58
|
+
*/
|
|
59
|
+
commandMeta?: CommandMetadata;
|
|
60
|
+
/**
|
|
61
|
+
* If the command is owned by a resource (remote command), indicates the owner.
|
|
62
|
+
*/
|
|
63
|
+
ownerResourceName?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Global observer contract for command execution errors.
|
|
67
|
+
*/
|
|
68
|
+
export declare abstract class CommandErrorObserverContract {
|
|
69
|
+
/**
|
|
70
|
+
* Called whenever command execution fails.
|
|
71
|
+
*/
|
|
72
|
+
abstract onError(ctx: CommandErrorContext): Promise<void>;
|
|
73
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommandErrorObserverContract = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Global observer contract for command execution errors.
|
|
6
|
+
*/
|
|
7
|
+
class CommandErrorObserverContract {
|
|
8
|
+
}
|
|
9
|
+
exports.CommandErrorObserverContract = CommandErrorObserverContract;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Represents the security identity of a user/player within the framework.
|
|
3
|
-
* This interface bridges the gap between the Core framework and your specific
|
|
3
|
+
* This interface bridges the gap between the Core framework and your specific implementation.
|
|
4
4
|
*/
|
|
5
5
|
export interface Principal {
|
|
6
6
|
/**
|
|
7
|
-
* Unique identifier for the user (e.g.,
|
|
7
|
+
* Unique identifier for the user (e.g., persistent role ID).
|
|
8
8
|
*/
|
|
9
9
|
id: string;
|
|
10
10
|
/**
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Server } from '
|
|
1
|
+
import { Server } from '../..';
|
|
2
2
|
import { LinkedID } from '../../services/types/linked-id';
|
|
3
3
|
import { Principal } from './permission.types';
|
|
4
4
|
/**
|
|
5
5
|
* **Authorization**
|
|
6
6
|
*
|
|
7
7
|
* This abstract class defines how the Security Layer retrieves user permissions.
|
|
8
|
-
* The Framework does not know about your
|
|
8
|
+
* The Framework does not know about your persistence layer (SQL, Mongo, JSON or API); it relies on
|
|
9
9
|
* your implementation of this provider to resolve a `Principal`.
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```ts
|
|
13
13
|
* // In your game resource:
|
|
14
|
-
* class
|
|
14
|
+
* class MyPrincipal implements PrincipalProviderContract { ... }
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
17
|
export declare abstract class PrincipalProviderContract {
|