@open-core/framework 0.1.0-alpha.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/LICENSE +373 -0
- package/README.md +360 -0
- package/dist/client/client-bootstrap.d.ts +1 -0
- package/dist/client/client-bootstrap.js +50 -0
- package/dist/client/client-container.d.ts +2 -0
- package/dist/client/client-container.js +6 -0
- package/dist/client/client-core.d.ts +1 -0
- package/dist/client/client-core.js +7 -0
- package/dist/client/controllers/spawner.controller.d.ts +12 -0
- package/dist/client/controllers/spawner.controller.js +51 -0
- package/dist/client/decorators/controller.d.ts +3 -0
- package/dist/client/decorators/controller.js +14 -0
- package/dist/client/decorators/export.d.ts +7 -0
- package/dist/client/decorators/export.js +15 -0
- package/dist/client/decorators/gameEvent.d.ts +47 -0
- package/dist/client/decorators/gameEvent.js +54 -0
- package/dist/client/decorators/index.d.ts +10 -0
- package/dist/client/decorators/index.js +26 -0
- package/dist/client/decorators/interval.d.ts +7 -0
- package/dist/client/decorators/interval.js +15 -0
- package/dist/client/decorators/key.d.ts +2 -0
- package/dist/client/decorators/key.js +10 -0
- package/dist/client/decorators/localEvent.d.ts +7 -0
- package/dist/client/decorators/localEvent.js +15 -0
- package/dist/client/decorators/nui.d.ts +1 -0
- package/dist/client/decorators/nui.js +9 -0
- package/dist/client/decorators/onNet.d.ts +1 -0
- package/dist/client/decorators/onNet.js +9 -0
- package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
- package/dist/client/decorators/resourceLifecycle.js +24 -0
- package/dist/client/decorators/tick.d.ts +1 -0
- package/dist/client/decorators/tick.js +9 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +23 -0
- package/dist/client/interfaces/appearance.interface.d.ts +19 -0
- package/dist/client/interfaces/appearance.interface.js +2 -0
- package/dist/client/player/player.d.ts +262 -0
- package/dist/client/player/player.js +480 -0
- package/dist/client/player/player.loader.d.ts +1 -0
- package/dist/client/player/player.loader.js +22 -0
- package/dist/client/services/appearance.service.d.ts +6 -0
- package/dist/client/services/appearance.service.js +89 -0
- package/dist/client/services/blip.service.d.ts +112 -0
- package/dist/client/services/blip.service.js +215 -0
- package/dist/client/services/index.d.ts +9 -0
- package/dist/client/services/index.js +25 -0
- package/dist/client/services/marker.service.d.ts +94 -0
- package/dist/client/services/marker.service.js +153 -0
- package/dist/client/services/notification.service.d.ts +76 -0
- package/dist/client/services/notification.service.js +111 -0
- package/dist/client/services/ped.service.d.ts +182 -0
- package/dist/client/services/ped.service.js +302 -0
- package/dist/client/services/progress.service.d.ts +82 -0
- package/dist/client/services/progress.service.js +210 -0
- package/dist/client/services/spawn.service.d.ts +73 -0
- package/dist/client/services/spawn.service.js +261 -0
- package/dist/client/services/streaming.service.d.ts +165 -0
- package/dist/client/services/streaming.service.js +341 -0
- package/dist/client/services/textui.service.d.ts +82 -0
- package/dist/client/services/textui.service.js +156 -0
- package/dist/client/services/vehicle.service.d.ts +168 -0
- package/dist/client/services/vehicle.service.js +296 -0
- package/dist/client/system/metadata-client.keys.d.ts +13 -0
- package/dist/client/system/metadata-client.keys.js +16 -0
- package/dist/client/system/processors/export.processor.d.ts +7 -0
- package/dist/client/system/processors/export.processor.js +39 -0
- package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
- package/dist/client/system/processors/gameEvent.processor.js +58 -0
- package/dist/client/system/processors/interval.processor.d.ts +7 -0
- package/dist/client/system/processors/interval.processor.js +43 -0
- package/dist/client/system/processors/key.processor.d.ts +8 -0
- package/dist/client/system/processors/key.processor.js +27 -0
- package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/localEvent.processor.js +38 -0
- package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
- package/dist/client/system/processors/netEvent.processor.js +38 -0
- package/dist/client/system/processors/nui.processor.d.ts +7 -0
- package/dist/client/system/processors/nui.processor.js +40 -0
- package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
- package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
- package/dist/client/system/processors/tick.processor.d.ts +5 -0
- package/dist/client/system/processors/tick.processor.js +37 -0
- package/dist/client/system/processors.register.d.ts +1 -0
- package/dist/client/system/processors.register.js +27 -0
- package/dist/client/types/game-events.d.ts +126 -0
- package/dist/client/types/game-events.js +83 -0
- package/dist/client/types/index.d.ts +1 -0
- package/dist/client/types/index.js +17 -0
- package/dist/client/ui-bridge.d.ts +116 -0
- package/dist/client/ui-bridge.js +201 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +41 -0
- package/dist/server/bootstrap.d.ts +16 -0
- package/dist/server/bootstrap.js +57 -0
- package/dist/server/bus/core-event-bus.d.ts +6 -0
- package/dist/server/bus/core-event-bus.js +31 -0
- package/dist/server/configs/api.config.d.ts +71 -0
- package/dist/server/configs/api.config.js +81 -0
- package/dist/server/configs/config.base.d.ts +63 -0
- package/dist/server/configs/config.base.js +64 -0
- package/dist/server/configs/index.d.ts +2 -0
- package/dist/server/configs/index.js +18 -0
- package/dist/server/container.d.ts +2 -0
- package/dist/server/container.js +6 -0
- package/dist/server/controllers/chat.controller.d.ts +10 -0
- package/dist/server/controllers/chat.controller.js +50 -0
- package/dist/server/controllers/command.controller.d.ts +7 -0
- package/dist/server/controllers/command.controller.js +47 -0
- package/dist/server/controllers/session.controller.d.ts +9 -0
- package/dist/server/controllers/session.controller.js +70 -0
- package/dist/server/core.d.ts +1 -0
- package/dist/server/core.js +7 -0
- package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
- package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
- package/dist/server/database/database.contract.d.ts +128 -0
- package/dist/server/database/database.contract.js +29 -0
- package/dist/server/database/database.service.d.ts +216 -0
- package/dist/server/database/database.service.js +301 -0
- package/dist/server/database/index.d.ts +53 -0
- package/dist/server/database/index.js +70 -0
- package/dist/server/database/types.d.ts +67 -0
- package/dist/server/database/types.js +7 -0
- package/dist/server/database.d.ts +7 -0
- package/dist/server/database.js +23 -0
- package/dist/server/decorators/bind.d.ts +2 -0
- package/dist/server/decorators/bind.js +15 -0
- package/dist/server/decorators/command.d.ts +49 -0
- package/dist/server/decorators/command.js +23 -0
- package/dist/server/decorators/controller.d.ts +25 -0
- package/dist/server/decorators/controller.js +36 -0
- package/dist/server/decorators/export.d.ts +39 -0
- package/dist/server/decorators/export.js +47 -0
- package/dist/server/decorators/guard.d.ts +56 -0
- package/dist/server/decorators/guard.js +82 -0
- package/dist/server/decorators/index.d.ts +10 -0
- package/dist/server/decorators/index.js +29 -0
- package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
- package/dist/server/decorators/onFiveMEvent.js +14 -0
- package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
- package/dist/server/decorators/onFrameworkEvent.js +29 -0
- package/dist/server/decorators/onNet.d.ts +58 -0
- package/dist/server/decorators/onNet.js +57 -0
- package/dist/server/decorators/onTick.d.ts +32 -0
- package/dist/server/decorators/onTick.js +40 -0
- package/dist/server/decorators/public.d.ts +27 -0
- package/dist/server/decorators/public.js +36 -0
- package/dist/server/decorators/requiresState.d.ts +56 -0
- package/dist/server/decorators/requiresState.js +63 -0
- package/dist/server/decorators/throttle.d.ts +48 -0
- package/dist/server/decorators/throttle.js +63 -0
- package/dist/server/decorators/utils.d.ts +57 -0
- package/dist/server/decorators/utils.js +63 -0
- package/dist/server/entities/index.d.ts +1 -0
- package/dist/server/entities/index.js +17 -0
- package/dist/server/entities/player.d.ts +157 -0
- package/dist/server/entities/player.js +217 -0
- package/dist/server/error-handler.d.ts +2 -0
- package/dist/server/error-handler.js +43 -0
- package/dist/server/helpers/resolve-method.d.ts +5 -0
- package/dist/server/helpers/resolve-method.js +18 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +31 -0
- package/dist/server/loaders/exports.loader.d.ts +0 -0
- package/dist/server/loaders/exports.loader.js +23 -0
- package/dist/server/loaders/playerSession.loader.d.ts +1 -0
- package/dist/server/loaders/playerSession.loader.js +51 -0
- package/dist/server/services/access-control.service.d.ts +56 -0
- package/dist/server/services/access-control.service.js +99 -0
- package/dist/server/services/chat.service.d.ts +7 -0
- package/dist/server/services/chat.service.js +31 -0
- package/dist/server/services/command.service.d.ts +15 -0
- package/dist/server/services/command.service.js +77 -0
- package/dist/server/services/config.service.d.ts +75 -0
- package/dist/server/services/config.service.js +116 -0
- package/dist/server/services/default/default-security.handler.d.ts +6 -0
- package/dist/server/services/default/default-security.handler.js +26 -0
- package/dist/server/services/http/http.service.d.ts +50 -0
- package/dist/server/services/http/http.service.js +126 -0
- package/dist/server/services/index.d.ts +10 -0
- package/dist/server/services/index.js +26 -0
- package/dist/server/services/parallel/index.d.ts +49 -0
- package/dist/server/services/parallel/index.js +67 -0
- package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
- package/dist/server/services/parallel/parallel-compute.service.js +449 -0
- package/dist/server/services/parallel/types.d.ts +188 -0
- package/dist/server/services/parallel/types.js +7 -0
- package/dist/server/services/parallel/worker-pool.d.ts +83 -0
- package/dist/server/services/parallel/worker-pool.js +350 -0
- package/dist/server/services/parallel/worker.d.ts +19 -0
- package/dist/server/services/parallel/worker.js +49 -0
- package/dist/server/services/persistence.service.d.ts +59 -0
- package/dist/server/services/persistence.service.js +166 -0
- package/dist/server/services/player.service.d.ts +96 -0
- package/dist/server/services/player.service.js +132 -0
- package/dist/server/services/rate-limiter.service.d.ts +5 -0
- package/dist/server/services/rate-limiter.service.js +39 -0
- package/dist/server/services/registers.d.ts +1 -0
- package/dist/server/services/registers.js +18 -0
- package/dist/server/setup.d.ts +9 -0
- package/dist/server/setup.js +28 -0
- package/dist/server/system/metadata-server.keys.d.ts +10 -0
- package/dist/server/system/metadata-server.keys.js +13 -0
- package/dist/server/system/processors/command.processor.d.ts +9 -0
- package/dist/server/system/processors/command.processor.js +30 -0
- package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/coreEvent.processor.js +41 -0
- package/dist/server/system/processors/export.processor.d.ts +7 -0
- package/dist/server/system/processors/export.processor.js +30 -0
- package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
- package/dist/server/system/processors/fivemEvent.processor.js +40 -0
- package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
- package/dist/server/system/processors/netEvent.processor.js +103 -0
- package/dist/server/system/processors/tick.processor.d.ts +5 -0
- package/dist/server/system/processors/tick.processor.js +36 -0
- package/dist/server/system/processors.register.d.ts +1 -0
- package/dist/server/system/processors.register.js +23 -0
- package/dist/server/system/schema-generator.d.ts +2 -0
- package/dist/server/system/schema-generator.js +34 -0
- package/dist/server/templates/admin/admin.controller-template.d.ts +12 -0
- package/dist/server/templates/admin/admin.controller-template.js +2 -0
- package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
- package/dist/server/templates/auth/auth-provider.contract.js +23 -0
- package/dist/server/templates/index.d.ts +8 -0
- package/dist/server/templates/index.js +21 -0
- package/dist/server/templates/persistence/index.d.ts +30 -0
- package/dist/server/templates/persistence/index.js +34 -0
- package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
- package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
- package/dist/server/templates/repository/index.d.ts +57 -0
- package/dist/server/templates/repository/index.js +61 -0
- package/dist/server/templates/repository/repository.contract.d.ts +224 -0
- package/dist/server/templates/repository/repository.contract.js +342 -0
- package/dist/server/templates/repository/repository.types.d.ts +51 -0
- package/dist/server/templates/repository/repository.types.js +7 -0
- package/dist/server/templates/security/permission.types.d.ts +32 -0
- package/dist/server/templates/security/permission.types.js +2 -0
- package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
- package/dist/server/templates/security/principal-provider.contract.js +19 -0
- package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
- package/dist/server/templates/security/security-handler.contract.js +6 -0
- package/dist/server/types/core-events.d.ts +22 -0
- package/dist/server/types/core-events.js +2 -0
- package/dist/server/types/security.types.d.ts +7 -0
- package/dist/server/types/security.types.js +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +17 -0
- package/dist/shared/logger/core-logger.d.ts +35 -0
- package/dist/shared/logger/core-logger.js +52 -0
- package/dist/shared/logger/index.d.ts +11 -0
- package/dist/shared/logger/index.js +26 -0
- package/dist/shared/logger/logger.config.d.ts +47 -0
- package/dist/shared/logger/logger.config.js +33 -0
- package/dist/shared/logger/logger.service.d.ts +161 -0
- package/dist/shared/logger/logger.service.js +279 -0
- package/dist/shared/logger/logger.types.d.ts +85 -0
- package/dist/shared/logger/logger.types.js +74 -0
- package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
- package/dist/shared/logger/transports/buffered.transport.js +174 -0
- package/dist/shared/logger/transports/console.transport.d.ts +37 -0
- package/dist/shared/logger/transports/console.transport.js +134 -0
- package/dist/shared/logger/transports/index.d.ts +3 -0
- package/dist/shared/logger/transports/index.js +19 -0
- package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
- package/dist/shared/logger/transports/transport.interface.js +2 -0
- package/dist/system/class-constructor.d.ts +1 -0
- package/dist/system/class-constructor.js +2 -0
- package/dist/system/decorator-processor.d.ts +4 -0
- package/dist/system/decorator-processor.js +2 -0
- package/dist/system/metadata.scanner.d.ts +7 -0
- package/dist/system/metadata.scanner.js +45 -0
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.js +25 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/result.d.ts +12 -0
- package/dist/utils/result.js +10 -0
- package/dist/utils/rgb.d.ts +5 -0
- package/dist/utils/rgb.js +2 -0
- package/dist/utils/vector3.d.ts +13 -0
- package/dist/utils/vector3.js +27 -0
- package/package.json +98 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Game Events - Native GTA V internal events captured by FiveM
|
|
4
|
+
*
|
|
5
|
+
* Documentation: https://docs.fivem.net/docs/game-references/game-events/
|
|
6
|
+
*
|
|
7
|
+
* These are low-level events from the RAGE engine. The arguments are
|
|
8
|
+
* passed as arrays from the native layer.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.GameEventParsers = void 0;
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
// Event Parsers - Convert raw args to typed objects
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
exports.GameEventParsers = {
|
|
16
|
+
/**
|
|
17
|
+
* Parse CEventNetworkEntityDamage arguments
|
|
18
|
+
*/
|
|
19
|
+
parseEntityDamage(args) {
|
|
20
|
+
return {
|
|
21
|
+
victim: args[0],
|
|
22
|
+
attacker: args[1],
|
|
23
|
+
arg2: args[2],
|
|
24
|
+
arg3: args[3],
|
|
25
|
+
arg4: args[4],
|
|
26
|
+
victimDied: args[5] === 1,
|
|
27
|
+
weaponHash: args[6],
|
|
28
|
+
arg7: args[7],
|
|
29
|
+
arg8: args[8],
|
|
30
|
+
arg9: args[9],
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* Parse CEventNetworkPlayerEnteredVehicle arguments
|
|
35
|
+
*/
|
|
36
|
+
parsePlayerEnteredVehicle(args) {
|
|
37
|
+
return {
|
|
38
|
+
player: args[0],
|
|
39
|
+
vehicle: args[1],
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
/**
|
|
43
|
+
* Parse CEventNetworkPlayerLeftVehicle arguments
|
|
44
|
+
*/
|
|
45
|
+
parsePlayerLeftVehicle(args) {
|
|
46
|
+
return {
|
|
47
|
+
player: args[0],
|
|
48
|
+
vehicle: args[1],
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* Parse CEventShockingSeenPedKilled arguments
|
|
53
|
+
*/
|
|
54
|
+
parseSeenPedKilled(args) {
|
|
55
|
+
return {
|
|
56
|
+
witness: args[0],
|
|
57
|
+
victim: args[1],
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* Parse CEventNetworkVehicleUndrivable arguments
|
|
62
|
+
*/
|
|
63
|
+
parseVehicleUndrivable(args) {
|
|
64
|
+
return {
|
|
65
|
+
vehicle: args[0],
|
|
66
|
+
attacker: args[1],
|
|
67
|
+
weaponHash: args[2],
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
/**
|
|
71
|
+
* Parse CEventGunShot arguments
|
|
72
|
+
*/
|
|
73
|
+
parseGunShot(args) {
|
|
74
|
+
return {
|
|
75
|
+
shooter: args[0],
|
|
76
|
+
coords: {
|
|
77
|
+
x: args[1],
|
|
78
|
+
y: args[2],
|
|
79
|
+
z: args[3],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './game-events';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./game-events"), exports);
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe NUI (Native UI) Bridge for client-server communication.
|
|
3
|
+
*
|
|
4
|
+
* Generic types allow for full type safety when sending/receiving messages.
|
|
5
|
+
* Define your event maps and pass them as type parameters.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* interface ClientToUI {
|
|
10
|
+
* 'showMenu': { items: string[] }
|
|
11
|
+
* 'hideMenu': void
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* interface UIToClient {
|
|
15
|
+
* 'menuItemSelected': { index: number }
|
|
16
|
+
* 'menuClosed': void
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* const nui = new NuiBridge<ClientToUI, UIToClient>()
|
|
20
|
+
* nui.send('showMenu', { items: ['Option 1', 'Option 2'] })
|
|
21
|
+
* nui.on('menuItemSelected', async (data) => console.log(data.index))
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class NuiBridge<TSend extends Record<string, any> = Record<string, any>, TReceive extends Record<string, any> = Record<string, any>> {
|
|
25
|
+
private _isVisible;
|
|
26
|
+
private _hasFocus;
|
|
27
|
+
private _hasCursor;
|
|
28
|
+
/**
|
|
29
|
+
* Whether the NUI frame is currently visible
|
|
30
|
+
*/
|
|
31
|
+
get isVisible(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Whether the NUI has input focus
|
|
34
|
+
*/
|
|
35
|
+
get hasFocus(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether the cursor is visible
|
|
38
|
+
*/
|
|
39
|
+
get hasCursor(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Send a message to the NUI (UI frame).
|
|
42
|
+
*
|
|
43
|
+
* @param action - The action/event name
|
|
44
|
+
* @param data - The data payload
|
|
45
|
+
*/
|
|
46
|
+
send<K extends keyof TSend & string>(action: K, data: TSend[K]): void;
|
|
47
|
+
/**
|
|
48
|
+
* Send a raw message to the NUI without type checking.
|
|
49
|
+
*
|
|
50
|
+
* @param action - The action/event name
|
|
51
|
+
* @param data - The data payload
|
|
52
|
+
*/
|
|
53
|
+
sendRaw(action: string, data: any): void;
|
|
54
|
+
/**
|
|
55
|
+
* Register a callback for NUI events from the UI.
|
|
56
|
+
*
|
|
57
|
+
* @param action - The action/event name to listen for
|
|
58
|
+
* @param handler - The callback handler
|
|
59
|
+
* @returns Cleanup function to unregister the callback
|
|
60
|
+
*/
|
|
61
|
+
on<K extends keyof TReceive & string>(action: K, handler: (data: TReceive[K]) => void | Promise<void>): void;
|
|
62
|
+
/**
|
|
63
|
+
* Register a callback that expects a return value.
|
|
64
|
+
*
|
|
65
|
+
* @param action - The action/event name to listen for
|
|
66
|
+
* @param handler - The callback handler that returns data
|
|
67
|
+
*/
|
|
68
|
+
onWithResponse<K extends keyof TReceive & string, R = any>(action: K, handler: (data: TReceive[K]) => R | Promise<R>): void;
|
|
69
|
+
/**
|
|
70
|
+
* Set NUI focus state.
|
|
71
|
+
*
|
|
72
|
+
* @param hasFocus - Whether the NUI should have input focus
|
|
73
|
+
* @param hasCursor - Whether to show the cursor (defaults to hasFocus value)
|
|
74
|
+
*/
|
|
75
|
+
focus(hasFocus: boolean, hasCursor?: boolean): void;
|
|
76
|
+
/**
|
|
77
|
+
* Remove NUI focus (convenience method).
|
|
78
|
+
*/
|
|
79
|
+
blur(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Set NUI visibility state.
|
|
82
|
+
* Note: This only tracks state, you need to handle actual visibility in your UI.
|
|
83
|
+
*
|
|
84
|
+
* @param visible - Whether the NUI should be visible
|
|
85
|
+
*/
|
|
86
|
+
setVisible(visible: boolean): void;
|
|
87
|
+
/**
|
|
88
|
+
* Show the NUI and optionally set focus.
|
|
89
|
+
*
|
|
90
|
+
* @param withFocus - Whether to also set focus
|
|
91
|
+
* @param withCursor - Whether to show cursor (defaults to withFocus)
|
|
92
|
+
*/
|
|
93
|
+
show(withFocus?: boolean, withCursor?: boolean): void;
|
|
94
|
+
/**
|
|
95
|
+
* Hide the NUI and remove focus.
|
|
96
|
+
*/
|
|
97
|
+
hide(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Toggle NUI visibility.
|
|
100
|
+
*
|
|
101
|
+
* @param withFocus - Whether to set focus when showing
|
|
102
|
+
*/
|
|
103
|
+
toggle(withFocus?: boolean): void;
|
|
104
|
+
/**
|
|
105
|
+
* Keep input focus but allow game input.
|
|
106
|
+
* Useful for HUDs that need to capture some keys but not all.
|
|
107
|
+
*
|
|
108
|
+
* @param keepInput - Whether to keep game input enabled
|
|
109
|
+
*/
|
|
110
|
+
setKeepInput(keepInput: boolean): void;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Default untyped NUI instance for quick usage.
|
|
114
|
+
* For type-safe usage, create your own instance with proper generics.
|
|
115
|
+
*/
|
|
116
|
+
export declare const NUI: NuiBridge<Record<string, any>, Record<string, any>>;
|
|
@@ -0,0 +1,201 @@
|
|
|
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.NUI = exports.NuiBridge = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const logger_1 = require("../shared/logger");
|
|
12
|
+
const nuiLogger = logger_1.coreLogger.child('NUI', logger_1.LogDomain.CLIENT);
|
|
13
|
+
/**
|
|
14
|
+
* Type-safe NUI (Native UI) Bridge for client-server communication.
|
|
15
|
+
*
|
|
16
|
+
* Generic types allow for full type safety when sending/receiving messages.
|
|
17
|
+
* Define your event maps and pass them as type parameters.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* interface ClientToUI {
|
|
22
|
+
* 'showMenu': { items: string[] }
|
|
23
|
+
* 'hideMenu': void
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* interface UIToClient {
|
|
27
|
+
* 'menuItemSelected': { index: number }
|
|
28
|
+
* 'menuClosed': void
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* const nui = new NuiBridge<ClientToUI, UIToClient>()
|
|
32
|
+
* nui.send('showMenu', { items: ['Option 1', 'Option 2'] })
|
|
33
|
+
* nui.on('menuItemSelected', async (data) => console.log(data.index))
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
let NuiBridge = class NuiBridge {
|
|
37
|
+
constructor() {
|
|
38
|
+
this._isVisible = false;
|
|
39
|
+
this._hasFocus = false;
|
|
40
|
+
this._hasCursor = false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Whether the NUI frame is currently visible
|
|
44
|
+
*/
|
|
45
|
+
get isVisible() {
|
|
46
|
+
return this._isVisible;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Whether the NUI has input focus
|
|
50
|
+
*/
|
|
51
|
+
get hasFocus() {
|
|
52
|
+
return this._hasFocus;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Whether the cursor is visible
|
|
56
|
+
*/
|
|
57
|
+
get hasCursor() {
|
|
58
|
+
return this._hasCursor;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Send a message to the NUI (UI frame).
|
|
62
|
+
*
|
|
63
|
+
* @param action - The action/event name
|
|
64
|
+
* @param data - The data payload
|
|
65
|
+
*/
|
|
66
|
+
send(action, data) {
|
|
67
|
+
SendNuiMessage(JSON.stringify({ action, data }));
|
|
68
|
+
nuiLogger.debug(`Sent message: ${action}`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Send a raw message to the NUI without type checking.
|
|
72
|
+
*
|
|
73
|
+
* @param action - The action/event name
|
|
74
|
+
* @param data - The data payload
|
|
75
|
+
*/
|
|
76
|
+
sendRaw(action, data) {
|
|
77
|
+
SendNuiMessage(JSON.stringify({ action, data }));
|
|
78
|
+
nuiLogger.debug(`Sent raw message: ${action}`);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Register a callback for NUI events from the UI.
|
|
82
|
+
*
|
|
83
|
+
* @param action - The action/event name to listen for
|
|
84
|
+
* @param handler - The callback handler
|
|
85
|
+
* @returns Cleanup function to unregister the callback
|
|
86
|
+
*/
|
|
87
|
+
on(action, handler) {
|
|
88
|
+
RegisterNuiCallbackType(action);
|
|
89
|
+
on(`__cfx_nui:${action}`, async (data, cb) => {
|
|
90
|
+
try {
|
|
91
|
+
await handler(data);
|
|
92
|
+
cb({ ok: true });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
nuiLogger.error(`NUI callback error`, { action }, error);
|
|
96
|
+
cb({ ok: false, error: String(error) });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
nuiLogger.debug(`Registered callback: ${action}`);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Register a callback that expects a return value.
|
|
103
|
+
*
|
|
104
|
+
* @param action - The action/event name to listen for
|
|
105
|
+
* @param handler - The callback handler that returns data
|
|
106
|
+
*/
|
|
107
|
+
onWithResponse(action, handler) {
|
|
108
|
+
RegisterNuiCallbackType(action);
|
|
109
|
+
on(`__cfx_nui:${action}`, async (data, cb) => {
|
|
110
|
+
try {
|
|
111
|
+
const result = await handler(data);
|
|
112
|
+
cb({ ok: true, data: result });
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
nuiLogger.error(`NUI callback error`, { action }, error);
|
|
116
|
+
cb({ ok: false, error: String(error) });
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
nuiLogger.debug(`Registered callback with response: ${action}`);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Set NUI focus state.
|
|
123
|
+
*
|
|
124
|
+
* @param hasFocus - Whether the NUI should have input focus
|
|
125
|
+
* @param hasCursor - Whether to show the cursor (defaults to hasFocus value)
|
|
126
|
+
*/
|
|
127
|
+
focus(hasFocus, hasCursor) {
|
|
128
|
+
this._hasFocus = hasFocus;
|
|
129
|
+
this._hasCursor = hasCursor !== null && hasCursor !== void 0 ? hasCursor : hasFocus;
|
|
130
|
+
SetNuiFocus(this._hasFocus, this._hasCursor);
|
|
131
|
+
nuiLogger.debug(`Focus set: focus=${this._hasFocus}, cursor=${this._hasCursor}`);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Remove NUI focus (convenience method).
|
|
135
|
+
*/
|
|
136
|
+
blur() {
|
|
137
|
+
this.focus(false, false);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Set NUI visibility state.
|
|
141
|
+
* Note: This only tracks state, you need to handle actual visibility in your UI.
|
|
142
|
+
*
|
|
143
|
+
* @param visible - Whether the NUI should be visible
|
|
144
|
+
*/
|
|
145
|
+
setVisible(visible) {
|
|
146
|
+
this._isVisible = visible;
|
|
147
|
+
this.send('setVisible', { visible });
|
|
148
|
+
nuiLogger.debug(`Visibility set: ${visible}`);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Show the NUI and optionally set focus.
|
|
152
|
+
*
|
|
153
|
+
* @param withFocus - Whether to also set focus
|
|
154
|
+
* @param withCursor - Whether to show cursor (defaults to withFocus)
|
|
155
|
+
*/
|
|
156
|
+
show(withFocus = true, withCursor) {
|
|
157
|
+
this.setVisible(true);
|
|
158
|
+
if (withFocus) {
|
|
159
|
+
this.focus(true, withCursor);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Hide the NUI and remove focus.
|
|
164
|
+
*/
|
|
165
|
+
hide() {
|
|
166
|
+
this.setVisible(false);
|
|
167
|
+
this.blur();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Toggle NUI visibility.
|
|
171
|
+
*
|
|
172
|
+
* @param withFocus - Whether to set focus when showing
|
|
173
|
+
*/
|
|
174
|
+
toggle(withFocus = true) {
|
|
175
|
+
if (this._isVisible) {
|
|
176
|
+
this.hide();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.show(withFocus);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Keep input focus but allow game input.
|
|
184
|
+
* Useful for HUDs that need to capture some keys but not all.
|
|
185
|
+
*
|
|
186
|
+
* @param keepInput - Whether to keep game input enabled
|
|
187
|
+
*/
|
|
188
|
+
setKeepInput(keepInput) {
|
|
189
|
+
SetNuiFocusKeepInput(keepInput);
|
|
190
|
+
nuiLogger.debug(`Keep input set: ${keepInput}`);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
exports.NuiBridge = NuiBridge;
|
|
194
|
+
exports.NuiBridge = NuiBridge = __decorate([
|
|
195
|
+
(0, tsyringe_1.injectable)()
|
|
196
|
+
], NuiBridge);
|
|
197
|
+
/**
|
|
198
|
+
* Default untyped NUI instance for quick usage.
|
|
199
|
+
* For type-safe usage, create your own instance with proper generics.
|
|
200
|
+
*/
|
|
201
|
+
exports.NUI = new NuiBridge();
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Client = exports.Server = exports.Shared = exports.Utils = void 0;
|
|
37
|
+
require("reflect-metadata");
|
|
38
|
+
exports.Utils = __importStar(require("./utils"));
|
|
39
|
+
exports.Shared = __importStar(require("./shared"));
|
|
40
|
+
exports.Server = __importStar(require("./server"));
|
|
41
|
+
exports.Client = __importStar(require("./client"));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bootstraps the OpenCore Server Application Context.
|
|
3
|
+
*
|
|
4
|
+
* This is the primary entry point for the server-side framework. It orchestrates the
|
|
5
|
+
* initialization of the Dependency Injection (DI) container and establishes the
|
|
6
|
+
* bridge between the low-level FiveM runtime and the OpenCore architecture.
|
|
7
|
+
*
|
|
8
|
+
* **Initialization Lifecycle:**
|
|
9
|
+
* 1. **Infrastructure Registration:** Registers core infrastructure services (`PlayerService`, `CommandService`, `HttpService`) as Singletons in the IoC container.
|
|
10
|
+
* 2. **Reflection & Discovery:** Scans all decorated classes (Controllers, Services) to extract metadata defined by `@Command`, `@OnNet`, etc.
|
|
11
|
+
* 3. **Runtime Binding:** Binds the discovered metadata to actual FiveM natives (e.g., `RegisterCommand`, `onNet`, `exports`).
|
|
12
|
+
* 4. **Session Management:** Activates the player session tracking system.
|
|
13
|
+
*
|
|
14
|
+
* @returns A promise that resolves when the Core is fully initialized and ready to process events.
|
|
15
|
+
*/
|
|
16
|
+
export declare function initServer(): Promise<void>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initServer = initServer;
|
|
4
|
+
const container_1 = require("./container");
|
|
5
|
+
const playerSession_loader_1 = require("./loaders/playerSession.loader");
|
|
6
|
+
const templates_1 = require("./templates");
|
|
7
|
+
const metadata_scanner_1 = require("../system/metadata.scanner");
|
|
8
|
+
const processors_register_1 = require("./system/processors.register");
|
|
9
|
+
const registers_1 = require("./services/registers");
|
|
10
|
+
const logger_1 = require("../shared/logger");
|
|
11
|
+
const auth_provider_contract_1 = require("./templates/auth/auth-provider.contract");
|
|
12
|
+
const controller_1 = require("./decorators/controller");
|
|
13
|
+
const check = () => {
|
|
14
|
+
if (!container_1.di.isRegistered(templates_1.PrincipalProviderContract)) {
|
|
15
|
+
const errorMsg = 'No Principal Provider configured. ' +
|
|
16
|
+
"Please call 'Server.setPrincipalProvider(YourProvider)' before init(). This is required for authentication and authorization.";
|
|
17
|
+
logger_1.loggers.bootstrap.fatal(errorMsg);
|
|
18
|
+
throw new Error(`[OpenCore] CRITICAL: ${errorMsg}`);
|
|
19
|
+
}
|
|
20
|
+
if (!container_1.di.isRegistered(auth_provider_contract_1.AuthProviderContract)) {
|
|
21
|
+
const errorMsg = 'No Authentication Provider configured. ' +
|
|
22
|
+
"Please call 'Server.setAuthProvider(YourProvider)' before init(). This is required for authentication and authorization.";
|
|
23
|
+
logger_1.loggers.bootstrap.fatal(errorMsg);
|
|
24
|
+
throw new Error(`[OpenCore] CRITICAL: ${errorMsg}`);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Bootstraps the OpenCore Server Application Context.
|
|
29
|
+
*
|
|
30
|
+
* This is the primary entry point for the server-side framework. It orchestrates the
|
|
31
|
+
* initialization of the Dependency Injection (DI) container and establishes the
|
|
32
|
+
* bridge between the low-level FiveM runtime and the OpenCore architecture.
|
|
33
|
+
*
|
|
34
|
+
* **Initialization Lifecycle:**
|
|
35
|
+
* 1. **Infrastructure Registration:** Registers core infrastructure services (`PlayerService`, `CommandService`, `HttpService`) as Singletons in the IoC container.
|
|
36
|
+
* 2. **Reflection & Discovery:** Scans all decorated classes (Controllers, Services) to extract metadata defined by `@Command`, `@OnNet`, etc.
|
|
37
|
+
* 3. **Runtime Binding:** Binds the discovered metadata to actual FiveM natives (e.g., `RegisterCommand`, `onNet`, `exports`).
|
|
38
|
+
* 4. **Session Management:** Activates the player session tracking system.
|
|
39
|
+
*
|
|
40
|
+
* @returns A promise that resolves when the Core is fully initialized and ready to process events.
|
|
41
|
+
*/
|
|
42
|
+
async function initServer() {
|
|
43
|
+
logger_1.loggers.bootstrap.info('Initializing OpenCore Server...');
|
|
44
|
+
check();
|
|
45
|
+
// Register core services
|
|
46
|
+
(0, registers_1.registerServicesServer)();
|
|
47
|
+
logger_1.loggers.bootstrap.debug('Core services registered');
|
|
48
|
+
// Register system processors
|
|
49
|
+
(0, processors_register_1.registerSystemServer)();
|
|
50
|
+
logger_1.loggers.bootstrap.debug('System processors registered');
|
|
51
|
+
// Extras
|
|
52
|
+
(0, playerSession_loader_1.playerSessionLoader)();
|
|
53
|
+
logger_1.loggers.bootstrap.debug('Player session loader active');
|
|
54
|
+
const scanner = container_1.di.resolve(metadata_scanner_1.MetadataScanner);
|
|
55
|
+
scanner.scan(controller_1.serverControllerRegistry);
|
|
56
|
+
logger_1.loggers.bootstrap.info('OpenCore Server initialized successfully');
|
|
57
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CoreEventMap } from '../types/core-events';
|
|
2
|
+
type CoreEventName = keyof CoreEventMap;
|
|
3
|
+
type CoreEventHandler<E extends CoreEventName> = (payload: CoreEventMap[E]) => void;
|
|
4
|
+
export declare function onCoreEvent<E extends CoreEventName>(event: E, handler: CoreEventHandler<E>): () => void;
|
|
5
|
+
export declare function emitCoreEvent<E extends CoreEventName>(event: E, payload: CoreEventMap[E]): void;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.onCoreEvent = onCoreEvent;
|
|
4
|
+
exports.emitCoreEvent = emitCoreEvent;
|
|
5
|
+
const logger_1 = require("../../shared/logger");
|
|
6
|
+
const handlers = {};
|
|
7
|
+
function onCoreEvent(event, handler) {
|
|
8
|
+
var _a;
|
|
9
|
+
const list = ((_a = handlers[event]) !== null && _a !== void 0 ? _a : (handlers[event] = []));
|
|
10
|
+
list.push(handler);
|
|
11
|
+
return () => {
|
|
12
|
+
const index = list.indexOf(handler);
|
|
13
|
+
if (index !== -1)
|
|
14
|
+
list.splice(index, 1);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function emitCoreEvent(event, payload) {
|
|
18
|
+
const list = handlers[event];
|
|
19
|
+
if (!list)
|
|
20
|
+
return;
|
|
21
|
+
for (const handler of list) {
|
|
22
|
+
try {
|
|
23
|
+
handler(payload);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger_1.loggers.eventBus.error(`Handler error for event`, {
|
|
27
|
+
event,
|
|
28
|
+
}, error);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { FluentConfigurator } from './config.base';
|
|
2
|
+
interface ApiConfigState {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
timeoutMs: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Extended configurator interface for API configuration.
|
|
8
|
+
*
|
|
9
|
+
* Extends the base fluent configurator with additional methods
|
|
10
|
+
* specific to API configuration (like addHeader).
|
|
11
|
+
*/
|
|
12
|
+
export interface ApiConfigurator extends FluentConfigurator<ApiConfigState> {
|
|
13
|
+
/**
|
|
14
|
+
* Alias for timeoutMs - sets the timeout in milliseconds.
|
|
15
|
+
* @param ms - Timeout duration in milliseconds.
|
|
16
|
+
*/
|
|
17
|
+
timeout(ms: number): this;
|
|
18
|
+
/**
|
|
19
|
+
* Adds a default header to be included in every API request.
|
|
20
|
+
* @param key - The HTTP header name (e.g., "Authorization").
|
|
21
|
+
* @param value - The header value.
|
|
22
|
+
*/
|
|
23
|
+
addHeader(key: string, value: string): this;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Configuration service for the Core API module.
|
|
27
|
+
*
|
|
28
|
+
* It follows a "Convention over Configuration" approach:
|
|
29
|
+
* 1. By default, it loads values from FiveM Convars (`opencore_api_url`, `opencore_api_timeout`).
|
|
30
|
+
* 2. It can be programmatically overridden using the `configure()` method.
|
|
31
|
+
*
|
|
32
|
+
* @scope Singleton
|
|
33
|
+
*/
|
|
34
|
+
export declare class ApiConfig {
|
|
35
|
+
private state;
|
|
36
|
+
private _headers;
|
|
37
|
+
/**
|
|
38
|
+
* Applies programmatic configuration using a functional builder pattern.
|
|
39
|
+
*
|
|
40
|
+
* This method allows developers to override default settings or inject dynamic configuration
|
|
41
|
+
* logic during the server startup phase.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const apiConfig = di.resolve(ApiConfig);
|
|
46
|
+
* apiConfig.configure(c =>
|
|
47
|
+
* c.baseUrl('https://api.production.com')
|
|
48
|
+
* .timeout(10000)
|
|
49
|
+
* .addHeader('X-API-Key', 'secret')
|
|
50
|
+
* );
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @param configFn - A callback function that receives the configurator instance.
|
|
54
|
+
*/
|
|
55
|
+
configure(configFn: (config: ApiConfigurator) => void): void;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the currently configured Base URL.
|
|
58
|
+
*/
|
|
59
|
+
get baseUrl(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Gets the configured timeout in milliseconds.
|
|
62
|
+
*/
|
|
63
|
+
get timeoutMs(): number;
|
|
64
|
+
/**
|
|
65
|
+
* Gets a copy of the globally configured headers.
|
|
66
|
+
*/
|
|
67
|
+
get headers(): {
|
|
68
|
+
[x: string]: string;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export {};
|