@open-core/framework 1.0.5-beta.2 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -8
- package/dist/adapters/contracts/IEngineEvents.d.ts +3 -3
- package/dist/adapters/contracts/IExports.d.ts +2 -2
- package/dist/adapters/contracts/client/IClientLocalPlayerBridge.d.ts +21 -0
- package/dist/adapters/contracts/client/IClientLocalPlayerBridge.js +6 -0
- package/dist/adapters/contracts/client/IClientRuntimeBridge.d.ts +5 -5
- package/dist/adapters/contracts/client/camera/IClientCameraPort.d.ts +107 -0
- package/dist/adapters/contracts/client/camera/IClientCameraPort.js +8 -0
- package/dist/adapters/contracts/client/camera/index.d.ts +1 -0
- package/dist/adapters/contracts/client/camera/index.js +1 -0
- package/dist/adapters/contracts/client/index.d.ts +4 -0
- package/dist/adapters/contracts/client/index.js +4 -0
- package/dist/adapters/contracts/client/ped/IClientPedPort.d.ts +62 -0
- package/dist/adapters/contracts/client/ped/IClientPedPort.js +5 -0
- package/dist/adapters/contracts/client/ped/index.d.ts +1 -0
- package/dist/adapters/contracts/client/ped/index.js +1 -0
- package/dist/adapters/contracts/client/progress/IClientProgressPort.d.ts +53 -0
- package/dist/adapters/contracts/client/progress/IClientProgressPort.js +8 -0
- package/dist/adapters/contracts/client/progress/index.d.ts +1 -0
- package/dist/adapters/contracts/client/progress/index.js +1 -0
- package/dist/adapters/contracts/client/spawn/IClientSpawnBridge.d.ts +5 -6
- package/dist/adapters/contracts/client/spawn/IClientSpawnBridge.js +5 -1
- package/dist/adapters/contracts/client/spawn/IClientSpawnPort.d.ts +19 -0
- package/dist/adapters/contracts/client/spawn/IClientSpawnPort.js +2 -0
- package/dist/adapters/contracts/client/spawn/index.d.ts +2 -0
- package/dist/adapters/contracts/client/spawn/index.js +2 -0
- package/dist/adapters/contracts/client/spawn/types.d.ts +3 -0
- package/dist/adapters/contracts/client/ui/webview/IClientWebViewBridge.d.ts +1 -0
- package/dist/adapters/contracts/client/ui/webview/types.d.ts +2 -0
- package/dist/adapters/contracts/client/vehicle/IClientVehiclePort.d.ts +166 -0
- package/dist/adapters/contracts/client/vehicle/IClientVehiclePort.js +8 -0
- package/dist/adapters/contracts/client/vehicle/index.d.ts +1 -0
- package/dist/adapters/contracts/client/vehicle/index.js +1 -0
- package/dist/adapters/contracts/transport/events.api.d.ts +3 -3
- package/dist/adapters/contracts/transport/index.d.ts +1 -0
- package/dist/adapters/contracts/transport/index.js +1 -0
- package/dist/adapters/contracts/transport/rpc-error.d.ts +17 -0
- package/dist/adapters/contracts/transport/rpc-error.js +28 -0
- package/dist/adapters/contracts/transport/rpc.api.d.ts +3 -3
- package/dist/adapters/node/transport/node.events.d.ts +4 -4
- package/dist/adapters/node/transport/node.rpc.d.ts +3 -3
- package/dist/adapters/node/transport/node.rpc.js +1 -1
- package/dist/contracts.d.ts +1 -0
- package/dist/contracts.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/kernel/logger/client-log-console.js +8 -8
- package/dist/kernel/logger/index.d.ts +1 -1
- package/dist/kernel/logger/index.js +1 -1
- package/dist/kernel/logger/logger.types.d.ts +1 -0
- package/dist/kernel/logger/logger.types.js +35 -0
- package/dist/kernel/logger/transports/buffered.transport.js +4 -4
- package/dist/kernel/logger/transports/console.transport.js +2 -2
- package/dist/kernel/logger/transports/simple-console.transport.js +2 -2
- package/dist/runtime/client/adapter/index.d.ts +5 -0
- package/dist/runtime/client/adapter/index.js +5 -0
- package/dist/runtime/client/adapter/node-camera-port.d.ts +19 -0
- package/dist/runtime/client/adapter/node-camera-port.js +31 -0
- package/dist/runtime/client/adapter/node-client-adapter.js +15 -1
- package/dist/runtime/client/adapter/node-local-player-bridge.d.ts +3 -0
- package/dist/runtime/client/adapter/node-local-player-bridge.js +9 -0
- package/dist/runtime/client/adapter/node-log-console.js +8 -8
- package/dist/runtime/client/adapter/node-ped-port.d.ts +20 -0
- package/dist/runtime/client/adapter/node-ped-port.js +38 -0
- package/dist/runtime/client/adapter/node-progress-port.d.ts +8 -0
- package/dist/runtime/client/adapter/node-progress-port.js +27 -0
- package/dist/runtime/client/adapter/node-runtime-bridge.d.ts +2 -4
- package/dist/runtime/client/adapter/node-spawn-bridge.d.ts +5 -5
- package/dist/runtime/client/adapter/node-spawn-bridge.js +8 -4
- package/dist/runtime/client/adapter/node-vehicle-port.d.ts +31 -0
- package/dist/runtime/client/adapter/node-vehicle-port.js +73 -0
- package/dist/runtime/client/adapter/node-webview-bridge.d.ts +1 -0
- package/dist/runtime/client/adapter/node-webview-bridge.js +2 -0
- package/dist/runtime/client/controllers/appearance.controller.d.ts +3 -3
- package/dist/runtime/client/controllers/appearance.controller.js +11 -10
- package/dist/runtime/client/controllers/spawner.controller.js +4 -3
- package/dist/runtime/client/services/camera.d.ts +4 -26
- package/dist/runtime/client/services/camera.js +21 -27
- package/dist/runtime/client/services/notification.service.d.ts +3 -3
- package/dist/runtime/client/services/notification.service.js +7 -7
- package/dist/runtime/client/services/ped.service.d.ts +6 -21
- package/dist/runtime/client/services/ped.service.js +31 -78
- package/dist/runtime/client/services/progress.service.d.ts +4 -50
- package/dist/runtime/client/services/progress.service.js +11 -143
- package/dist/runtime/client/services/session-bridge.service.js +3 -2
- package/dist/runtime/client/services/spawn.service.d.ts +3 -5
- package/dist/runtime/client/services/spawn.service.js +12 -17
- package/dist/runtime/client/services/vehicle-client.service.d.ts +3 -3
- package/dist/runtime/client/services/vehicle-client.service.js +43 -143
- package/dist/runtime/client/services/vehicle.service.d.ts +4 -41
- package/dist/runtime/client/services/vehicle.service.js +24 -130
- package/dist/runtime/client/webview-bridge.d.ts +3 -0
- package/dist/runtime/client/webview-bridge.js +6 -0
- package/dist/runtime/client/webview.service.d.ts +1 -0
- package/dist/runtime/client/webview.service.js +5 -0
- package/dist/runtime/server/adapter/node-player-appearance-lifecycle-server.js +3 -2
- package/dist/runtime/server/adapter/node-player-lifecycle-server.js +4 -3
- package/dist/runtime/server/adapter/node-vehicle-lifecycle-server.js +2 -1
- package/dist/runtime/server/apis/chat.api.js +6 -5
- package/dist/runtime/server/apis/npcs.api.js +2 -1
- package/dist/runtime/server/apis/parallel-compute.api.js +1 -0
- package/dist/runtime/server/apis/vehicle-modification.api.js +6 -4
- package/dist/runtime/server/apis/vehicles.api.js +7 -4
- package/dist/runtime/server/bootstrap.js +13 -12
- package/dist/runtime/server/controllers/command-export.controller.js +4 -2
- package/dist/runtime/server/controllers/remote-command-execution.controller.js +2 -1
- package/dist/runtime/server/controllers/vehicle.controller.js +6 -5
- package/dist/runtime/server/decorators/command.d.ts +2 -0
- package/dist/runtime/server/decorators/command.js +3 -1
- package/dist/runtime/server/entities/npc.d.ts +1 -1
- package/dist/runtime/server/entities/player.d.ts +1 -1
- package/dist/runtime/server/entities/player.js +10 -3
- package/dist/runtime/server/helpers/command-validation.helper.js +20 -7
- package/dist/runtime/server/helpers/function-helper.d.ts +1 -0
- package/dist/runtime/server/helpers/function-helper.js +15 -8
- package/dist/runtime/server/implementations/local/channel.local.d.ts +1 -1
- package/dist/runtime/server/implementations/local/channel.local.js +3 -2
- package/dist/runtime/server/ports/channel.api-port.d.ts +1 -1
- package/dist/runtime/server/services/parallel/worker-pool.d.ts +1 -1
- package/dist/runtime/server/services/parallel/worker-pool.js +38 -6
- package/dist/runtime/server/services/parallel/worker.js +1 -0
- package/dist/runtime/server/system/processors/onRpc.processor.js +14 -3
- package/dist/runtime/server/system/schema-generator.d.ts +1 -1
- package/dist/runtime/server/system/schema-generator.js +6 -3
- package/dist/runtime/shared/helpers/process-tuple-schema.js +3 -0
- package/dist/runtime/shared/types/system-types.d.ts +55 -0
- package/dist/runtime/shared/types/system-types.js +54 -0
- package/package.json +21 -11
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { Vector3 } from '../../../../kernel/utils/vector3';
|
|
2
|
+
/**
|
|
3
|
+
* High-level vehicle creation options understood by client adapters.
|
|
4
|
+
*/
|
|
5
|
+
export interface ClientVehicleSpawnOptions {
|
|
6
|
+
model: string;
|
|
7
|
+
position: Vector3;
|
|
8
|
+
heading?: number;
|
|
9
|
+
placeOnGround?: boolean;
|
|
10
|
+
warpIntoVehicle?: boolean;
|
|
11
|
+
seatIndex?: number;
|
|
12
|
+
primaryColor?: number;
|
|
13
|
+
secondaryColor?: number;
|
|
14
|
+
plate?: string;
|
|
15
|
+
networked?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Common vehicle modification payload used by the framework.
|
|
19
|
+
*/
|
|
20
|
+
export interface ClientVehicleMods {
|
|
21
|
+
spoiler?: number;
|
|
22
|
+
frontBumper?: number;
|
|
23
|
+
rearBumper?: number;
|
|
24
|
+
sideSkirt?: number;
|
|
25
|
+
exhaust?: number;
|
|
26
|
+
frame?: number;
|
|
27
|
+
grille?: number;
|
|
28
|
+
hood?: number;
|
|
29
|
+
fender?: number;
|
|
30
|
+
rightFender?: number;
|
|
31
|
+
roof?: number;
|
|
32
|
+
engine?: number;
|
|
33
|
+
brakes?: number;
|
|
34
|
+
transmission?: number;
|
|
35
|
+
horns?: number;
|
|
36
|
+
suspension?: number;
|
|
37
|
+
armor?: number;
|
|
38
|
+
turbo?: boolean;
|
|
39
|
+
xenon?: boolean;
|
|
40
|
+
wheelType?: number;
|
|
41
|
+
wheels?: number;
|
|
42
|
+
windowTint?: number;
|
|
43
|
+
livery?: number;
|
|
44
|
+
plateStyle?: number;
|
|
45
|
+
neonEnabled?: [boolean, boolean, boolean, boolean];
|
|
46
|
+
neonColor?: [number, number, number];
|
|
47
|
+
extras?: Record<string, boolean>;
|
|
48
|
+
pearlescentColor?: number;
|
|
49
|
+
wheelColor?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Intent-oriented client vehicle port.
|
|
53
|
+
*
|
|
54
|
+
* The framework requests vehicle operations through this port and the adapter
|
|
55
|
+
* decides how to fulfill them for the active runtime.
|
|
56
|
+
*/
|
|
57
|
+
export declare abstract class IClientVehiclePort {
|
|
58
|
+
/**
|
|
59
|
+
* Spawns a vehicle and returns its runtime handle.
|
|
60
|
+
*/
|
|
61
|
+
abstract spawn(options: ClientVehicleSpawnOptions): Promise<number>;
|
|
62
|
+
/**
|
|
63
|
+
* Deletes an existing vehicle handle.
|
|
64
|
+
*/
|
|
65
|
+
abstract delete(vehicle: number): void;
|
|
66
|
+
/**
|
|
67
|
+
* Repairs a vehicle and restores it to a drivable state.
|
|
68
|
+
*/
|
|
69
|
+
abstract repair(vehicle: number): void;
|
|
70
|
+
/**
|
|
71
|
+
* Sets normalized fuel in the 0..1 range unless the adapter documents otherwise.
|
|
72
|
+
*/
|
|
73
|
+
abstract setFuel(vehicle: number, level: number): void;
|
|
74
|
+
/**
|
|
75
|
+
* Gets normalized fuel in the 0..1 range unless the adapter documents otherwise.
|
|
76
|
+
*/
|
|
77
|
+
abstract getFuel(vehicle: number): number;
|
|
78
|
+
/**
|
|
79
|
+
* Returns the closest vehicle around the local player.
|
|
80
|
+
*/
|
|
81
|
+
abstract getClosest(radius?: number): number | null;
|
|
82
|
+
/**
|
|
83
|
+
* Returns whether the local player is currently inside any vehicle.
|
|
84
|
+
*/
|
|
85
|
+
abstract isLocalPlayerInVehicle(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Returns the vehicle currently occupied by the local player.
|
|
88
|
+
*/
|
|
89
|
+
abstract getCurrentForLocalPlayer(): number | null;
|
|
90
|
+
/**
|
|
91
|
+
* Returns the last vehicle used by the local player.
|
|
92
|
+
*/
|
|
93
|
+
abstract getLastForLocalPlayer(): number | null;
|
|
94
|
+
/**
|
|
95
|
+
* Returns whether the local player is driving the provided vehicle.
|
|
96
|
+
*/
|
|
97
|
+
abstract isLocalPlayerDriver(vehicle: number): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Warps the local player into a seat.
|
|
100
|
+
*/
|
|
101
|
+
abstract warpLocalPlayerInto(vehicle: number, seatIndex?: number): void;
|
|
102
|
+
/**
|
|
103
|
+
* Makes the local player leave the provided vehicle.
|
|
104
|
+
*/
|
|
105
|
+
abstract leaveLocalPlayerVehicle(vehicle: number, flags?: number): void;
|
|
106
|
+
/**
|
|
107
|
+
* Applies visual/performance modifications to a vehicle.
|
|
108
|
+
*/
|
|
109
|
+
abstract applyMods(vehicle: number, mods: ClientVehicleMods): void;
|
|
110
|
+
/**
|
|
111
|
+
* Updates door lock state.
|
|
112
|
+
*/
|
|
113
|
+
abstract setDoorsLocked(vehicle: number, locked: boolean): void;
|
|
114
|
+
/**
|
|
115
|
+
* Starts or stops the engine.
|
|
116
|
+
*/
|
|
117
|
+
abstract setEngineRunning(vehicle: number, running: boolean, instant?: boolean): void;
|
|
118
|
+
/**
|
|
119
|
+
* Sets invincibility state for the vehicle entity.
|
|
120
|
+
*/
|
|
121
|
+
abstract setInvincible(vehicle: number, invincible: boolean): void;
|
|
122
|
+
/**
|
|
123
|
+
* Returns speed in meters per second.
|
|
124
|
+
*/
|
|
125
|
+
abstract getSpeed(vehicle: number): number;
|
|
126
|
+
/**
|
|
127
|
+
* Sets heading for a vehicle.
|
|
128
|
+
*/
|
|
129
|
+
abstract setHeading(vehicle: number, heading: number): void;
|
|
130
|
+
/**
|
|
131
|
+
* Teleports a vehicle to a world position.
|
|
132
|
+
*/
|
|
133
|
+
abstract teleport(vehicle: number, position: Vector3, heading?: number): void;
|
|
134
|
+
/**
|
|
135
|
+
* Returns whether a vehicle handle exists.
|
|
136
|
+
*/
|
|
137
|
+
abstract exists(vehicle: number): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Resolves the runtime network identifier for a vehicle.
|
|
140
|
+
*/
|
|
141
|
+
abstract getNetworkId(vehicle: number): number;
|
|
142
|
+
/**
|
|
143
|
+
* Resolves a vehicle handle from a runtime network identifier.
|
|
144
|
+
*/
|
|
145
|
+
abstract getFromNetworkId(networkId: number): number;
|
|
146
|
+
/**
|
|
147
|
+
* Reads a runtime state bag/state entry from a vehicle.
|
|
148
|
+
*/
|
|
149
|
+
abstract getState<T = unknown>(vehicle: number, key: string): T | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* Returns the world position of a vehicle.
|
|
152
|
+
*/
|
|
153
|
+
abstract getPosition(vehicle: number): Vector3 | null;
|
|
154
|
+
/**
|
|
155
|
+
* Returns the heading of a vehicle.
|
|
156
|
+
*/
|
|
157
|
+
abstract getHeading(vehicle: number): number;
|
|
158
|
+
/**
|
|
159
|
+
* Returns the model hash of a vehicle.
|
|
160
|
+
*/
|
|
161
|
+
abstract getModel(vehicle: number): number;
|
|
162
|
+
/**
|
|
163
|
+
* Returns the current number plate text.
|
|
164
|
+
*/
|
|
165
|
+
abstract getPlate(vehicle: number): string;
|
|
166
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './IClientVehiclePort';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './IClientVehiclePort';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventContext, RuntimeContext } from './context';
|
|
2
2
|
import { Player } from '../../../runtime/server/entities/player';
|
|
3
|
-
type EmitArgs<C extends RuntimeContext> = C extends 'server' ? [target: Player | number | number[] | 'all', ...args:
|
|
3
|
+
type EmitArgs<C extends RuntimeContext> = C extends 'server' ? [target: Player | number | number[] | 'all', ...args: unknown[]] : [...args: unknown[]];
|
|
4
4
|
/**
|
|
5
5
|
* broadcast and listen to events without relying on runtime. The adapter will be used.
|
|
6
6
|
*/
|
|
@@ -13,7 +13,7 @@ export declare abstract class EventsAPI<C extends RuntimeContext> {
|
|
|
13
13
|
* Client:
|
|
14
14
|
* - triggered by server
|
|
15
15
|
*/
|
|
16
|
-
abstract on(event: string, handler: (ctx: EventContext, ...args:
|
|
16
|
+
abstract on<TArgs extends readonly unknown[]>(event: string, handler: (ctx: EventContext, ...args: TArgs) => void | Promise<void>): void;
|
|
17
17
|
/**
|
|
18
18
|
* Emit an event.
|
|
19
19
|
* SERVER → CLIENT
|
|
@@ -22,7 +22,7 @@ export declare abstract class EventsAPI<C extends RuntimeContext> {
|
|
|
22
22
|
* Client:
|
|
23
23
|
* - sends to server, targetOrArg will be ignored
|
|
24
24
|
*/
|
|
25
|
-
abstract emit(event: string, target: Player | number | number[] | 'all', ...args:
|
|
25
|
+
abstract emit(event: string, target: Player | number | number[] | 'all', ...args: unknown[]): void;
|
|
26
26
|
/**
|
|
27
27
|
* Emit an event.
|
|
28
28
|
* CLIENT → SERVER
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const PUBLIC_RPC_ERROR_MESSAGE = "An internal server error occurred";
|
|
2
|
+
export type RpcErrorInfo = {
|
|
3
|
+
message: string;
|
|
4
|
+
name?: string;
|
|
5
|
+
};
|
|
6
|
+
type ExposedRpcError = {
|
|
7
|
+
message: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
expose: true;
|
|
10
|
+
};
|
|
11
|
+
export declare class RpcPublicError extends Error {
|
|
12
|
+
readonly expose = true;
|
|
13
|
+
constructor(message: string, name?: string);
|
|
14
|
+
}
|
|
15
|
+
export declare function isExposedRpcError(error: unknown): error is ExposedRpcError;
|
|
16
|
+
export declare function serializeRpcError(error: unknown): RpcErrorInfo;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const PUBLIC_RPC_ERROR_MESSAGE = 'An internal server error occurred';
|
|
2
|
+
export class RpcPublicError extends Error {
|
|
3
|
+
expose = true;
|
|
4
|
+
constructor(message, name) {
|
|
5
|
+
super(message);
|
|
6
|
+
if (name) {
|
|
7
|
+
this.name = name;
|
|
8
|
+
}
|
|
9
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function isExposedRpcError(error) {
|
|
13
|
+
return (typeof error === 'object' &&
|
|
14
|
+
error !== null &&
|
|
15
|
+
'message' in error &&
|
|
16
|
+
typeof error.message === 'string' &&
|
|
17
|
+
'expose' in error &&
|
|
18
|
+
error.expose === true);
|
|
19
|
+
}
|
|
20
|
+
export function serializeRpcError(error) {
|
|
21
|
+
if (isExposedRpcError(error)) {
|
|
22
|
+
return {
|
|
23
|
+
message: error.message,
|
|
24
|
+
name: 'name' in error && typeof error.name === 'string' ? error.name : undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return { message: PUBLIC_RPC_ERROR_MESSAGE };
|
|
28
|
+
}
|
|
@@ -14,8 +14,8 @@ export interface RpcContext extends EventContext {
|
|
|
14
14
|
*/
|
|
15
15
|
export type RpcTarget = number | number[] | 'all';
|
|
16
16
|
export type RpcCallTarget = number | number[];
|
|
17
|
-
type RpcCallArgs<C extends RuntimeContext> = C extends 'server' ? [target: RpcCallTarget, ...args:
|
|
18
|
-
type RpcNotifyArgs<C extends RuntimeContext> = C extends 'server' ? [target: RpcTarget, ...args:
|
|
17
|
+
type RpcCallArgs<C extends RuntimeContext> = C extends 'server' ? [target: RpcCallTarget, ...args: unknown[]] : [...args: unknown[]];
|
|
18
|
+
type RpcNotifyArgs<C extends RuntimeContext> = C extends 'server' ? [target: RpcTarget, ...args: unknown[]] : [...args: unknown[]];
|
|
19
19
|
/**
|
|
20
20
|
* Remote Procedure Call API.
|
|
21
21
|
*
|
|
@@ -47,7 +47,7 @@ export declare abstract class RpcAPI<C extends RuntimeContext> {
|
|
|
47
47
|
* The handler receives a {@link RpcContext}. In server environments this usually includes
|
|
48
48
|
* the `clientId` of the caller (via {@link EventContext}).
|
|
49
49
|
*/
|
|
50
|
-
abstract on<TArgs extends
|
|
50
|
+
abstract on<TArgs extends readonly unknown[], TResult>(name: string, handler: (ctx: RpcContext, ...args: TArgs) => TResult | Promise<TResult>): void;
|
|
51
51
|
/**
|
|
52
52
|
* Call an RPC and wait for the result.
|
|
53
53
|
*
|
|
@@ -3,12 +3,12 @@ import { RuntimeContext } from '../../contracts/transport/context';
|
|
|
3
3
|
type NodeTarget = number | number[] | 'all';
|
|
4
4
|
export declare class NodeEvents extends EventsAPI<RuntimeContext> {
|
|
5
5
|
private readonly emitter;
|
|
6
|
-
on(event: string, handler: (ctx: {
|
|
6
|
+
on<TArgs extends readonly unknown[]>(event: string, handler: (ctx: {
|
|
7
7
|
clientId?: number;
|
|
8
8
|
raw?: unknown;
|
|
9
|
-
}, ...args:
|
|
10
|
-
emit(event: string, targetOrArg?: NodeTarget |
|
|
11
|
-
simulateClientEvent(event: string, clientId: number, ...args:
|
|
9
|
+
}, ...args: TArgs) => unknown): void;
|
|
10
|
+
emit(event: string, targetOrArg?: NodeTarget | unknown, ...args: unknown[]): void;
|
|
11
|
+
simulateClientEvent(event: string, clientId: number, ...args: unknown[]): void;
|
|
12
12
|
clearHandlers(): void;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -4,13 +4,13 @@ export declare class NodeRpc<C extends RuntimeContext = RuntimeContext> extends
|
|
|
4
4
|
private readonly context;
|
|
5
5
|
private readonly handlers;
|
|
6
6
|
constructor(context: C);
|
|
7
|
-
on<TArgs extends
|
|
7
|
+
on<TArgs extends readonly unknown[], TResult>(name: string, handler: (ctx: {
|
|
8
8
|
requestId: string;
|
|
9
9
|
clientId?: number;
|
|
10
10
|
raw?: unknown;
|
|
11
11
|
}, ...args: TArgs) => TResult | Promise<TResult>): void;
|
|
12
|
-
call<TResult = unknown>(name: string, ...args:
|
|
13
|
-
notify(name: string, ...args:
|
|
12
|
+
call<TResult = unknown>(name: string, ...args: unknown[]): Promise<TResult>;
|
|
13
|
+
notify(name: string, ...args: unknown[]): Promise<void>;
|
|
14
14
|
private normalizeInvocation;
|
|
15
15
|
private isValidTarget;
|
|
16
16
|
private executeCall;
|
|
@@ -8,7 +8,7 @@ export class NodeRpc extends RpcAPI {
|
|
|
8
8
|
this.context = context;
|
|
9
9
|
}
|
|
10
10
|
on(name, handler) {
|
|
11
|
-
this.handlers.set(name, handler);
|
|
11
|
+
this.handlers.set(name, (ctx, ...args) => handler(ctx, ...args));
|
|
12
12
|
}
|
|
13
13
|
call(name, ...args) {
|
|
14
14
|
const { target, payload } = this.normalizeInvocation(name, 'call', args);
|
package/dist/contracts.d.ts
CHANGED
package/dist/contracts.js
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -9,26 +9,26 @@ class DefaultClientLogConsole extends IClientLogConsole {
|
|
|
9
9
|
return DEFAULT_CLIENT_LOG_CONSOLE_CAPABILITIES;
|
|
10
10
|
}
|
|
11
11
|
trace(message, details) {
|
|
12
|
-
this.write(
|
|
12
|
+
this.write('debug', message, details);
|
|
13
13
|
}
|
|
14
14
|
debug(message, details) {
|
|
15
|
-
this.write(
|
|
15
|
+
this.write('debug', message, details);
|
|
16
16
|
}
|
|
17
17
|
info(message, details) {
|
|
18
|
-
this.write(
|
|
18
|
+
this.write('info', message, details);
|
|
19
19
|
}
|
|
20
20
|
warn(message, details) {
|
|
21
|
-
this.write(
|
|
21
|
+
this.write('warn', message, details);
|
|
22
22
|
}
|
|
23
23
|
error(message, details) {
|
|
24
|
-
this.write(
|
|
24
|
+
this.write('error', message, details);
|
|
25
25
|
}
|
|
26
|
-
write(
|
|
26
|
+
write(level, message, details) {
|
|
27
27
|
if (details === undefined) {
|
|
28
|
-
|
|
28
|
+
console[level](message);
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
console[level](message, details);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
let activeClientLogConsole = new DefaultClientLogConsole();
|
|
@@ -6,7 +6,7 @@ export { getLogLevel, isClientEnvironment, isDebugMode, isFiveMEnvironment, isSe
|
|
|
6
6
|
export { ChildLogger, LoggerService } from './logger.service';
|
|
7
7
|
export type { ClientLogConsoleCapabilities } from '../../adapters/contracts/client/IClientLogConsole';
|
|
8
8
|
export type { LogContext, LogEntry } from './logger.types';
|
|
9
|
-
export { LogDomain, LogDomainLabels, LogLevel, LogLevelLabels, parseLogLevel } from './logger.types';
|
|
9
|
+
export { getLogDomainLabel, LogDomain, LogDomainLabels, LogLevel, LogLevelLabels, parseLogLevel, } from './logger.types';
|
|
10
10
|
export type { BufferedTransportOptions, LogOutputFormat } from './transports/buffered.transport';
|
|
11
11
|
export { BufferedTransport } from './transports/buffered.transport';
|
|
12
12
|
export type { ConsoleTransportOptions } from './transports/console.transport';
|
|
@@ -7,7 +7,7 @@ export { createLoggerConfig, DEFAULT_LOGGER_CONFIG } from './logger.config';
|
|
|
7
7
|
export { getLogLevel, isClientEnvironment, isDebugMode, isFiveMEnvironment, isServerEnvironment, } from './logger.env';
|
|
8
8
|
// Service
|
|
9
9
|
export { ChildLogger, LoggerService } from './logger.service';
|
|
10
|
-
export { LogDomain, LogDomainLabels, LogLevel, LogLevelLabels, parseLogLevel } from './logger.types';
|
|
10
|
+
export { getLogDomainLabel, LogDomain, LogDomainLabels, LogLevel, LogLevelLabels, parseLogLevel, } from './logger.types';
|
|
11
11
|
export { BufferedTransport } from './transports/buffered.transport';
|
|
12
12
|
export { ConsoleTransport } from './transports/console.transport';
|
|
13
13
|
export { SimpleConsoleTransport } from './transports/simple-console.transport';
|
|
@@ -45,6 +45,7 @@ export declare enum LogDomain {
|
|
|
45
45
|
* Human-readable labels for each log domain.
|
|
46
46
|
*/
|
|
47
47
|
export declare const LogDomainLabels: Record<LogDomain, string>;
|
|
48
|
+
export declare function getLogDomainLabel(domain: LogDomain): string;
|
|
48
49
|
/**
|
|
49
50
|
* Additional contextual information that can be attached to any log entry.
|
|
50
51
|
* Useful for tracing, debugging, and correlation.
|
|
@@ -60,6 +60,41 @@ export const LogDomainLabels = {
|
|
|
60
60
|
[LogDomain.CLIENT]: 'CLIENT',
|
|
61
61
|
[LogDomain.EXTERNAL]: 'EXTERNAL',
|
|
62
62
|
};
|
|
63
|
+
function normalizeResourceName(resourceName) {
|
|
64
|
+
return resourceName.trim().replace(/^\[(.*)\]$/, '$1');
|
|
65
|
+
}
|
|
66
|
+
function getInjectedResourceName() {
|
|
67
|
+
if (typeof __OPENCORE_RESOURCE_NAME__ === 'string' &&
|
|
68
|
+
normalizeResourceName(__OPENCORE_RESOURCE_NAME__).length > 0) {
|
|
69
|
+
return normalizeResourceName(__OPENCORE_RESOURCE_NAME__);
|
|
70
|
+
}
|
|
71
|
+
const fn = globalThis.GetCurrentResourceName;
|
|
72
|
+
if (typeof fn === 'function') {
|
|
73
|
+
try {
|
|
74
|
+
const value = fn();
|
|
75
|
+
if (typeof value === 'string' && normalizeResourceName(value).length > 0) {
|
|
76
|
+
return normalizeResourceName(value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Ignore runtime lookup failures and fall back to default labels.
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
export function getLogDomainLabel(domain) {
|
|
86
|
+
if (domain !== LogDomain.FRAMEWORK) {
|
|
87
|
+
return LogDomainLabels[domain];
|
|
88
|
+
}
|
|
89
|
+
const resourceName = getInjectedResourceName();
|
|
90
|
+
if (!resourceName) {
|
|
91
|
+
return LogDomainLabels[domain];
|
|
92
|
+
}
|
|
93
|
+
if (resourceName.toLowerCase() === 'core') {
|
|
94
|
+
return 'CORE';
|
|
95
|
+
}
|
|
96
|
+
return resourceName.toUpperCase();
|
|
97
|
+
}
|
|
63
98
|
/**
|
|
64
99
|
* Configuration for parsing log level from string (useful for env vars).
|
|
65
100
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLogDomainLabel, LogLevel, LogLevelLabels } from '../logger.types';
|
|
2
2
|
/**
|
|
3
3
|
* A transport that buffers log entries in memory for later export.
|
|
4
4
|
*
|
|
@@ -95,7 +95,7 @@ export class BufferedTransport {
|
|
|
95
95
|
const entries = this.buffer.map((entry) => ({
|
|
96
96
|
timestamp: entry.timestamp,
|
|
97
97
|
level: LogLevelLabels[entry.level],
|
|
98
|
-
domain:
|
|
98
|
+
domain: getLogDomainLabel(entry.domain),
|
|
99
99
|
source: entry.context?.source,
|
|
100
100
|
message: entry.message,
|
|
101
101
|
context: this.cleanContext(entry.context),
|
|
@@ -114,7 +114,7 @@ export class BufferedTransport {
|
|
|
114
114
|
.map((entry) => {
|
|
115
115
|
const time = entry.timestamp.replace('T', ' ').slice(0, 23);
|
|
116
116
|
const level = LogLevelLabels[entry.level].padEnd(5);
|
|
117
|
-
const domain =
|
|
117
|
+
const domain = getLogDomainLabel(entry.domain).padEnd(8);
|
|
118
118
|
const source = entry.context?.source ? `[${entry.context.source}]` : '';
|
|
119
119
|
let line = `${time} | ${domain} | ${level} | ${source} ${entry.message}`;
|
|
120
120
|
const ctx = this.cleanContext(entry.context);
|
|
@@ -133,7 +133,7 @@ export class BufferedTransport {
|
|
|
133
133
|
const rows = this.buffer.map((entry) => [
|
|
134
134
|
entry.timestamp,
|
|
135
135
|
LogLevelLabels[entry.level],
|
|
136
|
-
|
|
136
|
+
getLogDomainLabel(entry.domain),
|
|
137
137
|
entry.context?.source ?? '',
|
|
138
138
|
`"${entry.message.replace(/"/g, '""')}"`,
|
|
139
139
|
JSON.stringify(this.cleanContext(entry.context)),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLogDomainLabel, LogDomain, LogLevel, LogLevelLabels, } from '../logger.types';
|
|
2
2
|
/**
|
|
3
3
|
* Color codes for console output.
|
|
4
4
|
* Uses ANSI escape codes compatible with most terminals.
|
|
@@ -63,7 +63,7 @@ export class ConsoleTransport {
|
|
|
63
63
|
write(entry) {
|
|
64
64
|
const { level, domain, message, timestamp, context, error } = entry;
|
|
65
65
|
const levelLabel = LogLevelLabels[level].padEnd(5);
|
|
66
|
-
const domainLabel =
|
|
66
|
+
const domainLabel = getLogDomainLabel(domain);
|
|
67
67
|
const levelColor = this.colors ? LEVEL_COLORS[level] : '';
|
|
68
68
|
const domainColor = this.colors ? DOMAIN_COLORS[domain] : '';
|
|
69
69
|
const reset = this.colors ? COLORS.reset : '';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLogDomainLabel, LogLevel, LogLevelLabels } from '../logger.types';
|
|
2
2
|
import { getClientLogConsole } from '../client-log-console';
|
|
3
3
|
/**
|
|
4
4
|
* Simple console transport without ANSI color codes.
|
|
@@ -29,7 +29,7 @@ export class SimpleConsoleTransport {
|
|
|
29
29
|
const output = getClientLogConsole();
|
|
30
30
|
const capabilities = output.getCapabilities();
|
|
31
31
|
const levelLabel = LogLevelLabels[level].padEnd(5);
|
|
32
|
-
const domainLabel =
|
|
32
|
+
const domainLabel = getLogDomainLabel(domain);
|
|
33
33
|
// Build the log line without ANSI codes
|
|
34
34
|
const parts = [];
|
|
35
35
|
if (this.timestamps) {
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export * from './client-adapter';
|
|
2
|
+
export * from '../../../adapters/contracts/client/camera/IClientCameraPort';
|
|
2
3
|
export * from '../../../adapters/contracts/client/IClientLogConsole';
|
|
4
|
+
export * from '../../../adapters/contracts/client/ped/IClientPedPort';
|
|
5
|
+
export * from '../../../adapters/contracts/client/progress/IClientProgressPort';
|
|
6
|
+
export * from '../../../adapters/contracts/client/spawn/IClientSpawnPort';
|
|
3
7
|
export * from '../../../adapters/contracts/client/spawn/IClientSpawnBridge';
|
|
8
|
+
export * from '../../../adapters/contracts/client/vehicle/IClientVehiclePort';
|
|
4
9
|
export * from '../../../adapters/contracts/client/ui/IClientBlipBridge';
|
|
5
10
|
export * from '../../../adapters/contracts/client/ui/IClientMarkerBridge';
|
|
6
11
|
export * from '../../../adapters/contracts/client/ui/IClientNotificationBridge';
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export * from './client-adapter';
|
|
2
|
+
export * from '../../../adapters/contracts/client/camera/IClientCameraPort';
|
|
2
3
|
export * from '../../../adapters/contracts/client/IClientLogConsole';
|
|
4
|
+
export * from '../../../adapters/contracts/client/ped/IClientPedPort';
|
|
5
|
+
export * from '../../../adapters/contracts/client/progress/IClientProgressPort';
|
|
6
|
+
export * from '../../../adapters/contracts/client/spawn/IClientSpawnPort';
|
|
3
7
|
export * from '../../../adapters/contracts/client/spawn/IClientSpawnBridge';
|
|
8
|
+
export * from '../../../adapters/contracts/client/vehicle/IClientVehiclePort';
|
|
4
9
|
export * from '../../../adapters/contracts/client/ui/IClientBlipBridge';
|
|
5
10
|
export * from '../../../adapters/contracts/client/ui/IClientMarkerBridge';
|
|
6
11
|
export * from '../../../adapters/contracts/client/ui/IClientNotificationBridge';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ClientCameraCreateOptions, type ClientCameraRotation, type ClientCameraRenderOptions, type ClientCameraShakeOptions, type ClientCameraTransform, IClientCameraPort } from '../../../adapters/contracts/client/camera/IClientCameraPort';
|
|
2
|
+
import type { Vector3 } from '../../../kernel/utils/vector3';
|
|
3
|
+
export declare class NodeClientCameraPort extends IClientCameraPort {
|
|
4
|
+
create(_options?: ClientCameraCreateOptions): number;
|
|
5
|
+
setActive(_camera: number, _active: boolean): void;
|
|
6
|
+
render(_enable: boolean, _options?: ClientCameraRenderOptions): void;
|
|
7
|
+
destroy(_camera: number, _destroyActiveCamera?: boolean): void;
|
|
8
|
+
destroyAll(_destroyActiveCamera?: boolean): void;
|
|
9
|
+
setTransform(_camera: number, _transform: ClientCameraTransform): void;
|
|
10
|
+
setPosition(_camera: number, _position: Vector3): void;
|
|
11
|
+
setRotation(_camera: number, _rotation: ClientCameraRotation, _rotationOrder?: number): void;
|
|
12
|
+
setFov(_camera: number, _fov: number): void;
|
|
13
|
+
pointAtCoords(_camera: number, _position: Vector3): void;
|
|
14
|
+
pointAtEntity(_camera: number, _entity: number, _offset?: Vector3): void;
|
|
15
|
+
stopPointing(_camera: number): void;
|
|
16
|
+
interpolate(_fromCamera: number, _toCamera: number, _durationMs: number, _easeLocation?: boolean, _easeRotation?: boolean): void;
|
|
17
|
+
shake(_camera: number, _options: ClientCameraShakeOptions): void;
|
|
18
|
+
stopShaking(_camera: number, _stopImmediately?: boolean): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable } from 'tsyringe';
|
|
8
|
+
import { IClientCameraPort, } from '../../../adapters/contracts/client/camera/IClientCameraPort';
|
|
9
|
+
let NodeClientCameraPort = class NodeClientCameraPort extends IClientCameraPort {
|
|
10
|
+
create(_options) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
setActive(_camera, _active) { }
|
|
14
|
+
render(_enable, _options) { }
|
|
15
|
+
destroy(_camera, _destroyActiveCamera) { }
|
|
16
|
+
destroyAll(_destroyActiveCamera) { }
|
|
17
|
+
setTransform(_camera, _transform) { }
|
|
18
|
+
setPosition(_camera, _position) { }
|
|
19
|
+
setRotation(_camera, _rotation, _rotationOrder) { }
|
|
20
|
+
setFov(_camera, _fov) { }
|
|
21
|
+
pointAtCoords(_camera, _position) { }
|
|
22
|
+
pointAtEntity(_camera, _entity, _offset) { }
|
|
23
|
+
stopPointing(_camera) { }
|
|
24
|
+
interpolate(_fromCamera, _toCamera, _durationMs, _easeLocation, _easeRotation) { }
|
|
25
|
+
shake(_camera, _options) { }
|
|
26
|
+
stopShaking(_camera, _stopImmediately) { }
|
|
27
|
+
};
|
|
28
|
+
NodeClientCameraPort = __decorate([
|
|
29
|
+
injectable()
|
|
30
|
+
], NodeClientCameraPort);
|
|
31
|
+
export { NodeClientCameraPort };
|