@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,7 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class FiveMEventProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(instance: any, methodName: string, metadata: {
5
+ event: string;
6
+ }): void;
7
+ }
@@ -0,0 +1,40 @@
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.FiveMEventProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_server_keys_1 = require("../metadata-server.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ const resolve_method_1 = require("../../helpers/resolve-method");
14
+ let FiveMEventProcessor = class FiveMEventProcessor {
15
+ constructor() {
16
+ this.metadataKey = metadata_server_keys_1.METADATA_KEYS.FIVEM_EVENT;
17
+ }
18
+ process(instance, methodName, metadata) {
19
+ const result = (0, resolve_method_1.resolveMethod)(instance, methodName, `[FiveMEventProcessor] Method "${methodName}" not found`);
20
+ if (!result)
21
+ return;
22
+ const { handler, handlerName } = result;
23
+ on(metadata.event, (...args) => {
24
+ try {
25
+ handler(...args);
26
+ }
27
+ catch (error) {
28
+ logger_1.loggers.eventBus.error(`Handler error in FiveMEvent`, {
29
+ event: metadata.event,
30
+ handler: handlerName,
31
+ }, error);
32
+ }
33
+ });
34
+ logger_1.loggers.eventBus.debug(`Registered FiveM event: ${metadata.event} -> ${handlerName}`);
35
+ }
36
+ };
37
+ exports.FiveMEventProcessor = FiveMEventProcessor;
38
+ exports.FiveMEventProcessor = FiveMEventProcessor = __decorate([
39
+ (0, tsyringe_1.injectable)()
40
+ ], FiveMEventProcessor);
@@ -0,0 +1,11 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ import { PlayerService } from '../../services/player.service';
3
+ import { NetEventOptions } from '../../decorators';
4
+ import { SecurityHandlerContract } from '../../templates/security/security-handler.contract';
5
+ export declare class NetEventProcessor implements DecoratorProcessor {
6
+ private playerService;
7
+ private securityHandler;
8
+ readonly metadataKey: string;
9
+ constructor(playerService: PlayerService, securityHandler: SecurityHandlerContract);
10
+ process(instance: any, methodName: string, metadata: NetEventOptions): void;
11
+ }
@@ -0,0 +1,103 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.NetEventProcessor = void 0;
16
+ const tsyringe_1 = require("tsyringe");
17
+ const player_service_1 = require("../../services/player.service");
18
+ const metadata_server_keys_1 = require("../metadata-server.keys");
19
+ const security_handler_contract_1 = require("../../templates/security/security-handler.contract");
20
+ const utils_1 = require("../../../utils");
21
+ const logger_1 = require("../../../shared/logger");
22
+ const zod_1 = __importDefault(require("zod"));
23
+ const schema_generator_1 = require("../schema-generator");
24
+ const resolve_method_1 = require("../../helpers/resolve-method");
25
+ let NetEventProcessor = class NetEventProcessor {
26
+ constructor(playerService, securityHandler) {
27
+ this.playerService = playerService;
28
+ this.securityHandler = securityHandler;
29
+ this.metadataKey = metadata_server_keys_1.METADATA_KEYS.NET_EVENT;
30
+ }
31
+ process(instance, methodName, metadata) {
32
+ const result = (0, resolve_method_1.resolveMethod)(instance, methodName, `[NetEventProcessor] Method "${methodName}" not found`);
33
+ if (!result)
34
+ return;
35
+ const { handler, handlerName, proto } = result;
36
+ const isPublic = Reflect.getMetadata(metadata_server_keys_1.METADATA_KEYS.PUBLIC, proto, methodName) === true;
37
+ onNet(metadata.eventName, async (...args) => {
38
+ const sourceId = Number(source);
39
+ const player = this.playerService.getByClient(sourceId);
40
+ if (!player) {
41
+ logger_1.loggers.netEvent.warn(`Event ignored: Player session not found`, {
42
+ event: metadata.eventName,
43
+ clientId: sourceId,
44
+ });
45
+ return;
46
+ }
47
+ // ═══════════════════════════════════════════════════════════════
48
+ // SECURE BY DEFAULT: Require authentication unless @Public()
49
+ // ═══════════════════════════════════════════════════════════════
50
+ if (!isPublic && !player.accountID) {
51
+ logger_1.loggers.security.warn(`Unauthenticated request blocked`, {
52
+ event: metadata.eventName,
53
+ clientId: sourceId,
54
+ });
55
+ player.emit('core:auth:required', { event: metadata.eventName });
56
+ return;
57
+ }
58
+ let validatedArgs = args;
59
+ const schema = (0, schema_generator_1.generateSchemaFromTypes)(metadata.paramTypes);
60
+ if (schema) {
61
+ try {
62
+ const parsed = schema.parse(args);
63
+ validatedArgs = Array.isArray(parsed) ? parsed : [parsed];
64
+ }
65
+ catch (error) {
66
+ if (error instanceof zod_1.default.ZodError) {
67
+ const violation = new utils_1.SecurityError('LOG', `Invalid data received in ${metadata.eventName}`, { issues: error.message });
68
+ this.securityHandler.handleViolation(player, violation);
69
+ return;
70
+ }
71
+ if (error instanceof utils_1.SecurityError) {
72
+ this.securityHandler.handleViolation(player, error);
73
+ return;
74
+ }
75
+ logger_1.loggers.netEvent.error(`Validation error in event`, {
76
+ event: metadata.eventName,
77
+ playerId: player.clientID,
78
+ }, error);
79
+ }
80
+ }
81
+ try {
82
+ await handler(player, ...validatedArgs);
83
+ }
84
+ catch (error) {
85
+ if (error instanceof utils_1.SecurityError) {
86
+ this.securityHandler.handleViolation(player, error);
87
+ }
88
+ logger_1.loggers.netEvent.error(`Handler error in event`, {
89
+ event: metadata.eventName,
90
+ handler: handlerName,
91
+ playerId: player.clientID,
92
+ }, error);
93
+ }
94
+ });
95
+ logger_1.loggers.netEvent.debug(`Registered: ${metadata.eventName} -> ${handlerName}`);
96
+ }
97
+ };
98
+ exports.NetEventProcessor = NetEventProcessor;
99
+ exports.NetEventProcessor = NetEventProcessor = __decorate([
100
+ (0, tsyringe_1.injectable)(),
101
+ __metadata("design:paramtypes", [player_service_1.PlayerService,
102
+ security_handler_contract_1.SecurityHandlerContract])
103
+ ], NetEventProcessor);
@@ -0,0 +1,5 @@
1
+ import { DecoratorProcessor } from '../../../system/decorator-processor';
2
+ export declare class TickProcessor implements DecoratorProcessor {
3
+ readonly metadataKey: string;
4
+ process(target: any, methodName: string): void;
5
+ }
@@ -0,0 +1,36 @@
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.TickProcessor = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ const metadata_server_keys_1 = require("../metadata-server.keys");
12
+ const logger_1 = require("../../../shared/logger");
13
+ let TickProcessor = class TickProcessor {
14
+ constructor() {
15
+ this.metadataKey = metadata_server_keys_1.METADATA_KEYS.TICK;
16
+ }
17
+ process(target, methodName) {
18
+ const handler = target[methodName].bind(target);
19
+ const handlerName = `${target.constructor.name}.${methodName}`;
20
+ setTick(async () => {
21
+ try {
22
+ await handler();
23
+ }
24
+ catch (error) {
25
+ logger_1.loggers.tick.error(`Tick handler error`, {
26
+ handler: handlerName,
27
+ }, error);
28
+ }
29
+ });
30
+ logger_1.loggers.tick.debug(`Registered: ${handlerName}`);
31
+ }
32
+ };
33
+ exports.TickProcessor = TickProcessor;
34
+ exports.TickProcessor = TickProcessor = __decorate([
35
+ (0, tsyringe_1.injectable)()
36
+ ], TickProcessor);
@@ -0,0 +1 @@
1
+ export declare function registerSystemServer(): void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSystemServer = registerSystemServer;
4
+ const container_1 = require("../container");
5
+ const default_security_handler_1 = require("../services/default/default-security.handler");
6
+ const security_handler_contract_1 = require("../templates/security/security-handler.contract");
7
+ const command_processor_1 = require("./processors/command.processor");
8
+ const coreEvent_processor_1 = require("./processors/coreEvent.processor");
9
+ const export_processor_1 = require("./processors/export.processor");
10
+ const fivemEvent_processor_1 = require("./processors/fivemEvent.processor");
11
+ const netEvent_processor_1 = require("./processors/netEvent.processor");
12
+ const tick_processor_1 = require("./processors/tick.processor");
13
+ function registerSystemServer() {
14
+ container_1.di.register('DecoratorProcessor', { useClass: netEvent_processor_1.NetEventProcessor });
15
+ container_1.di.register('DecoratorProcessor', { useClass: tick_processor_1.TickProcessor });
16
+ container_1.di.register('DecoratorProcessor', { useClass: export_processor_1.ExportProcessor });
17
+ container_1.di.register('DecoratorProcessor', { useClass: coreEvent_processor_1.CoreEventProcessor });
18
+ container_1.di.register('DecoratorProcessor', { useClass: command_processor_1.CommandProcessor });
19
+ container_1.di.register('DecoratorProcessor', { useClass: fivemEvent_processor_1.FiveMEventProcessor });
20
+ if (!container_1.di.isRegistered(security_handler_contract_1.SecurityHandlerContract)) {
21
+ container_1.di.registerSingleton(security_handler_contract_1.SecurityHandlerContract, default_security_handler_1.DefaultSecurityHandler);
22
+ }
23
+ }
@@ -0,0 +1,2 @@
1
+ import z from 'zod';
2
+ export declare function generateSchemaFromTypes(paramTypes: any[]): z.ZodTuple | null;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateSchemaFromTypes = generateSchemaFromTypes;
7
+ const zod_1 = __importDefault(require("zod"));
8
+ const player_1 = require("../entities/player");
9
+ function typeToZodSchema(type) {
10
+ switch (type) {
11
+ case String:
12
+ return zod_1.default.coerce.string();
13
+ case Number:
14
+ return zod_1.default.coerce.number();
15
+ case Boolean:
16
+ return zod_1.default.coerce.boolean();
17
+ case Array:
18
+ return zod_1.default.array(zod_1.default.any());
19
+ case Object:
20
+ return zod_1.default.any();
21
+ default:
22
+ return zod_1.default.any();
23
+ }
24
+ }
25
+ function generateSchemaFromTypes(paramTypes) {
26
+ var _a;
27
+ if (!paramTypes || paramTypes.length <= 1)
28
+ return null;
29
+ if (paramTypes[0] !== player_1.Player) {
30
+ throw new Error(`@OnNet: First parameter must be Player, got ${(_a = paramTypes[0]) === null || _a === void 0 ? void 0 : _a.name}`);
31
+ }
32
+ const argSchemas = paramTypes.slice(1).map(typeToZodSchema);
33
+ return zod_1.default.tuple(argSchemas);
34
+ }
@@ -0,0 +1,12 @@
1
+ import type { Player } from '../../entities';
2
+ type CommandArgs = string[] | any;
3
+ /**
4
+ * Template for admin controller implementations.
5
+ */
6
+ export interface AdminControllerTemplate {
7
+ handleBanCommand(player: Player, args: CommandArgs, raw?: string): Promise<void>;
8
+ handleKickCommand(player: Player, args: CommandArgs, raw?: string): Promise<void>;
9
+ handleMuteCommand(player: Player, args: CommandArgs, raw?: string): Promise<void>;
10
+ handleUnmuteCommand(player: Player, args: CommandArgs, raw?: string): Promise<void>;
11
+ }
12
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,58 @@
1
+ import type { LinkedID } from '../../services';
2
+ import type { Server } from '../../..';
3
+ export interface AuthCredentials {
4
+ /** Standard username/password auth */
5
+ username?: string;
6
+ password?: string;
7
+ /** License-based auto-auth */
8
+ license?: string;
9
+ /** Discord OAuth */
10
+ discordToken?: string;
11
+ /** Custom auth data */
12
+ [key: string]: unknown;
13
+ }
14
+ export interface AuthResult {
15
+ success: boolean;
16
+ accountID?: LinkedID;
17
+ error?: string;
18
+ /** Optional: newly created account flag */
19
+ isNewAccount?: boolean;
20
+ }
21
+ /**
22
+ * **Authentication**
23
+ *
24
+ * Defines the Authentication flow (login/register/logout).
25
+ * This is separate from Authorization (roles/permissions) handled by PrincipalProviderContract.
26
+ *
27
+ * @example
28
+ *
29
+ * class MyAuthProvider implements AuthProviderContract {
30
+ * async authenticate(player, credentials) {
31
+ * const user = await db.users.findByLicense(credentials.license)
32
+ * if (!user) return { success: false, error: 'User not found' }
33
+ * player.linkAccount(user.id)
34
+ * return { success: true, accountID: user.id }
35
+ * }
36
+ * }
37
+ * */
38
+ export declare abstract class AuthProviderContract {
39
+ /**
40
+ * Authenticates a player and links their account.
41
+ * Called during the login flow.
42
+ */
43
+ abstract authenticate(player: Server.Player, credentials: AuthCredentials): Promise<AuthResult>;
44
+ /**
45
+ * Registers a new account for the player.
46
+ * Can optionally auto-authenticate after registration.
47
+ */
48
+ abstract register(player: Server.Player, credentials: AuthCredentials): Promise<AuthResult>;
49
+ /**
50
+ * Validates an existing session/token.
51
+ * Useful for reconnections or persistent sessions.
52
+ */
53
+ abstract validateSession(player: Server.Player): Promise<AuthResult>;
54
+ /**
55
+ * Clears the player's authenticated session.
56
+ */
57
+ abstract logout(player: Server.Player): Promise<void>;
58
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthProviderContract = void 0;
4
+ /**
5
+ * **Authentication**
6
+ *
7
+ * Defines the Authentication flow (login/register/logout).
8
+ * This is separate from Authorization (roles/permissions) handled by PrincipalProviderContract.
9
+ *
10
+ * @example
11
+ *
12
+ * class MyAuthProvider implements AuthProviderContract {
13
+ * async authenticate(player, credentials) {
14
+ * const user = await db.users.findByLicense(credentials.license)
15
+ * if (!user) return { success: false, error: 'User not found' }
16
+ * player.linkAccount(user.id)
17
+ * return { success: true, accountID: user.id }
18
+ * }
19
+ * }
20
+ * */
21
+ class AuthProviderContract {
22
+ }
23
+ exports.AuthProviderContract = AuthProviderContract;
@@ -0,0 +1,8 @@
1
+ export * from './security/principal-provider.contract';
2
+ export * from './repository';
3
+ export * from './persistence';
4
+ export * from './auth/auth-provider.contract';
5
+ export type * from './security/permission.types';
6
+ export type * from './admin/admin.controller-template';
7
+ export type * from './repository/repository.types';
8
+ export type * from './persistence/player-persistence.contract';
@@ -0,0 +1,21 @@
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
+ // Abstract templates and contracts
18
+ __exportStar(require("./security/principal-provider.contract"), exports);
19
+ __exportStar(require("./repository"), exports);
20
+ __exportStar(require("./persistence"), exports);
21
+ __exportStar(require("./auth/auth-provider.contract"), exports);
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Player Persistence Module
3
+ *
4
+ * Provides contracts and types for implementing player data persistence.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * PlayerPersistenceContract,
10
+ * PersistenceConfig,
11
+ * DEFAULT_PERSISTENCE_CONFIG
12
+ * } from '@open-core/framework/server'
13
+ *
14
+ * class MyPersistenceProvider extends PlayerPersistenceContract {
15
+ * readonly config: PersistenceConfig = {
16
+ * ...DEFAULT_PERSISTENCE_CONFIG,
17
+ * autoSaveIntervalMs: 60000, // Override to 1 minute
18
+ * }
19
+ *
20
+ * async onSessionLoad(player) { ... }
21
+ * async onSessionSave(player) { ... }
22
+ * async onAutoSave(player) { ... }
23
+ * }
24
+ *
25
+ * // In your setup:
26
+ * Server.setPersistenceProvider(MyPersistenceProvider)
27
+ * ```
28
+ */
29
+ export { PlayerPersistenceContract, DEFAULT_PERSISTENCE_CONFIG, } from './player-persistence.contract';
30
+ export type { PersistenceConfig } from './player-persistence.contract';
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /**
3
+ * Player Persistence Module
4
+ *
5
+ * Provides contracts and types for implementing player data persistence.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import {
10
+ * PlayerPersistenceContract,
11
+ * PersistenceConfig,
12
+ * DEFAULT_PERSISTENCE_CONFIG
13
+ * } from '@open-core/framework/server'
14
+ *
15
+ * class MyPersistenceProvider extends PlayerPersistenceContract {
16
+ * readonly config: PersistenceConfig = {
17
+ * ...DEFAULT_PERSISTENCE_CONFIG,
18
+ * autoSaveIntervalMs: 60000, // Override to 1 minute
19
+ * }
20
+ *
21
+ * async onSessionLoad(player) { ... }
22
+ * async onSessionSave(player) { ... }
23
+ * async onAutoSave(player) { ... }
24
+ * }
25
+ *
26
+ * // In your setup:
27
+ * Server.setPersistenceProvider(MyPersistenceProvider)
28
+ * ```
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.DEFAULT_PERSISTENCE_CONFIG = exports.PlayerPersistenceContract = void 0;
32
+ var player_persistence_contract_1 = require("./player-persistence.contract");
33
+ Object.defineProperty(exports, "PlayerPersistenceContract", { enumerable: true, get: function () { return player_persistence_contract_1.PlayerPersistenceContract; } });
34
+ Object.defineProperty(exports, "DEFAULT_PERSISTENCE_CONFIG", { enumerable: true, get: function () { return player_persistence_contract_1.DEFAULT_PERSISTENCE_CONFIG; } });
@@ -0,0 +1,86 @@
1
+ import type { Player } from '../../entities/player';
2
+ /**
3
+ * Configuration for player data persistence behavior.
4
+ */
5
+ export interface PersistenceConfig {
6
+ /**
7
+ * Whether automatic saving is enabled.
8
+ * When true, player data will be saved periodically.
9
+ */
10
+ autoSaveEnabled: boolean;
11
+ /**
12
+ * Interval in milliseconds between auto-saves.
13
+ * @default 300000 (5 minutes)
14
+ */
15
+ autoSaveIntervalMs: number;
16
+ }
17
+ /**
18
+ * Default persistence configuration values.
19
+ */
20
+ export declare const DEFAULT_PERSISTENCE_CONFIG: PersistenceConfig;
21
+ /**
22
+ * Player Persistence Contract
23
+ *
24
+ * Abstract base class for implementing player data persistence.
25
+ * Implement this contract to define how player data is loaded, saved,
26
+ * and automatically persisted during their session.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { PlayerPersistenceContract, PersistenceConfig } from '@open-core/framework/server'
31
+ *
32
+ * class MyPersistenceProvider extends PlayerPersistenceContract {
33
+ * readonly config: PersistenceConfig = {
34
+ * autoSaveEnabled: true,
35
+ * autoSaveIntervalMs: 300000, // 5 minutes
36
+ * }
37
+ *
38
+ * async onSessionLoad(player: Player): Promise<void> {
39
+ * const data = await this.db.single('SELECT * FROM players WHERE license = ?', [player.license])
40
+ * if (data) {
41
+ * player.setMeta('money', data.money)
42
+ * player.setMeta('job', data.job)
43
+ * }
44
+ * }
45
+ *
46
+ * async onSessionSave(player: Player): Promise<void> {
47
+ * await this.db.execute(
48
+ * 'UPDATE players SET money = ?, job = ? WHERE license = ?',
49
+ * [player.getMeta('money'), player.getMeta('job'), player.license]
50
+ * )
51
+ * }
52
+ *
53
+ * async onAutoSave(player: Player): Promise<void> {
54
+ * // Can delegate to onSessionSave or implement lighter save logic
55
+ * await this.onSessionSave(player)
56
+ * }
57
+ * }
58
+ * ```
59
+ */
60
+ export declare abstract class PlayerPersistenceContract {
61
+ /**
62
+ * Persistence configuration for this provider.
63
+ */
64
+ abstract readonly config: PersistenceConfig;
65
+ /**
66
+ * Called when a player session is created (after playerJoining).
67
+ * Load saved data from persistent storage and attach to the player.
68
+ *
69
+ * @param player - The player whose data should be loaded
70
+ */
71
+ abstract onSessionLoad(player: Player): Promise<void>;
72
+ /**
73
+ * Called when a player disconnects (before session destroy).
74
+ * Save player data to persistent storage.
75
+ *
76
+ * @param player - The player whose data should be saved
77
+ */
78
+ abstract onSessionSave(player: Player): Promise<void>;
79
+ /**
80
+ * Called periodically if autoSave is enabled.
81
+ * Can implement lighter save logic or delegate to onSessionSave.
82
+ *
83
+ * @param player - The player whose data should be auto-saved
84
+ */
85
+ abstract onAutoSave(player: Player): Promise<void>;
86
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlayerPersistenceContract = exports.DEFAULT_PERSISTENCE_CONFIG = void 0;
4
+ /**
5
+ * Default persistence configuration values.
6
+ */
7
+ exports.DEFAULT_PERSISTENCE_CONFIG = {
8
+ autoSaveEnabled: true,
9
+ autoSaveIntervalMs: 300000, // 5 minutes
10
+ };
11
+ /**
12
+ * Player Persistence Contract
13
+ *
14
+ * Abstract base class for implementing player data persistence.
15
+ * Implement this contract to define how player data is loaded, saved,
16
+ * and automatically persisted during their session.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { PlayerPersistenceContract, PersistenceConfig } from '@open-core/framework/server'
21
+ *
22
+ * class MyPersistenceProvider extends PlayerPersistenceContract {
23
+ * readonly config: PersistenceConfig = {
24
+ * autoSaveEnabled: true,
25
+ * autoSaveIntervalMs: 300000, // 5 minutes
26
+ * }
27
+ *
28
+ * async onSessionLoad(player: Player): Promise<void> {
29
+ * const data = await this.db.single('SELECT * FROM players WHERE license = ?', [player.license])
30
+ * if (data) {
31
+ * player.setMeta('money', data.money)
32
+ * player.setMeta('job', data.job)
33
+ * }
34
+ * }
35
+ *
36
+ * async onSessionSave(player: Player): Promise<void> {
37
+ * await this.db.execute(
38
+ * 'UPDATE players SET money = ?, job = ? WHERE license = ?',
39
+ * [player.getMeta('money'), player.getMeta('job'), player.license]
40
+ * )
41
+ * }
42
+ *
43
+ * async onAutoSave(player: Player): Promise<void> {
44
+ * // Can delegate to onSessionSave or implement lighter save logic
45
+ * await this.onSessionSave(player)
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+ class PlayerPersistenceContract {
51
+ }
52
+ exports.PlayerPersistenceContract = PlayerPersistenceContract;