@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.
Files changed (281) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +360 -0
  3. package/dist/client/client-bootstrap.d.ts +1 -0
  4. package/dist/client/client-bootstrap.js +50 -0
  5. package/dist/client/client-container.d.ts +2 -0
  6. package/dist/client/client-container.js +6 -0
  7. package/dist/client/client-core.d.ts +1 -0
  8. package/dist/client/client-core.js +7 -0
  9. package/dist/client/controllers/spawner.controller.d.ts +12 -0
  10. package/dist/client/controllers/spawner.controller.js +51 -0
  11. package/dist/client/decorators/controller.d.ts +3 -0
  12. package/dist/client/decorators/controller.js +14 -0
  13. package/dist/client/decorators/export.d.ts +7 -0
  14. package/dist/client/decorators/export.js +15 -0
  15. package/dist/client/decorators/gameEvent.d.ts +47 -0
  16. package/dist/client/decorators/gameEvent.js +54 -0
  17. package/dist/client/decorators/index.d.ts +10 -0
  18. package/dist/client/decorators/index.js +26 -0
  19. package/dist/client/decorators/interval.d.ts +7 -0
  20. package/dist/client/decorators/interval.js +15 -0
  21. package/dist/client/decorators/key.d.ts +2 -0
  22. package/dist/client/decorators/key.js +10 -0
  23. package/dist/client/decorators/localEvent.d.ts +7 -0
  24. package/dist/client/decorators/localEvent.js +15 -0
  25. package/dist/client/decorators/nui.d.ts +1 -0
  26. package/dist/client/decorators/nui.js +9 -0
  27. package/dist/client/decorators/onNet.d.ts +1 -0
  28. package/dist/client/decorators/onNet.js +9 -0
  29. package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
  30. package/dist/client/decorators/resourceLifecycle.js +24 -0
  31. package/dist/client/decorators/tick.d.ts +1 -0
  32. package/dist/client/decorators/tick.js +9 -0
  33. package/dist/client/index.d.ts +7 -0
  34. package/dist/client/index.js +23 -0
  35. package/dist/client/interfaces/appearance.interface.d.ts +19 -0
  36. package/dist/client/interfaces/appearance.interface.js +2 -0
  37. package/dist/client/player/player.d.ts +262 -0
  38. package/dist/client/player/player.js +480 -0
  39. package/dist/client/player/player.loader.d.ts +1 -0
  40. package/dist/client/player/player.loader.js +22 -0
  41. package/dist/client/services/appearance.service.d.ts +6 -0
  42. package/dist/client/services/appearance.service.js +89 -0
  43. package/dist/client/services/blip.service.d.ts +112 -0
  44. package/dist/client/services/blip.service.js +215 -0
  45. package/dist/client/services/index.d.ts +9 -0
  46. package/dist/client/services/index.js +25 -0
  47. package/dist/client/services/marker.service.d.ts +94 -0
  48. package/dist/client/services/marker.service.js +153 -0
  49. package/dist/client/services/notification.service.d.ts +76 -0
  50. package/dist/client/services/notification.service.js +111 -0
  51. package/dist/client/services/ped.service.d.ts +182 -0
  52. package/dist/client/services/ped.service.js +302 -0
  53. package/dist/client/services/progress.service.d.ts +82 -0
  54. package/dist/client/services/progress.service.js +210 -0
  55. package/dist/client/services/spawn.service.d.ts +73 -0
  56. package/dist/client/services/spawn.service.js +261 -0
  57. package/dist/client/services/streaming.service.d.ts +165 -0
  58. package/dist/client/services/streaming.service.js +341 -0
  59. package/dist/client/services/textui.service.d.ts +82 -0
  60. package/dist/client/services/textui.service.js +156 -0
  61. package/dist/client/services/vehicle.service.d.ts +168 -0
  62. package/dist/client/services/vehicle.service.js +296 -0
  63. package/dist/client/system/metadata-client.keys.d.ts +13 -0
  64. package/dist/client/system/metadata-client.keys.js +16 -0
  65. package/dist/client/system/processors/export.processor.d.ts +7 -0
  66. package/dist/client/system/processors/export.processor.js +39 -0
  67. package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
  68. package/dist/client/system/processors/gameEvent.processor.js +58 -0
  69. package/dist/client/system/processors/interval.processor.d.ts +7 -0
  70. package/dist/client/system/processors/interval.processor.js +43 -0
  71. package/dist/client/system/processors/key.processor.d.ts +8 -0
  72. package/dist/client/system/processors/key.processor.js +27 -0
  73. package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
  74. package/dist/client/system/processors/localEvent.processor.js +38 -0
  75. package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
  76. package/dist/client/system/processors/netEvent.processor.js +38 -0
  77. package/dist/client/system/processors/nui.processor.d.ts +7 -0
  78. package/dist/client/system/processors/nui.processor.js +40 -0
  79. package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
  80. package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
  81. package/dist/client/system/processors/tick.processor.d.ts +5 -0
  82. package/dist/client/system/processors/tick.processor.js +37 -0
  83. package/dist/client/system/processors.register.d.ts +1 -0
  84. package/dist/client/system/processors.register.js +27 -0
  85. package/dist/client/types/game-events.d.ts +126 -0
  86. package/dist/client/types/game-events.js +83 -0
  87. package/dist/client/types/index.d.ts +1 -0
  88. package/dist/client/types/index.js +17 -0
  89. package/dist/client/ui-bridge.d.ts +116 -0
  90. package/dist/client/ui-bridge.js +201 -0
  91. package/dist/index.d.ts +5 -0
  92. package/dist/index.js +41 -0
  93. package/dist/server/bootstrap.d.ts +16 -0
  94. package/dist/server/bootstrap.js +57 -0
  95. package/dist/server/bus/core-event-bus.d.ts +6 -0
  96. package/dist/server/bus/core-event-bus.js +31 -0
  97. package/dist/server/configs/api.config.d.ts +71 -0
  98. package/dist/server/configs/api.config.js +81 -0
  99. package/dist/server/configs/config.base.d.ts +63 -0
  100. package/dist/server/configs/config.base.js +64 -0
  101. package/dist/server/configs/index.d.ts +2 -0
  102. package/dist/server/configs/index.js +18 -0
  103. package/dist/server/container.d.ts +2 -0
  104. package/dist/server/container.js +6 -0
  105. package/dist/server/controllers/chat.controller.d.ts +10 -0
  106. package/dist/server/controllers/chat.controller.js +50 -0
  107. package/dist/server/controllers/command.controller.d.ts +7 -0
  108. package/dist/server/controllers/command.controller.js +47 -0
  109. package/dist/server/controllers/session.controller.d.ts +9 -0
  110. package/dist/server/controllers/session.controller.js +70 -0
  111. package/dist/server/core.d.ts +1 -0
  112. package/dist/server/core.js +7 -0
  113. package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
  114. package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
  115. package/dist/server/database/database.contract.d.ts +128 -0
  116. package/dist/server/database/database.contract.js +29 -0
  117. package/dist/server/database/database.service.d.ts +216 -0
  118. package/dist/server/database/database.service.js +301 -0
  119. package/dist/server/database/index.d.ts +53 -0
  120. package/dist/server/database/index.js +70 -0
  121. package/dist/server/database/types.d.ts +67 -0
  122. package/dist/server/database/types.js +7 -0
  123. package/dist/server/database.d.ts +7 -0
  124. package/dist/server/database.js +23 -0
  125. package/dist/server/decorators/bind.d.ts +2 -0
  126. package/dist/server/decorators/bind.js +15 -0
  127. package/dist/server/decorators/command.d.ts +49 -0
  128. package/dist/server/decorators/command.js +23 -0
  129. package/dist/server/decorators/controller.d.ts +25 -0
  130. package/dist/server/decorators/controller.js +36 -0
  131. package/dist/server/decorators/export.d.ts +39 -0
  132. package/dist/server/decorators/export.js +47 -0
  133. package/dist/server/decorators/guard.d.ts +56 -0
  134. package/dist/server/decorators/guard.js +82 -0
  135. package/dist/server/decorators/index.d.ts +10 -0
  136. package/dist/server/decorators/index.js +29 -0
  137. package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
  138. package/dist/server/decorators/onFiveMEvent.js +14 -0
  139. package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
  140. package/dist/server/decorators/onFrameworkEvent.js +29 -0
  141. package/dist/server/decorators/onNet.d.ts +58 -0
  142. package/dist/server/decorators/onNet.js +57 -0
  143. package/dist/server/decorators/onTick.d.ts +32 -0
  144. package/dist/server/decorators/onTick.js +40 -0
  145. package/dist/server/decorators/public.d.ts +27 -0
  146. package/dist/server/decorators/public.js +36 -0
  147. package/dist/server/decorators/requiresState.d.ts +56 -0
  148. package/dist/server/decorators/requiresState.js +63 -0
  149. package/dist/server/decorators/throttle.d.ts +48 -0
  150. package/dist/server/decorators/throttle.js +63 -0
  151. package/dist/server/decorators/utils.d.ts +57 -0
  152. package/dist/server/decorators/utils.js +63 -0
  153. package/dist/server/entities/index.d.ts +1 -0
  154. package/dist/server/entities/index.js +17 -0
  155. package/dist/server/entities/player.d.ts +157 -0
  156. package/dist/server/entities/player.js +217 -0
  157. package/dist/server/error-handler.d.ts +2 -0
  158. package/dist/server/error-handler.js +43 -0
  159. package/dist/server/helpers/resolve-method.d.ts +5 -0
  160. package/dist/server/helpers/resolve-method.js +18 -0
  161. package/dist/server/index.d.ts +10 -0
  162. package/dist/server/index.js +31 -0
  163. package/dist/server/loaders/exports.loader.d.ts +0 -0
  164. package/dist/server/loaders/exports.loader.js +23 -0
  165. package/dist/server/loaders/playerSession.loader.d.ts +1 -0
  166. package/dist/server/loaders/playerSession.loader.js +51 -0
  167. package/dist/server/services/access-control.service.d.ts +56 -0
  168. package/dist/server/services/access-control.service.js +99 -0
  169. package/dist/server/services/chat.service.d.ts +7 -0
  170. package/dist/server/services/chat.service.js +31 -0
  171. package/dist/server/services/command.service.d.ts +15 -0
  172. package/dist/server/services/command.service.js +77 -0
  173. package/dist/server/services/config.service.d.ts +75 -0
  174. package/dist/server/services/config.service.js +116 -0
  175. package/dist/server/services/default/default-security.handler.d.ts +6 -0
  176. package/dist/server/services/default/default-security.handler.js +26 -0
  177. package/dist/server/services/http/http.service.d.ts +50 -0
  178. package/dist/server/services/http/http.service.js +126 -0
  179. package/dist/server/services/index.d.ts +10 -0
  180. package/dist/server/services/index.js +26 -0
  181. package/dist/server/services/parallel/index.d.ts +49 -0
  182. package/dist/server/services/parallel/index.js +67 -0
  183. package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
  184. package/dist/server/services/parallel/parallel-compute.service.js +449 -0
  185. package/dist/server/services/parallel/types.d.ts +188 -0
  186. package/dist/server/services/parallel/types.js +7 -0
  187. package/dist/server/services/parallel/worker-pool.d.ts +83 -0
  188. package/dist/server/services/parallel/worker-pool.js +350 -0
  189. package/dist/server/services/parallel/worker.d.ts +19 -0
  190. package/dist/server/services/parallel/worker.js +49 -0
  191. package/dist/server/services/persistence.service.d.ts +59 -0
  192. package/dist/server/services/persistence.service.js +166 -0
  193. package/dist/server/services/player.service.d.ts +96 -0
  194. package/dist/server/services/player.service.js +132 -0
  195. package/dist/server/services/rate-limiter.service.d.ts +5 -0
  196. package/dist/server/services/rate-limiter.service.js +39 -0
  197. package/dist/server/services/registers.d.ts +1 -0
  198. package/dist/server/services/registers.js +18 -0
  199. package/dist/server/setup.d.ts +9 -0
  200. package/dist/server/setup.js +28 -0
  201. package/dist/server/system/metadata-server.keys.d.ts +10 -0
  202. package/dist/server/system/metadata-server.keys.js +13 -0
  203. package/dist/server/system/processors/command.processor.d.ts +9 -0
  204. package/dist/server/system/processors/command.processor.js +30 -0
  205. package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
  206. package/dist/server/system/processors/coreEvent.processor.js +41 -0
  207. package/dist/server/system/processors/export.processor.d.ts +7 -0
  208. package/dist/server/system/processors/export.processor.js +30 -0
  209. package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
  210. package/dist/server/system/processors/fivemEvent.processor.js +40 -0
  211. package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
  212. package/dist/server/system/processors/netEvent.processor.js +103 -0
  213. package/dist/server/system/processors/tick.processor.d.ts +5 -0
  214. package/dist/server/system/processors/tick.processor.js +36 -0
  215. package/dist/server/system/processors.register.d.ts +1 -0
  216. package/dist/server/system/processors.register.js +23 -0
  217. package/dist/server/system/schema-generator.d.ts +2 -0
  218. package/dist/server/system/schema-generator.js +34 -0
  219. package/dist/server/templates/admin/admin.controller-template.d.ts +12 -0
  220. package/dist/server/templates/admin/admin.controller-template.js +2 -0
  221. package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
  222. package/dist/server/templates/auth/auth-provider.contract.js +23 -0
  223. package/dist/server/templates/index.d.ts +8 -0
  224. package/dist/server/templates/index.js +21 -0
  225. package/dist/server/templates/persistence/index.d.ts +30 -0
  226. package/dist/server/templates/persistence/index.js +34 -0
  227. package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
  228. package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
  229. package/dist/server/templates/repository/index.d.ts +57 -0
  230. package/dist/server/templates/repository/index.js +61 -0
  231. package/dist/server/templates/repository/repository.contract.d.ts +224 -0
  232. package/dist/server/templates/repository/repository.contract.js +342 -0
  233. package/dist/server/templates/repository/repository.types.d.ts +51 -0
  234. package/dist/server/templates/repository/repository.types.js +7 -0
  235. package/dist/server/templates/security/permission.types.d.ts +32 -0
  236. package/dist/server/templates/security/permission.types.js +2 -0
  237. package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
  238. package/dist/server/templates/security/principal-provider.contract.js +19 -0
  239. package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
  240. package/dist/server/templates/security/security-handler.contract.js +6 -0
  241. package/dist/server/types/core-events.d.ts +22 -0
  242. package/dist/server/types/core-events.js +2 -0
  243. package/dist/server/types/security.types.d.ts +7 -0
  244. package/dist/server/types/security.types.js +2 -0
  245. package/dist/shared/index.d.ts +1 -0
  246. package/dist/shared/index.js +17 -0
  247. package/dist/shared/logger/core-logger.d.ts +35 -0
  248. package/dist/shared/logger/core-logger.js +52 -0
  249. package/dist/shared/logger/index.d.ts +11 -0
  250. package/dist/shared/logger/index.js +26 -0
  251. package/dist/shared/logger/logger.config.d.ts +47 -0
  252. package/dist/shared/logger/logger.config.js +33 -0
  253. package/dist/shared/logger/logger.service.d.ts +161 -0
  254. package/dist/shared/logger/logger.service.js +279 -0
  255. package/dist/shared/logger/logger.types.d.ts +85 -0
  256. package/dist/shared/logger/logger.types.js +74 -0
  257. package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
  258. package/dist/shared/logger/transports/buffered.transport.js +174 -0
  259. package/dist/shared/logger/transports/console.transport.d.ts +37 -0
  260. package/dist/shared/logger/transports/console.transport.js +134 -0
  261. package/dist/shared/logger/transports/index.d.ts +3 -0
  262. package/dist/shared/logger/transports/index.js +19 -0
  263. package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
  264. package/dist/shared/logger/transports/transport.interface.js +2 -0
  265. package/dist/system/class-constructor.d.ts +1 -0
  266. package/dist/system/class-constructor.js +2 -0
  267. package/dist/system/decorator-processor.d.ts +4 -0
  268. package/dist/system/decorator-processor.js +2 -0
  269. package/dist/system/metadata.scanner.d.ts +7 -0
  270. package/dist/system/metadata.scanner.js +45 -0
  271. package/dist/utils/errors.d.ts +14 -0
  272. package/dist/utils/errors.js +25 -0
  273. package/dist/utils/index.d.ts +4 -0
  274. package/dist/utils/index.js +20 -0
  275. package/dist/utils/result.d.ts +12 -0
  276. package/dist/utils/result.js +10 -0
  277. package/dist/utils/rgb.d.ts +5 -0
  278. package/dist/utils/rgb.js +2 -0
  279. package/dist/utils/vector3.d.ts +13 -0
  280. package/dist/utils/vector3.js +27 -0
  281. 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,2 @@
1
+ export * from './api.config';
2
+ export * from './config.base';
@@ -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,2 @@
1
+ import 'reflect-metadata';
2
+ export declare const di: import("tsyringe").DependencyContainer;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.di = void 0;
4
+ require("reflect-metadata");
5
+ const tsyringe_1 = require("tsyringe");
6
+ exports.di = tsyringe_1.container;
@@ -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,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.init = init;
4
+ const bootstrap_1 = require("./bootstrap");
5
+ async function init() {
6
+ await (0, bootstrap_1.initServer)();
7
+ }
@@ -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
+ }