@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,81 @@
|
|
|
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.ApiConfig = void 0;
|
|
10
|
+
const decorators_1 = require("../decorators");
|
|
11
|
+
const config_base_1 = require("./config.base");
|
|
12
|
+
/**
|
|
13
|
+
* Configuration service for the Core API module.
|
|
14
|
+
*
|
|
15
|
+
* It follows a "Convention over Configuration" approach:
|
|
16
|
+
* 1. By default, it loads values from FiveM Convars (`opencore_api_url`, `opencore_api_timeout`).
|
|
17
|
+
* 2. It can be programmatically overridden using the `configure()` method.
|
|
18
|
+
*
|
|
19
|
+
* @scope Singleton
|
|
20
|
+
*/
|
|
21
|
+
let ApiConfig = class ApiConfig {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.state = {
|
|
24
|
+
baseUrl: GetConvar('opencore_api_url', 'http://localhost:3000'),
|
|
25
|
+
timeoutMs: Number(GetConvar('opencore_api_timeout', '5000')),
|
|
26
|
+
};
|
|
27
|
+
this._headers = {};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Applies programmatic configuration using a functional builder pattern.
|
|
31
|
+
*
|
|
32
|
+
* This method allows developers to override default settings or inject dynamic configuration
|
|
33
|
+
* logic during the server startup phase.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const apiConfig = di.resolve(ApiConfig);
|
|
38
|
+
* apiConfig.configure(c =>
|
|
39
|
+
* c.baseUrl('https://api.production.com')
|
|
40
|
+
* .timeout(10000)
|
|
41
|
+
* .addHeader('X-API-Key', 'secret')
|
|
42
|
+
* );
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @param configFn - A callback function that receives the configurator instance.
|
|
46
|
+
*/
|
|
47
|
+
configure(configFn) {
|
|
48
|
+
const baseConfigurator = (0, config_base_1.createFluentConfigurator)(this.state);
|
|
49
|
+
// Extend with custom methods
|
|
50
|
+
const configurator = Object.assign(Object.assign({}, baseConfigurator), { timeout: (ms) => {
|
|
51
|
+
this.state.timeoutMs = ms;
|
|
52
|
+
return configurator;
|
|
53
|
+
}, addHeader: (key, value) => {
|
|
54
|
+
this._headers[key] = value;
|
|
55
|
+
return configurator;
|
|
56
|
+
} });
|
|
57
|
+
configFn(configurator);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets the currently configured Base URL.
|
|
61
|
+
*/
|
|
62
|
+
get baseUrl() {
|
|
63
|
+
return this.state.baseUrl;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Gets the configured timeout in milliseconds.
|
|
67
|
+
*/
|
|
68
|
+
get timeoutMs() {
|
|
69
|
+
return this.state.timeoutMs;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Gets a copy of the globally configured headers.
|
|
73
|
+
*/
|
|
74
|
+
get headers() {
|
|
75
|
+
return Object.assign({}, this._headers);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
exports.ApiConfig = ApiConfig;
|
|
79
|
+
exports.ApiConfig = ApiConfig = __decorate([
|
|
80
|
+
(0, decorators_1.Bind)('singleton')
|
|
81
|
+
], ApiConfig);
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent Configuration Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for creating Spring Boot-style fluent configuration APIs.
|
|
5
|
+
* This enables method chaining for cleaner configuration syntax.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* interface MyConfigState {
|
|
10
|
+
* host: string
|
|
11
|
+
* port: number
|
|
12
|
+
* enabled: boolean
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* const state: MyConfigState = { host: 'localhost', port: 3000, enabled: true }
|
|
16
|
+
* const configurator = createFluentConfigurator(state)
|
|
17
|
+
*
|
|
18
|
+
* configurator
|
|
19
|
+
* .host('api.example.com')
|
|
20
|
+
* .port(8080)
|
|
21
|
+
* .enabled(false)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Type that transforms a state object into a fluent configurator interface.
|
|
26
|
+
*
|
|
27
|
+
* Each property becomes a method that:
|
|
28
|
+
* - Accepts a value of the same type as the original property
|
|
29
|
+
* - Returns the configurator for method chaining
|
|
30
|
+
*
|
|
31
|
+
* @template T - The state object type
|
|
32
|
+
*/
|
|
33
|
+
export type FluentConfigurator<T> = {
|
|
34
|
+
[K in keyof T]: (value: T[K]) => FluentConfigurator<T>;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Creates a fluent configurator from a state object.
|
|
38
|
+
*
|
|
39
|
+
* The configurator allows method chaining to set values on the state object.
|
|
40
|
+
* Each property of the state becomes a method on the configurator.
|
|
41
|
+
*
|
|
42
|
+
* @template T - The state object type
|
|
43
|
+
* @param state - The state object to configure (will be mutated)
|
|
44
|
+
* @returns A fluent configurator with chainable methods
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* interface ApiState {
|
|
49
|
+
* baseUrl: string
|
|
50
|
+
* timeout: number
|
|
51
|
+
* }
|
|
52
|
+
*
|
|
53
|
+
* const state: ApiState = { baseUrl: '', timeout: 5000 }
|
|
54
|
+
*
|
|
55
|
+
* createFluentConfigurator(state)
|
|
56
|
+
* .baseUrl('https://api.example.com')
|
|
57
|
+
* .timeout(10000)
|
|
58
|
+
*
|
|
59
|
+
* console.log(state.baseUrl) // 'https://api.example.com'
|
|
60
|
+
* console.log(state.timeout) // 10000
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function createFluentConfigurator<T extends object>(state: T): FluentConfigurator<T>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fluent Configuration Utilities
|
|
4
|
+
*
|
|
5
|
+
* Provides utilities for creating Spring Boot-style fluent configuration APIs.
|
|
6
|
+
* This enables method chaining for cleaner configuration syntax.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* interface MyConfigState {
|
|
11
|
+
* host: string
|
|
12
|
+
* port: number
|
|
13
|
+
* enabled: boolean
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* const state: MyConfigState = { host: 'localhost', port: 3000, enabled: true }
|
|
17
|
+
* const configurator = createFluentConfigurator(state)
|
|
18
|
+
*
|
|
19
|
+
* configurator
|
|
20
|
+
* .host('api.example.com')
|
|
21
|
+
* .port(8080)
|
|
22
|
+
* .enabled(false)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createFluentConfigurator = createFluentConfigurator;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a fluent configurator from a state object.
|
|
29
|
+
*
|
|
30
|
+
* The configurator allows method chaining to set values on the state object.
|
|
31
|
+
* Each property of the state becomes a method on the configurator.
|
|
32
|
+
*
|
|
33
|
+
* @template T - The state object type
|
|
34
|
+
* @param state - The state object to configure (will be mutated)
|
|
35
|
+
* @returns A fluent configurator with chainable methods
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* interface ApiState {
|
|
40
|
+
* baseUrl: string
|
|
41
|
+
* timeout: number
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* const state: ApiState = { baseUrl: '', timeout: 5000 }
|
|
45
|
+
*
|
|
46
|
+
* createFluentConfigurator(state)
|
|
47
|
+
* .baseUrl('https://api.example.com')
|
|
48
|
+
* .timeout(10000)
|
|
49
|
+
*
|
|
50
|
+
* console.log(state.baseUrl) // 'https://api.example.com'
|
|
51
|
+
* console.log(state.timeout) // 10000
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function createFluentConfigurator(state) {
|
|
55
|
+
const configurator = {};
|
|
56
|
+
for (const key of Object.keys(state)) {
|
|
57
|
+
;
|
|
58
|
+
configurator[key] = (value) => {
|
|
59
|
+
state[key] = value;
|
|
60
|
+
return configurator;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return configurator;
|
|
64
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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("./api.config"), exports);
|
|
18
|
+
__exportStar(require("./config.base"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RGB } from '../../utils';
|
|
2
|
+
import { PlayerService } from '../services';
|
|
3
|
+
import { ChatService } from '../services/chat.service';
|
|
4
|
+
export declare class ChatController {
|
|
5
|
+
private readonly chatService;
|
|
6
|
+
private readonly playerService;
|
|
7
|
+
constructor(chatService: ChatService, playerService: PlayerService);
|
|
8
|
+
apiBroadcast(message: string, author?: string, color?: RGB): void;
|
|
9
|
+
apiSendPrivate(targetId: number, message: string, author?: string): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ChatController = void 0;
|
|
13
|
+
const controller_1 = require("../decorators/controller");
|
|
14
|
+
const export_1 = require("../decorators/export");
|
|
15
|
+
const services_1 = require("../services");
|
|
16
|
+
const chat_service_1 = require("../services/chat.service");
|
|
17
|
+
let ChatController = class ChatController {
|
|
18
|
+
constructor(chatService, playerService) {
|
|
19
|
+
this.chatService = chatService;
|
|
20
|
+
this.playerService = playerService;
|
|
21
|
+
}
|
|
22
|
+
apiBroadcast(message, author = 'SYSTEM', color = { r: 255, g: 255, b: 255 }) {
|
|
23
|
+
this.chatService.broadcast(message, author, color);
|
|
24
|
+
}
|
|
25
|
+
apiSendPrivate(targetId, message, author = 'Private') {
|
|
26
|
+
const player = this.playerService.getByClient(targetId);
|
|
27
|
+
if (!player) {
|
|
28
|
+
throw new Error(`Player with client ID ${targetId} not found`);
|
|
29
|
+
}
|
|
30
|
+
this.chatService.sendPrivate(player, message, author);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.ChatController = ChatController;
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, export_1.Export)('core:broadcast'),
|
|
36
|
+
__metadata("design:type", Function),
|
|
37
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
38
|
+
__metadata("design:returntype", void 0)
|
|
39
|
+
], ChatController.prototype, "apiBroadcast", null);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, export_1.Export)('core:sendprivate'),
|
|
42
|
+
__metadata("design:type", Function),
|
|
43
|
+
__metadata("design:paramtypes", [Number, String, String]),
|
|
44
|
+
__metadata("design:returntype", void 0)
|
|
45
|
+
], ChatController.prototype, "apiSendPrivate", null);
|
|
46
|
+
exports.ChatController = ChatController = __decorate([
|
|
47
|
+
(0, controller_1.Controller)(),
|
|
48
|
+
__metadata("design:paramtypes", [chat_service_1.ChatService,
|
|
49
|
+
services_1.PlayerService])
|
|
50
|
+
], ChatController);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CommandService } from '../services/command.service';
|
|
2
|
+
import { Player } from '../entities';
|
|
3
|
+
export declare class CommandNetworkController {
|
|
4
|
+
private readonly commandService;
|
|
5
|
+
constructor(commandService: CommandService);
|
|
6
|
+
onCommandReceived(player: Player, command: string, args: string[], raw: string): Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CommandNetworkController = void 0;
|
|
13
|
+
const onNet_1 = require("../decorators/onNet");
|
|
14
|
+
const command_service_1 = require("../services/command.service");
|
|
15
|
+
const entities_1 = require("../entities");
|
|
16
|
+
const decorators_1 = require("../decorators");
|
|
17
|
+
const logger_1 = require("../../shared/logger");
|
|
18
|
+
let CommandNetworkController = class CommandNetworkController {
|
|
19
|
+
constructor(commandService) {
|
|
20
|
+
this.commandService = commandService;
|
|
21
|
+
}
|
|
22
|
+
async onCommandReceived(player, command, args, raw) {
|
|
23
|
+
try {
|
|
24
|
+
logger_1.loggers.command.trace(`Received: /${command}`, {
|
|
25
|
+
playerId: player.clientID,
|
|
26
|
+
playerName: player.name,
|
|
27
|
+
});
|
|
28
|
+
await this.commandService.execute(player, command, args, raw);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger_1.loggers.command.error(`Execution failed: /${command}`, {
|
|
32
|
+
playerId: player.clientID,
|
|
33
|
+
}, error);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.CommandNetworkController = CommandNetworkController;
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, onNet_1.OnNet)('core:internal:executeCommand'),
|
|
40
|
+
__metadata("design:type", Function),
|
|
41
|
+
__metadata("design:paramtypes", [entities_1.Player, String, Array, String]),
|
|
42
|
+
__metadata("design:returntype", Promise)
|
|
43
|
+
], CommandNetworkController.prototype, "onCommandReceived", null);
|
|
44
|
+
exports.CommandNetworkController = CommandNetworkController = __decorate([
|
|
45
|
+
(0, decorators_1.Controller)(),
|
|
46
|
+
__metadata("design:paramtypes", [command_service_1.CommandService])
|
|
47
|
+
], CommandNetworkController);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PlayerService } from '../services';
|
|
2
|
+
import { PlayerPersistenceService } from '../services/persistence.service';
|
|
3
|
+
export declare class SessionController {
|
|
4
|
+
private readonly playerManager;
|
|
5
|
+
private readonly persistance;
|
|
6
|
+
constructor(playerManager: PlayerService, persistance: PlayerPersistenceService);
|
|
7
|
+
onPlayerJoining(): Promise<void>;
|
|
8
|
+
onPlayerDropped(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SessionController = void 0;
|
|
13
|
+
const shared_1 = require("../../shared");
|
|
14
|
+
const core_event_bus_1 = require("../bus/core-event-bus");
|
|
15
|
+
const decorators_1 = require("../decorators");
|
|
16
|
+
const onFiveMEvent_1 = require("../decorators/onFiveMEvent");
|
|
17
|
+
const services_1 = require("../services");
|
|
18
|
+
const persistence_service_1 = require("../services/persistence.service");
|
|
19
|
+
let SessionController = class SessionController {
|
|
20
|
+
constructor(playerManager, persistance) {
|
|
21
|
+
this.playerManager = playerManager;
|
|
22
|
+
this.persistance = persistance;
|
|
23
|
+
}
|
|
24
|
+
async onPlayerJoining() {
|
|
25
|
+
var _a;
|
|
26
|
+
const clientId = source;
|
|
27
|
+
const license = (_a = GetPlayerIdentifier(clientId.toString(), 0)) !== null && _a !== void 0 ? _a : undefined;
|
|
28
|
+
const player = this.playerManager.bind(clientId, { license });
|
|
29
|
+
shared_1.loggers.session.info(`Player session created`, {
|
|
30
|
+
clientId,
|
|
31
|
+
license: license !== null && license !== void 0 ? license : 'none',
|
|
32
|
+
});
|
|
33
|
+
await this.persistance.handleSessionLoad(player);
|
|
34
|
+
(0, core_event_bus_1.emitCoreEvent)('core:playerSessionCreated', { clientId, license });
|
|
35
|
+
setImmediate(() => {
|
|
36
|
+
const currentPlayer = this.playerManager.getByClient(clientId);
|
|
37
|
+
if (!currentPlayer)
|
|
38
|
+
return;
|
|
39
|
+
(0, core_event_bus_1.emitCoreEvent)('core:playerFullyConnected', { clientId, license });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async onPlayerDropped() {
|
|
43
|
+
const clientId = Number(source);
|
|
44
|
+
const player = this.playerManager.getByClient(clientId);
|
|
45
|
+
if (player) {
|
|
46
|
+
await this.persistance.handleSessionSave(player);
|
|
47
|
+
}
|
|
48
|
+
this.playerManager.unbindByClient(clientId);
|
|
49
|
+
(0, core_event_bus_1.emitCoreEvent)('core:playerSessionDestroyed', { clientId });
|
|
50
|
+
shared_1.loggers.session.info(`Player session destroyed`, { clientId });
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.SessionController = SessionController;
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, onFiveMEvent_1.OnFiveMEvent)('playerJoining'),
|
|
56
|
+
__metadata("design:type", Function),
|
|
57
|
+
__metadata("design:paramtypes", []),
|
|
58
|
+
__metadata("design:returntype", Promise)
|
|
59
|
+
], SessionController.prototype, "onPlayerJoining", null);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, onFiveMEvent_1.OnFiveMEvent)('playerDropped'),
|
|
62
|
+
__metadata("design:type", Function),
|
|
63
|
+
__metadata("design:paramtypes", []),
|
|
64
|
+
__metadata("design:returntype", Promise)
|
|
65
|
+
], SessionController.prototype, "onPlayerDropped", null);
|
|
66
|
+
exports.SessionController = SessionController = __decorate([
|
|
67
|
+
(0, decorators_1.Controller)(),
|
|
68
|
+
__metadata("design:paramtypes", [services_1.PlayerService,
|
|
69
|
+
persistence_service_1.PlayerPersistenceService])
|
|
70
|
+
], SessionController);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function init(): Promise<void>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OxMySQL Adapter
|
|
3
|
+
*
|
|
4
|
+
* Default database adapter using oxmysql resource for FiveM.
|
|
5
|
+
* Requires oxmysql to be installed and running on the server.
|
|
6
|
+
*
|
|
7
|
+
* @see https://github.com/overextended/oxmysql
|
|
8
|
+
* @see https://coxdocs.dev/oxmysql/Functions/transaction
|
|
9
|
+
*/
|
|
10
|
+
import { DatabaseContract } from '../database.contract';
|
|
11
|
+
import type { ExecuteResult, InsertResult, TransactionInput, TransactionSharedParams } from '../types';
|
|
12
|
+
/**
|
|
13
|
+
* OxMySQL Database Adapter
|
|
14
|
+
*
|
|
15
|
+
* Implements DatabaseContract using oxmysql exports.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { OxMySQLAdapter } from '@open-core/framework/server'
|
|
20
|
+
*
|
|
21
|
+
* // Usually you don't need to instantiate directly,
|
|
22
|
+
* // use DatabaseService instead
|
|
23
|
+
* const adapter = new OxMySQLAdapter()
|
|
24
|
+
* const users = await adapter.query('SELECT * FROM users')
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class OxMySQLAdapter extends DatabaseContract {
|
|
28
|
+
private ox;
|
|
29
|
+
constructor();
|
|
30
|
+
/**
|
|
31
|
+
* Execute a query and return all matching rows
|
|
32
|
+
*/
|
|
33
|
+
query<T = any>(sql: string, params?: any[]): Promise<T[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Execute a query and return a single row
|
|
36
|
+
*/
|
|
37
|
+
single<T = any>(sql: string, params?: any[]): Promise<T | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Execute a query and return a single scalar value
|
|
40
|
+
*/
|
|
41
|
+
scalar<T = any>(sql: string, params?: any[]): Promise<T | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Execute an UPDATE or DELETE statement
|
|
44
|
+
*/
|
|
45
|
+
execute(sql: string, params?: any[]): Promise<ExecuteResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Execute an INSERT statement
|
|
48
|
+
*/
|
|
49
|
+
insert(sql: string, params?: any[]): Promise<InsertResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Execute multiple queries within a transaction.
|
|
52
|
+
*
|
|
53
|
+
* Supports three formats:
|
|
54
|
+
*
|
|
55
|
+
* **1. Specific format (object)**
|
|
56
|
+
* ```typescript
|
|
57
|
+
* await db.transaction([
|
|
58
|
+
* { query: 'INSERT INTO test (id) VALUES (?)', values: [1] },
|
|
59
|
+
* { query: 'INSERT INTO test (id, name) VALUES (?, ?)', values: [2, 'bob'] },
|
|
60
|
+
* ])
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* **2. Specific format (tuple)**
|
|
64
|
+
* ```typescript
|
|
65
|
+
* await db.transaction([
|
|
66
|
+
* ['INSERT INTO test (id) VALUES (?)', [1]],
|
|
67
|
+
* ['INSERT INTO test (id, name) VALUES (?, ?)', [2, 'bob']],
|
|
68
|
+
* ])
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* **3. Shared format (named parameters)**
|
|
72
|
+
* ```typescript
|
|
73
|
+
* await db.transaction(
|
|
74
|
+
* [
|
|
75
|
+
* 'INSERT INTO test (id, name) VALUES (@someid, @somename)',
|
|
76
|
+
* 'UPDATE test SET name = @newname WHERE id = @someid',
|
|
77
|
+
* ],
|
|
78
|
+
* {
|
|
79
|
+
* someid: 2,
|
|
80
|
+
* somename: 'John Doe',
|
|
81
|
+
* newname: 'John Notdoe',
|
|
82
|
+
* }
|
|
83
|
+
* )
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @see https://coxdocs.dev/oxmysql/Functions/transaction
|
|
87
|
+
*/
|
|
88
|
+
transaction(queries: TransactionInput, sharedParams?: TransactionSharedParams): Promise<boolean>;
|
|
89
|
+
}
|