@open-core/framework 0.2.9 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/contracts/IPlatformCapabilities.d.ts +79 -0
- package/dist/adapters/contracts/IPlatformCapabilities.js +31 -0
- package/dist/adapters/contracts/IPlayerInfo.d.ts +1 -1
- package/dist/adapters/contracts/{IPedAppearanceClient.d.ts → client/IPedAppearanceClient.d.ts} +1 -1
- package/dist/adapters/contracts/server/IEntityServer.d.ts +188 -0
- package/dist/adapters/contracts/server/IEntityServer.js +39 -0
- package/dist/adapters/contracts/{IPlayerServer.d.ts → server/IPlayerServer.d.ts} +52 -9
- package/dist/adapters/contracts/server/IPlayerServer.js +39 -0
- package/dist/adapters/contracts/types/identifier.d.ts +67 -0
- package/dist/adapters/contracts/types/identifier.js +64 -0
- package/dist/adapters/contracts/types/index.d.ts +1 -0
- package/dist/{kernel/shared/appearance → adapters/contracts/types}/index.js +1 -1
- package/dist/adapters/fivem/fivem-capabilities.d.ts +18 -0
- package/dist/adapters/fivem/fivem-capabilities.js +67 -0
- package/dist/adapters/fivem/fivem-engine-events.js +17 -4
- package/dist/adapters/fivem/fivem-entity-server.d.ts +6 -2
- package/dist/adapters/fivem/fivem-entity-server.js +14 -1
- package/dist/adapters/fivem/fivem-ped-appearance-client.d.ts +1 -1
- package/dist/adapters/fivem/fivem-ped-appearance-client.js +1 -1
- package/dist/adapters/fivem/fivem-ped-appearance-server.d.ts +1 -1
- package/dist/adapters/fivem/fivem-ped-appearance-server.js +1 -1
- package/dist/adapters/fivem/fivem-platform.d.ts +5 -0
- package/dist/adapters/fivem/fivem-platform.js +100 -0
- package/dist/adapters/fivem/fivem-player-server.d.ts +7 -1
- package/dist/adapters/fivem/fivem-player-server.js +19 -1
- package/dist/adapters/fivem/fivem-playerinfo.d.ts +1 -1
- package/dist/adapters/fivem/fivem-vehicle-server.d.ts +1 -1
- package/dist/adapters/fivem/fivem-vehicle-server.js +1 -1
- package/dist/adapters/fivem/index.d.ts +13 -0
- package/dist/adapters/fivem/index.js +31 -0
- package/dist/adapters/index.d.ts +8 -7
- package/dist/adapters/index.js +13 -12
- package/dist/adapters/node/index.d.ts +5 -0
- package/dist/adapters/node/index.js +13 -1
- package/dist/adapters/node/node-capabilities.d.ts +19 -0
- package/dist/adapters/node/node-capabilities.js +54 -0
- package/dist/adapters/node/node-entity-server.d.ts +17 -6
- package/dist/adapters/node/node-entity-server.js +41 -15
- package/dist/adapters/node/node-net-transport.js +2 -2
- package/dist/adapters/node/node-ped-appearance-client.d.ts +1 -1
- package/dist/adapters/node/node-ped-appearance-client.js +1 -1
- package/dist/adapters/node/node-ped-appearance-server.d.ts +1 -1
- package/dist/adapters/node/node-ped-appearance-server.js +1 -1
- package/dist/adapters/node/node-platform.d.ts +5 -0
- package/dist/adapters/node/node-platform.js +103 -0
- package/dist/adapters/node/node-player-server.d.ts +19 -3
- package/dist/adapters/node/node-player-server.js +43 -9
- package/dist/adapters/node/node-playerinfo.d.ts +2 -2
- package/dist/adapters/node/node-playerinfo.js +14 -3
- package/dist/adapters/node/node-vehicle-server.d.ts +1 -1
- package/dist/adapters/node/node-vehicle-server.js +1 -1
- package/dist/adapters/platform/index.d.ts +1 -0
- package/dist/{runtime/server/database.js → adapters/platform/index.js} +1 -7
- package/dist/adapters/platform/platform-registry.d.ts +101 -0
- package/dist/adapters/platform/platform-registry.js +122 -0
- package/dist/adapters/register-capabilities.d.ts +52 -2
- package/dist/adapters/register-capabilities.js +69 -130
- package/dist/adapters/register-client-capabilities.js +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.js +5 -31
- package/dist/kernel/di/container.d.ts +4 -2
- package/dist/kernel/di/container.js +5 -3
- package/dist/kernel/di/metadata.scanner.d.ts +2 -1
- package/dist/kernel/di/metadata.scanner.js +3 -2
- package/dist/kernel/{utils/error → error}/app.error.d.ts +2 -2
- package/dist/kernel/error/common.error-codes.d.ts +1 -0
- package/dist/kernel/error/framework.error-codes.d.ts +12 -0
- package/dist/kernel/error/index.d.ts +4 -0
- package/dist/kernel/error/index.js +18 -0
- package/dist/kernel/{utils/error → error}/security.error.d.ts +1 -1
- package/dist/kernel/error/security.types.js +2 -0
- package/dist/kernel/index.d.ts +4 -5
- package/dist/kernel/index.js +6 -11
- package/dist/kernel/{shared/logger → logger}/core-logger.d.ts +0 -19
- package/dist/kernel/{shared/logger → logger}/core-logger.js +10 -24
- package/dist/kernel/{shared/logger → logger}/logger.env.d.ts +12 -5
- package/dist/kernel/{shared/logger → logger}/logger.env.js +29 -13
- package/dist/kernel/{shared/logger → logger}/logger.service.d.ts +14 -0
- package/dist/kernel/{shared/logger → logger}/logger.service.js +20 -2
- package/dist/kernel/logger/transports/transport.interface.js +2 -0
- package/dist/kernel/shared/index.d.ts +1 -2
- package/dist/kernel/shared/index.js +1 -2
- package/dist/kernel/utils/index.d.ts +0 -2
- package/dist/kernel/utils/index.js +0 -2
- package/dist/kernel/utils/result.d.ts +1 -1
- package/dist/runtime/client/api.d.ts +7 -0
- package/dist/runtime/client/api.js +23 -0
- package/dist/runtime/client/client-bootstrap.js +1 -1
- package/dist/runtime/client/controllers/spawner.controller.d.ts +1 -1
- package/dist/runtime/client/decorators/index.d.ts +2 -2
- package/dist/runtime/client/decorators/index.js +2 -2
- package/dist/runtime/client/decorators/key.d.ts +2 -2
- package/dist/runtime/client/decorators/key.js +3 -3
- package/dist/runtime/client/decorators/localEvent.d.ts +1 -1
- package/dist/runtime/client/decorators/localEvent.js +1 -1
- package/dist/runtime/client/decorators/{tick.d.ts → onTick.d.ts} +1 -1
- package/dist/runtime/client/decorators/{tick.js → onTick.js} +2 -2
- package/dist/runtime/client/decorators/{nui.d.ts → onView.d.ts} +4 -4
- package/dist/runtime/client/decorators/{nui.js → onView.js} +5 -5
- package/dist/runtime/client/index.d.ts +1 -7
- package/dist/runtime/client/index.js +26 -12
- package/dist/runtime/client/player/player.d.ts +1 -1
- package/dist/runtime/client/player/player.loader.js +3 -3
- package/dist/runtime/client/services/appearance.service.d.ts +1 -1
- package/dist/runtime/client/services/appearance.service.js +1 -1
- package/dist/runtime/client/services/blip.service.d.ts +1 -1
- package/dist/runtime/client/services/marker.service.d.ts +1 -1
- package/dist/runtime/client/services/ped.service.d.ts +1 -1
- package/dist/runtime/client/services/spawn.service.d.ts +2 -2
- package/dist/runtime/client/services/spawn.service.js +12 -12
- package/dist/runtime/client/services/textui.service.d.ts +1 -1
- package/dist/runtime/client/services/vehicle-client.service.d.ts +1 -1
- package/dist/runtime/client/services/vehicle.service.d.ts +1 -1
- package/dist/runtime/client/system/processors/export.processor.js +1 -1
- package/dist/runtime/client/system/processors/gameEvent.processor.js +1 -1
- package/dist/runtime/client/system/processors/interval.processor.js +1 -1
- package/dist/runtime/client/system/processors/localEvent.processor.js +1 -1
- package/dist/runtime/client/system/processors/netEvent.processor.js +1 -1
- package/dist/runtime/client/system/processors/nui.processor.js +1 -1
- package/dist/runtime/client/system/processors/resourceLifecycle.processor.js +1 -1
- package/dist/runtime/client/system/processors/tick.processor.js +1 -1
- package/dist/runtime/client/ui-bridge.js +1 -1
- package/dist/runtime/core/entity.d.ts +168 -0
- package/dist/runtime/core/entity.js +226 -0
- package/dist/runtime/core/index.d.ts +3 -0
- package/dist/runtime/core/index.js +19 -0
- package/dist/runtime/core/spatial.d.ts +5 -0
- package/dist/runtime/core/spatial.js +2 -0
- package/dist/runtime/core/world.d.ts +13 -0
- package/dist/runtime/core/world.js +64 -0
- package/dist/runtime/server/api.d.ts +12 -0
- package/dist/runtime/server/api.js +34 -0
- package/dist/runtime/server/bootstrap.js +58 -103
- package/dist/runtime/server/bus/internal-event.bus.js +1 -1
- package/dist/runtime/server/contracts/index.d.ts +1 -2
- package/dist/runtime/server/contracts/index.js +2 -3
- package/dist/runtime/server/contracts/player-persistence.contract.d.ts +16 -18
- package/dist/runtime/server/contracts/player-persistence.contract.js +16 -18
- package/dist/runtime/server/contracts/security/command-error-observer.contract.d.ts +73 -0
- package/dist/runtime/server/contracts/security/command-error-observer.contract.js +9 -0
- package/dist/runtime/server/contracts/security/permission.types.d.ts +2 -2
- package/dist/runtime/server/contracts/security/principal-provider.contract.d.ts +3 -3
- package/dist/runtime/server/contracts/security/principal-provider.contract.js +2 -2
- package/dist/runtime/server/contracts/security/security-handler.contract.d.ts +2 -2
- package/dist/runtime/server/controllers/chat.controller.d.ts +1 -1
- package/dist/runtime/server/controllers/chat.controller.js +5 -0
- package/dist/runtime/server/controllers/command-export.controller.d.ts +12 -3
- package/dist/runtime/server/controllers/command-export.controller.js +81 -25
- package/dist/runtime/server/controllers/player-export.controller.d.ts +2 -2
- package/dist/runtime/server/controllers/player-export.controller.js +5 -0
- package/dist/runtime/server/controllers/principal-export.controller.js +8 -7
- package/dist/runtime/server/controllers/ready.controller.d.ts +5 -0
- package/dist/runtime/server/controllers/ready.controller.js +37 -0
- package/dist/runtime/server/controllers/remote-command-execution.controller.d.ts +10 -1
- package/dist/runtime/server/controllers/remote-command-execution.controller.js +65 -13
- package/dist/runtime/server/controllers/session.controller.d.ts +2 -2
- package/dist/runtime/server/controllers/session.controller.js +25 -17
- package/dist/runtime/server/controllers/vehicle.controller.d.ts +3 -38
- package/dist/runtime/server/controllers/vehicle.controller.js +6 -152
- package/dist/runtime/server/decorators/guard.js +2 -2
- package/dist/runtime/server/decorators/index.d.ts +1 -1
- package/dist/runtime/server/decorators/index.js +1 -1
- package/dist/runtime/server/decorators/{onFiveMEvent.d.ts → onRuntimeEvent.d.ts} +5 -4
- package/dist/runtime/server/decorators/{onFiveMEvent.js → onRuntimeEvent.js} +7 -6
- package/dist/runtime/server/decorators/requiresState.js +3 -3
- package/dist/runtime/server/decorators/throttle.d.ts +1 -1
- package/dist/runtime/server/decorators/throttle.js +1 -1
- package/dist/runtime/server/decorators/utils.d.ts +1 -1
- package/dist/runtime/server/decorators/utils.js +1 -1
- package/dist/runtime/server/devmode/dev-mode.service.d.ts +7 -8
- package/dist/runtime/server/devmode/dev-mode.service.js +18 -46
- package/dist/runtime/server/devmode/index.d.ts +1 -3
- package/dist/runtime/server/devmode/index.js +1 -18
- package/dist/runtime/server/devmode/player-simulator.service.js +3 -3
- package/dist/runtime/server/devmode/state-inspector.service.js +2 -2
- package/dist/runtime/server/devmode/types.d.ts +67 -31
- package/dist/runtime/server/devmode/types.js +1 -4
- package/dist/runtime/server/entities/player.d.ts +80 -66
- package/dist/runtime/server/entities/player.js +137 -98
- package/dist/runtime/server/entities/vehicle.d.ts +3 -3
- package/dist/runtime/server/error-handler.js +5 -5
- package/dist/runtime/server/helpers/normalize-app-error.d.ts +9 -0
- package/dist/runtime/server/helpers/normalize-app-error.js +20 -0
- package/dist/runtime/server/helpers/resolve-method.js +3 -3
- package/dist/runtime/server/index.d.ts +1 -13
- package/dist/runtime/server/index.js +25 -23
- package/dist/runtime/server/runtime.d.ts +32 -281
- package/dist/runtime/server/runtime.js +46 -60
- package/dist/runtime/server/services/appearance.service.d.ts +5 -5
- package/dist/runtime/server/services/appearance.service.js +5 -5
- package/dist/runtime/server/services/chat.service.d.ts +5 -3
- package/dist/runtime/server/services/chat.service.js +17 -12
- package/dist/runtime/server/services/core/command.service.d.ts +9 -1
- package/dist/runtime/server/services/core/command.service.js +16 -7
- package/dist/runtime/server/services/core/player.service.d.ts +12 -16
- package/dist/runtime/server/services/core/player.service.js +42 -47
- package/dist/runtime/server/services/core/principal.service.js +5 -5
- package/dist/runtime/server/services/core/session-recovery.service.d.ts +1 -1
- package/dist/runtime/server/services/core/session-recovery.service.js +2 -2
- package/dist/runtime/server/services/default/default-command-error-observer.d.ts +14 -0
- package/dist/runtime/server/services/default/default-command-error-observer.js +43 -0
- package/dist/runtime/server/services/default/default-principal.provider.d.ts +13 -0
- package/dist/runtime/server/services/default/default-principal.provider.js +38 -0
- package/dist/runtime/server/services/default/default-security.handler.d.ts +1 -1
- package/dist/runtime/server/services/default/default-security.handler.js +1 -1
- package/dist/runtime/server/services/index.d.ts +0 -3
- package/dist/runtime/server/services/index.js +1 -6
- package/dist/runtime/server/services/persistence.service.js +3 -3
- package/dist/runtime/server/services/ports/command-execution.port.d.ts +7 -0
- package/dist/runtime/server/services/ports/principal.port.d.ts +1 -1
- package/dist/runtime/server/services/remote/remote-command.service.d.ts +1 -0
- package/dist/runtime/server/services/remote/remote-command.service.js +7 -3
- package/dist/runtime/server/services/remote/remote-player.service.d.ts +2 -2
- package/dist/runtime/server/services/remote/remote-player.service.js +3 -3
- package/dist/runtime/server/services/remote/server-bridge.js +2 -2
- package/dist/runtime/server/services/services.register.d.ts +2 -5
- package/dist/runtime/server/services/services.register.js +29 -41
- package/dist/runtime/server/services/vehicle-modification.service.js +1 -1
- package/dist/runtime/server/services/vehicle.service.d.ts +3 -3
- package/dist/runtime/server/services/vehicle.service.js +5 -5
- package/dist/runtime/server/setup.d.ts +2 -3
- package/dist/runtime/server/setup.js +10 -11
- package/dist/runtime/server/system/metadata-server.keys.d.ts +1 -1
- package/dist/runtime/server/system/metadata-server.keys.js +1 -1
- package/dist/runtime/server/system/processors/command.processor.js +4 -0
- package/dist/runtime/server/system/processors/export.processor.js +1 -1
- package/dist/runtime/server/system/processors/internalEvent.processor.js +1 -1
- package/dist/runtime/server/system/processors/netEvent.processor.js +8 -9
- package/dist/runtime/server/system/processors/{fivemEvent.processor.d.ts → runtimeEvent.processor.d.ts} +1 -1
- package/dist/runtime/server/system/processors/{fivemEvent.processor.js → runtimeEvent.processor.js} +8 -8
- package/dist/runtime/server/system/processors/tick.processor.js +1 -1
- package/dist/runtime/server/system/processors.register.js +16 -11
- package/dist/runtime/server/system/schema-generator.js +2 -2
- package/dist/runtime/server/types/core-exports.d.ts +6 -6
- package/dist/runtime/server/types/index.d.ts +1 -1
- package/dist/runtime/server/types/index.js +1 -1
- package/dist/runtime/server/types/internal-events.d.ts +1 -1
- package/dist/runtime/server/types/vehicle.types.d.ts +1 -1
- package/package.json +7 -15
- package/dist/adapters/contracts/IEntityServer.d.ts +0 -88
- package/dist/adapters/contracts/IEntityServer.js +0 -13
- package/dist/adapters/contracts/IPlayerServer.js +0 -13
- package/dist/adapters/database/oxmysql.adapter.d.ts +0 -89
- package/dist/adapters/database/oxmysql.adapter.js +0 -149
- package/dist/adapters/database/resource.adapter.d.ts +0 -12
- package/dist/adapters/database/resource.adapter.js +0 -68
- package/dist/kernel/shared/appearance/index.d.ts +0 -1
- package/dist/runtime/index.d.ts +0 -2
- package/dist/runtime/index.js +0 -39
- package/dist/runtime/server/bootstrap.validation.d.ts +0 -12
- package/dist/runtime/server/bootstrap.validation.js +0 -104
- package/dist/runtime/server/contracts/auth-provider.contract.d.ts +0 -58
- package/dist/runtime/server/contracts/auth-provider.contract.js +0 -23
- package/dist/runtime/server/contracts/repository/index.d.ts +0 -57
- package/dist/runtime/server/contracts/repository/index.js +0 -61
- package/dist/runtime/server/contracts/repository/repository.contract.d.ts +0 -224
- package/dist/runtime/server/contracts/repository/repository.contract.js +0 -341
- package/dist/runtime/server/contracts/repository/repository.types.d.ts +0 -51
- package/dist/runtime/server/contracts/repository/repository.types.js +0 -7
- package/dist/runtime/server/database/adapter.registry.d.ts +0 -4
- package/dist/runtime/server/database/adapter.registry.js +0 -14
- package/dist/runtime/server/database/database.contract.d.ts +0 -128
- package/dist/runtime/server/database/database.contract.js +0 -29
- package/dist/runtime/server/database/database.service.d.ts +0 -188
- package/dist/runtime/server/database/database.service.js +0 -287
- package/dist/runtime/server/database/index.d.ts +0 -5
- package/dist/runtime/server/database/index.js +0 -25
- package/dist/runtime/server/database/types.d.ts +0 -67
- package/dist/runtime/server/database/types.js +0 -7
- package/dist/runtime/server/database.d.ts +0 -7
- package/dist/runtime/server/devmode/hot-reload.server.d.ts +0 -74
- package/dist/runtime/server/devmode/hot-reload.server.js +0 -261
- package/dist/runtime/server/services/config.service.d.ts +0 -75
- package/dist/runtime/server/services/config.service.js +0 -116
- package/dist/runtime/server/services/http/http.service.d.ts +0 -50
- package/dist/runtime/server/services/http/http.service.js +0 -126
- /package/dist/adapters/contracts/{IPedAppearanceClient.js → client/IPedAppearanceClient.js} +0 -0
- /package/dist/adapters/contracts/{IPedAppearanceServer.d.ts → server/IPedAppearanceServer.d.ts} +0 -0
- /package/dist/adapters/contracts/{IPedAppearanceServer.js → server/IPedAppearanceServer.js} +0 -0
- /package/dist/adapters/contracts/{IVehicleServer.d.ts → server/IVehicleServer.d.ts} +0 -0
- /package/dist/adapters/contracts/{IVehicleServer.js → server/IVehicleServer.js} +0 -0
- /package/dist/kernel/{utils/error → error}/app.error.js +0 -0
- /package/dist/kernel/{shared/logger/transports/transport.interface.js → error/common.error-codes.js} +0 -0
- /package/dist/{runtime/server/types/security.types.js → kernel/error/framework.error-codes.js} +0 -0
- /package/dist/kernel/{utils/error → error}/security.error.js +0 -0
- /package/dist/{runtime/server/types → kernel/error}/security.types.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/index.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/index.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.config.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.config.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.types.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/logger.types.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/console.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/console.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/http.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/http.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/index.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/index.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.js +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/transport.interface.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.d.ts +0 -0
- /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.js +0 -0
- /package/dist/kernel/shared/{appearance/appearance.interface.d.ts → player-appearance.types.d.ts} +0 -0
- /package/dist/kernel/shared/{appearance/appearance.interface.js → player-appearance.types.js} +0 -0
|
@@ -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,26 +159,56 @@ 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); // server -> servers
|
|
166
|
+
const net = index_1.GLOBAL_CONTAINER.resolve(adapters_1.INetTransport); // server -> clients
|
|
167
|
+
engineEvents.emit('core:ready'); // Broadcast to all Servers resources
|
|
168
|
+
net.emitNet('core:ready', 'all'); // Broadcast to all Clients resources
|
|
169
|
+
logger_1.loggers.bootstrap.debug(`'core:ready' events emmited to all clients and all servers`);
|
|
239
170
|
}
|
|
240
171
|
}
|
|
241
172
|
function createCoreDependency(coreName) {
|
|
242
173
|
return new Promise((resolve, reject) => {
|
|
243
174
|
let resolved = false;
|
|
244
|
-
const engineEvents = index_1.
|
|
175
|
+
const engineEvents = index_1.GLOBAL_CONTAINER.resolve(adapters_1.IEngineEvents);
|
|
245
176
|
const cleanup = () => {
|
|
246
177
|
resolved = true;
|
|
247
178
|
clearTimeout(timeout);
|
|
179
|
+
clearInterval(pollingInterval);
|
|
180
|
+
};
|
|
181
|
+
// 1. Check if already ready via export (Polling)
|
|
182
|
+
const checkReady = () => {
|
|
183
|
+
var _a, _b;
|
|
184
|
+
if (resolved)
|
|
185
|
+
return;
|
|
186
|
+
try {
|
|
187
|
+
const globalExports = globalThis.exports;
|
|
188
|
+
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);
|
|
189
|
+
if (isReady === true) {
|
|
190
|
+
logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected as already ready via export.`);
|
|
191
|
+
cleanup();
|
|
192
|
+
resolve();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (_c) {
|
|
196
|
+
// Core might not be started yet, ignore
|
|
197
|
+
}
|
|
248
198
|
};
|
|
199
|
+
const pollingInterval = setInterval(checkReady, 500);
|
|
200
|
+
checkReady(); // Initial check
|
|
201
|
+
// 2. Timeout protection
|
|
249
202
|
const timeout = setTimeout(() => {
|
|
250
203
|
if (!resolved) {
|
|
251
|
-
|
|
204
|
+
cleanup();
|
|
205
|
+
reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' or expose 'isCoreReady' within ${CORE_WAIT_TIMEOUT}ms.`));
|
|
252
206
|
}
|
|
253
207
|
}, CORE_WAIT_TIMEOUT);
|
|
208
|
+
// 3. Listen for the event (for resources starting after/during CORE init)
|
|
254
209
|
const onReady = () => {
|
|
255
210
|
if (!resolved) {
|
|
211
|
+
logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected via 'core:ready' event.`);
|
|
256
212
|
cleanup();
|
|
257
213
|
resolve();
|
|
258
214
|
}
|
|
@@ -293,7 +249,7 @@ async function dependencyResolver(waitFor, onReady) {
|
|
|
293
249
|
*/
|
|
294
250
|
function runSessionRecovery() {
|
|
295
251
|
try {
|
|
296
|
-
const recoveryService = index_1.
|
|
252
|
+
const recoveryService = index_1.GLOBAL_CONTAINER.resolve(session_recovery_service_1.SessionRecoveryService);
|
|
297
253
|
const stats = recoveryService.recoverSessions();
|
|
298
254
|
if (stats.recovered > 0) {
|
|
299
255
|
logger_1.loggers.bootstrap.info(`[SessionRecovery] Recovered ${stats.recovered} player session(s)`);
|
|
@@ -315,15 +271,14 @@ async function initDevMode(config) {
|
|
|
315
271
|
const { StateInspectorService } = await Promise.resolve().then(() => __importStar(require('./devmode/state-inspector.service')));
|
|
316
272
|
const { PlayerSimulatorService } = await Promise.resolve().then(() => __importStar(require('./devmode/player-simulator.service')));
|
|
317
273
|
// Register DevMode services
|
|
318
|
-
index_1.
|
|
319
|
-
index_1.
|
|
320
|
-
index_1.
|
|
321
|
-
index_1.
|
|
274
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(EventInterceptorService, EventInterceptorService);
|
|
275
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(StateInspectorService, StateInspectorService);
|
|
276
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(PlayerSimulatorService, PlayerSimulatorService);
|
|
277
|
+
index_1.GLOBAL_CONTAINER.registerSingleton(DevModeService, DevModeService);
|
|
322
278
|
// Enable DevMode
|
|
323
|
-
const devModeService = index_1.
|
|
279
|
+
const devModeService = index_1.GLOBAL_CONTAINER.resolve(DevModeService);
|
|
324
280
|
await devModeService.enable({
|
|
325
281
|
enabled: true,
|
|
326
|
-
hotReload: config.hotReload,
|
|
327
282
|
bridge: config.bridge,
|
|
328
283
|
interceptor: config.interceptor,
|
|
329
284
|
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 {
|
|
@@ -5,13 +5,13 @@ exports.PrincipalProviderContract = void 0;
|
|
|
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
|
class PrincipalProviderContract {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { SecurityError } from '../../../../kernel/error/security.error';
|
|
2
|
+
import { Server } from '../../';
|
|
3
3
|
export declare abstract class SecurityHandlerContract {
|
|
4
4
|
abstract handleViolation(player: Server.Player, error: SecurityError): Promise<void>;
|
|
5
5
|
}
|
|
@@ -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 {
|