@open-core/framework 1.0.1-beta.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 (275) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +350 -0
  3. package/dist/client/client-bootstrap.d.ts +1 -0
  4. package/dist/client/client-bootstrap.js +53 -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 +18 -0
  8. package/dist/client/client-core.js +52 -0
  9. package/dist/client/decorators/controller.d.ts +3 -0
  10. package/dist/client/decorators/controller.js +14 -0
  11. package/dist/client/decorators/export.d.ts +7 -0
  12. package/dist/client/decorators/export.js +15 -0
  13. package/dist/client/decorators/gameEvent.d.ts +47 -0
  14. package/dist/client/decorators/gameEvent.js +54 -0
  15. package/dist/client/decorators/index.d.ts +10 -0
  16. package/dist/client/decorators/index.js +26 -0
  17. package/dist/client/decorators/interval.d.ts +7 -0
  18. package/dist/client/decorators/interval.js +15 -0
  19. package/dist/client/decorators/key.d.ts +2 -0
  20. package/dist/client/decorators/key.js +10 -0
  21. package/dist/client/decorators/localEvent.d.ts +7 -0
  22. package/dist/client/decorators/localEvent.js +15 -0
  23. package/dist/client/decorators/nui.d.ts +1 -0
  24. package/dist/client/decorators/nui.js +9 -0
  25. package/dist/client/decorators/onNet.d.ts +1 -0
  26. package/dist/client/decorators/onNet.js +9 -0
  27. package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
  28. package/dist/client/decorators/resourceLifecycle.js +24 -0
  29. package/dist/client/decorators/tick.d.ts +1 -0
  30. package/dist/client/decorators/tick.js +9 -0
  31. package/dist/client/index.d.ts +6 -0
  32. package/dist/client/index.js +22 -0
  33. package/dist/client/loaders/exports.loader.d.ts +1 -0
  34. package/dist/client/loaders/exports.loader.js +13 -0
  35. package/dist/client/player/player.d.ts +262 -0
  36. package/dist/client/player/player.js +480 -0
  37. package/dist/client/player/player.loader.d.ts +1 -0
  38. package/dist/client/player/player.loader.js +22 -0
  39. package/dist/client/services/core/index.d.ts +1 -0
  40. package/dist/client/services/core/index.js +17 -0
  41. package/dist/client/services/core/spawn.service.d.ts +20 -0
  42. package/dist/client/services/core/spawn.service.js +143 -0
  43. package/dist/client/services/index.d.ts +4 -0
  44. package/dist/client/services/index.js +24 -0
  45. package/dist/client/services/streaming/index.d.ts +1 -0
  46. package/dist/client/services/streaming/index.js +17 -0
  47. package/dist/client/services/streaming/streaming.service.d.ts +165 -0
  48. package/dist/client/services/streaming/streaming.service.js +341 -0
  49. package/dist/client/services/ui/index.d.ts +3 -0
  50. package/dist/client/services/ui/index.js +19 -0
  51. package/dist/client/services/ui/notification.service.d.ts +76 -0
  52. package/dist/client/services/ui/notification.service.js +111 -0
  53. package/dist/client/services/ui/progress.service.d.ts +82 -0
  54. package/dist/client/services/ui/progress.service.js +210 -0
  55. package/dist/client/services/ui/textui.service.d.ts +82 -0
  56. package/dist/client/services/ui/textui.service.js +156 -0
  57. package/dist/client/services/world/blip.service.d.ts +112 -0
  58. package/dist/client/services/world/blip.service.js +215 -0
  59. package/dist/client/services/world/index.d.ts +4 -0
  60. package/dist/client/services/world/index.js +20 -0
  61. package/dist/client/services/world/marker.service.d.ts +94 -0
  62. package/dist/client/services/world/marker.service.js +153 -0
  63. package/dist/client/services/world/ped.service.d.ts +182 -0
  64. package/dist/client/services/world/ped.service.js +302 -0
  65. package/dist/client/services/world/vehicle.service.d.ts +168 -0
  66. package/dist/client/services/world/vehicle.service.js +296 -0
  67. package/dist/client/system/metadata-client.keys.d.ts +13 -0
  68. package/dist/client/system/metadata-client.keys.js +16 -0
  69. package/dist/client/system/processors/export.processor.d.ts +7 -0
  70. package/dist/client/system/processors/export.processor.js +39 -0
  71. package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
  72. package/dist/client/system/processors/gameEvent.processor.js +58 -0
  73. package/dist/client/system/processors/interval.processor.d.ts +7 -0
  74. package/dist/client/system/processors/interval.processor.js +43 -0
  75. package/dist/client/system/processors/key.processor.d.ts +8 -0
  76. package/dist/client/system/processors/key.processor.js +27 -0
  77. package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
  78. package/dist/client/system/processors/localEvent.processor.js +38 -0
  79. package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
  80. package/dist/client/system/processors/netEvent.processor.js +38 -0
  81. package/dist/client/system/processors/nui.processor.d.ts +7 -0
  82. package/dist/client/system/processors/nui.processor.js +40 -0
  83. package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
  84. package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
  85. package/dist/client/system/processors/tick.processor.d.ts +5 -0
  86. package/dist/client/system/processors/tick.processor.js +37 -0
  87. package/dist/client/system/processors.register.d.ts +1 -0
  88. package/dist/client/system/processors.register.js +27 -0
  89. package/dist/client/types/game-events.d.ts +126 -0
  90. package/dist/client/types/game-events.js +83 -0
  91. package/dist/client/types/index.d.ts +1 -0
  92. package/dist/client/types/index.js +17 -0
  93. package/dist/client/ui-bridge.d.ts +116 -0
  94. package/dist/client/ui-bridge.js +201 -0
  95. package/dist/index.d.ts +7 -0
  96. package/dist/index.js +46 -0
  97. package/dist/server/bootstrap.d.ts +16 -0
  98. package/dist/server/bootstrap.js +57 -0
  99. package/dist/server/bus/core-event-bus.d.ts +6 -0
  100. package/dist/server/bus/core-event-bus.js +31 -0
  101. package/dist/server/configs/api.config.d.ts +71 -0
  102. package/dist/server/configs/api.config.js +81 -0
  103. package/dist/server/configs/config.base.d.ts +63 -0
  104. package/dist/server/configs/config.base.js +64 -0
  105. package/dist/server/configs/index.d.ts +2 -0
  106. package/dist/server/configs/index.js +18 -0
  107. package/dist/server/container.d.ts +2 -0
  108. package/dist/server/container.js +6 -0
  109. package/dist/server/controllers/chat.controller.d.ts +10 -0
  110. package/dist/server/controllers/chat.controller.js +50 -0
  111. package/dist/server/controllers/command.controller.d.ts +7 -0
  112. package/dist/server/controllers/command.controller.js +47 -0
  113. package/dist/server/core.d.ts +1 -0
  114. package/dist/server/core.js +7 -0
  115. package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
  116. package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
  117. package/dist/server/database/database.contract.d.ts +128 -0
  118. package/dist/server/database/database.contract.js +29 -0
  119. package/dist/server/database/database.service.d.ts +216 -0
  120. package/dist/server/database/database.service.js +301 -0
  121. package/dist/server/database/index.d.ts +53 -0
  122. package/dist/server/database/index.js +70 -0
  123. package/dist/server/database/types.d.ts +67 -0
  124. package/dist/server/database/types.js +7 -0
  125. package/dist/server/database.d.ts +7 -0
  126. package/dist/server/database.js +23 -0
  127. package/dist/server/decorators/bind.d.ts +2 -0
  128. package/dist/server/decorators/bind.js +15 -0
  129. package/dist/server/decorators/command.d.ts +19 -0
  130. package/dist/server/decorators/command.js +18 -0
  131. package/dist/server/decorators/controller.d.ts +3 -0
  132. package/dist/server/decorators/controller.js +14 -0
  133. package/dist/server/decorators/coreEvent.d.ts +2 -0
  134. package/dist/server/decorators/coreEvent.js +9 -0
  135. package/dist/server/decorators/export.d.ts +1 -0
  136. package/dist/server/decorators/export.js +9 -0
  137. package/dist/server/decorators/guard.d.ts +5 -0
  138. package/dist/server/decorators/guard.js +39 -0
  139. package/dist/server/decorators/index.d.ts +10 -0
  140. package/dist/server/decorators/index.js +26 -0
  141. package/dist/server/decorators/netEvent.d.ts +36 -0
  142. package/dist/server/decorators/netEvent.js +40 -0
  143. package/dist/server/decorators/onTick.d.ts +1 -0
  144. package/dist/server/decorators/onTick.js +9 -0
  145. package/dist/server/decorators/public.d.ts +16 -0
  146. package/dist/server/decorators/public.js +25 -0
  147. package/dist/server/decorators/requiresState.d.ts +55 -0
  148. package/dist/server/decorators/requiresState.js +62 -0
  149. package/dist/server/decorators/throttle.d.ts +9 -0
  150. package/dist/server/decorators/throttle.js +36 -0
  151. package/dist/server/decorators/utils.d.ts +7 -0
  152. package/dist/server/decorators/utils.js +13 -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/index.d.ts +10 -0
  160. package/dist/server/index.js +29 -0
  161. package/dist/server/loaders/exports.loader.d.ts +0 -0
  162. package/dist/server/loaders/exports.loader.js +23 -0
  163. package/dist/server/loaders/playerSession.loader.d.ts +1 -0
  164. package/dist/server/loaders/playerSession.loader.js +42 -0
  165. package/dist/server/services/access-control.service.d.ts +56 -0
  166. package/dist/server/services/access-control.service.js +99 -0
  167. package/dist/server/services/chat.service.d.ts +7 -0
  168. package/dist/server/services/chat.service.js +31 -0
  169. package/dist/server/services/command.service.d.ts +15 -0
  170. package/dist/server/services/command.service.js +74 -0
  171. package/dist/server/services/config.service.d.ts +75 -0
  172. package/dist/server/services/config.service.js +116 -0
  173. package/dist/server/services/default/default-security.handler.d.ts +6 -0
  174. package/dist/server/services/default/default-security.handler.js +26 -0
  175. package/dist/server/services/http/http.service.d.ts +50 -0
  176. package/dist/server/services/http/http.service.js +126 -0
  177. package/dist/server/services/index.d.ts +10 -0
  178. package/dist/server/services/index.js +26 -0
  179. package/dist/server/services/parallel/index.d.ts +49 -0
  180. package/dist/server/services/parallel/index.js +67 -0
  181. package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
  182. package/dist/server/services/parallel/parallel-compute.service.js +449 -0
  183. package/dist/server/services/parallel/types.d.ts +188 -0
  184. package/dist/server/services/parallel/types.js +7 -0
  185. package/dist/server/services/parallel/worker-pool.d.ts +83 -0
  186. package/dist/server/services/parallel/worker-pool.js +350 -0
  187. package/dist/server/services/parallel/worker.d.ts +19 -0
  188. package/dist/server/services/parallel/worker.js +49 -0
  189. package/dist/server/services/persistence.service.d.ts +59 -0
  190. package/dist/server/services/persistence.service.js +166 -0
  191. package/dist/server/services/player.service.d.ts +96 -0
  192. package/dist/server/services/player.service.js +132 -0
  193. package/dist/server/services/rate-limiter.service.d.ts +5 -0
  194. package/dist/server/services/rate-limiter.service.js +39 -0
  195. package/dist/server/services/registers.d.ts +1 -0
  196. package/dist/server/services/registers.js +18 -0
  197. package/dist/server/setup.d.ts +9 -0
  198. package/dist/server/setup.js +28 -0
  199. package/dist/server/system/metadata-server.keys.d.ts +9 -0
  200. package/dist/server/system/metadata-server.keys.js +12 -0
  201. package/dist/server/system/processors/command.processor.d.ts +9 -0
  202. package/dist/server/system/processors/command.processor.js +31 -0
  203. package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
  204. package/dist/server/system/processors/coreEvent.processor.js +38 -0
  205. package/dist/server/system/processors/export.processor.d.ts +7 -0
  206. package/dist/server/system/processors/export.processor.js +26 -0
  207. package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
  208. package/dist/server/system/processors/netEvent.processor.js +100 -0
  209. package/dist/server/system/processors/tick.processor.d.ts +5 -0
  210. package/dist/server/system/processors/tick.processor.js +36 -0
  211. package/dist/server/system/processors.register.d.ts +1 -0
  212. package/dist/server/system/processors.register.js +21 -0
  213. package/dist/server/templates/admin/admin.controller-template.d.ts +10 -0
  214. package/dist/server/templates/admin/admin.controller-template.js +2 -0
  215. package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
  216. package/dist/server/templates/auth/auth-provider.contract.js +23 -0
  217. package/dist/server/templates/index.d.ts +8 -0
  218. package/dist/server/templates/index.js +21 -0
  219. package/dist/server/templates/persistence/index.d.ts +30 -0
  220. package/dist/server/templates/persistence/index.js +34 -0
  221. package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
  222. package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
  223. package/dist/server/templates/repository/index.d.ts +57 -0
  224. package/dist/server/templates/repository/index.js +61 -0
  225. package/dist/server/templates/repository/repository.contract.d.ts +224 -0
  226. package/dist/server/templates/repository/repository.contract.js +342 -0
  227. package/dist/server/templates/repository/repository.types.d.ts +51 -0
  228. package/dist/server/templates/repository/repository.types.js +7 -0
  229. package/dist/server/templates/security/permission.types.d.ts +32 -0
  230. package/dist/server/templates/security/permission.types.js +2 -0
  231. package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
  232. package/dist/server/templates/security/principal-provider.contract.js +19 -0
  233. package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
  234. package/dist/server/templates/security/security-handler.contract.js +6 -0
  235. package/dist/server/types/core-events.d.ts +17 -0
  236. package/dist/server/types/core-events.js +2 -0
  237. package/dist/server/types/security.types.d.ts +7 -0
  238. package/dist/server/types/security.types.js +2 -0
  239. package/dist/shared/index.d.ts +1 -0
  240. package/dist/shared/index.js +17 -0
  241. package/dist/shared/logger/core-logger.d.ts +35 -0
  242. package/dist/shared/logger/core-logger.js +52 -0
  243. package/dist/shared/logger/index.d.ts +11 -0
  244. package/dist/shared/logger/index.js +26 -0
  245. package/dist/shared/logger/logger.config.d.ts +47 -0
  246. package/dist/shared/logger/logger.config.js +33 -0
  247. package/dist/shared/logger/logger.service.d.ts +161 -0
  248. package/dist/shared/logger/logger.service.js +279 -0
  249. package/dist/shared/logger/logger.types.d.ts +85 -0
  250. package/dist/shared/logger/logger.types.js +74 -0
  251. package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
  252. package/dist/shared/logger/transports/buffered.transport.js +174 -0
  253. package/dist/shared/logger/transports/console.transport.d.ts +37 -0
  254. package/dist/shared/logger/transports/console.transport.js +134 -0
  255. package/dist/shared/logger/transports/index.d.ts +3 -0
  256. package/dist/shared/logger/transports/index.js +19 -0
  257. package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
  258. package/dist/shared/logger/transports/transport.interface.js +2 -0
  259. package/dist/system/class-constructor.d.ts +1 -0
  260. package/dist/system/class-constructor.js +2 -0
  261. package/dist/system/decorator-processor.d.ts +4 -0
  262. package/dist/system/decorator-processor.js +2 -0
  263. package/dist/system/metadata.scanner.d.ts +7 -0
  264. package/dist/system/metadata.scanner.js +45 -0
  265. package/dist/utils/errors.d.ts +14 -0
  266. package/dist/utils/errors.js +25 -0
  267. package/dist/utils/index.d.ts +4 -0
  268. package/dist/utils/index.js +20 -0
  269. package/dist/utils/result.d.ts +12 -0
  270. package/dist/utils/result.js +10 -0
  271. package/dist/utils/rgb.d.ts +5 -0
  272. package/dist/utils/rgb.js +2 -0
  273. package/dist/utils/vector3.d.ts +13 -0
  274. package/dist/utils/vector3.js +27 -0
  275. package/package.json +70 -0
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Database Module Types
4
+ *
5
+ * Core types for the database abstraction layer.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Database Module Re-export
3
+ *
4
+ * This file re-exports the database module for backwards compatibility.
5
+ * Prefer importing directly from '@open-core/framework/server' or './database/index'
6
+ */
7
+ export * from './database/index';
@@ -0,0 +1,23 @@
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
+ /**
18
+ * Database Module Re-export
19
+ *
20
+ * This file re-exports the database module for backwards compatibility.
21
+ * Prefer importing directly from '@open-core/framework/server' or './database/index'
22
+ */
23
+ __exportStar(require("./database/index"), exports);
@@ -0,0 +1,2 @@
1
+ export type BindingScope = 'singleton' | 'transient';
2
+ export declare function Bind(scope?: BindingScope): (target: any) => void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Bind = Bind;
4
+ const tsyringe_1 = require("tsyringe");
5
+ function Bind(scope = 'singleton') {
6
+ return function (target) {
7
+ (0, tsyringe_1.injectable)()(target);
8
+ if (scope === 'singleton') {
9
+ (0, tsyringe_1.singleton)()(target);
10
+ }
11
+ else {
12
+ (0, tsyringe_1.scoped)(tsyringe_1.Lifecycle.ResolutionScoped)(target);
13
+ }
14
+ };
15
+ }
@@ -0,0 +1,19 @@
1
+ import type { ClassConstructor } from '../../system/class-constructor';
2
+ import type z from 'zod';
3
+ export interface CommandConfig {
4
+ name: string;
5
+ description?: string;
6
+ usage?: string;
7
+ schema?: z.ZodType;
8
+ }
9
+ export interface CommandMetadata extends CommandConfig {
10
+ methodName: string;
11
+ target: ClassConstructor;
12
+ }
13
+ /**
14
+ * Decorator used to mark a controller method as a command.
15
+ * The metadata is collected and later bound to FiveM via RegisterCommand().
16
+ *
17
+ * @param name - The command name (e.g. "revive", "deposit")
18
+ */
19
+ export declare function Command(configOrName: string | CommandConfig): (target: any, propertyKey: string) => void;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Command = Command;
4
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
+ /**
6
+ * Decorator used to mark a controller method as a command.
7
+ * The metadata is collected and later bound to FiveM via RegisterCommand().
8
+ *
9
+ * @param name - The command name (e.g. "revive", "deposit")
10
+ */
11
+ function Command(configOrName) {
12
+ return (target, propertyKey) => {
13
+ // Normalizamos: si pasa solo un string, creamos el objeto config
14
+ const config = typeof configOrName === 'string' ? { name: configOrName } : configOrName;
15
+ const metadata = Object.assign(Object.assign({}, config), { methodName: propertyKey, target: target.constructor });
16
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.COMMAND, metadata, target, propertyKey);
17
+ };
18
+ }
@@ -0,0 +1,3 @@
1
+ import type { ClassConstructor } from '../../system/class-constructor';
2
+ export declare const serverControllerRegistry: ClassConstructor[];
3
+ export declare function Controller(): (target: ClassConstructor) => void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serverControllerRegistry = void 0;
4
+ exports.Controller = Controller;
5
+ const tsyringe_1 = require("tsyringe");
6
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
7
+ exports.serverControllerRegistry = [];
8
+ function Controller() {
9
+ return function (target) {
10
+ (0, tsyringe_1.injectable)()(target);
11
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.CONTROLLER, { type: 'server' }, target);
12
+ exports.serverControllerRegistry.push(target);
13
+ };
14
+ }
@@ -0,0 +1,2 @@
1
+ import type { CoreEventMap } from '../types/core-events';
2
+ export declare function OnCoreEvent<K extends keyof CoreEventMap>(event: K): (target: any, propertyKey: string) => void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnCoreEvent = OnCoreEvent;
4
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
+ function OnCoreEvent(event) {
6
+ return (target, propertyKey) => {
7
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.CORE_EVENT, { event }, target, propertyKey);
8
+ };
9
+ }
@@ -0,0 +1 @@
1
+ export declare function Export(name?: string): (target: any, propertyKey: string) => void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Export = Export;
4
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
+ function Export(name) {
6
+ return (target, propertyKey) => {
7
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.EXPORT, { exportName: name || propertyKey }, target, propertyKey);
8
+ };
9
+ }
@@ -0,0 +1,5 @@
1
+ export interface GuardOptions {
2
+ rank?: number;
3
+ permission?: string;
4
+ }
5
+ export declare function Guard(options: GuardOptions): (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => PropertyDescriptor | undefined;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Guard = Guard;
4
+ const container_1 = require("../container");
5
+ const services_1 = require("../services");
6
+ const logger_1 = require("../../shared/logger");
7
+ function Guard(options) {
8
+ return function (target, propertyKey, descriptor) {
9
+ var _a;
10
+ if (!descriptor) {
11
+ // In benchmarks or edge cases, only register metadata without method wrapping
12
+ // This should NOT happen in production code with proper TypeScript compilation
13
+ logger_1.loggers.security.warn(`@Guard decorator: PropertyDescriptor not available. Only metadata will be registered. This should not happen in production code. Target: ${(_a = target.constructor) === null || _a === void 0 ? void 0 : _a.name}, Method: ${propertyKey}`);
14
+ Reflect.defineMetadata('core:guard', options, target, propertyKey);
15
+ return;
16
+ }
17
+ const originalMethod = descriptor.value;
18
+ descriptor.value = async function (...args) {
19
+ var _a;
20
+ const player = args[0];
21
+ if (!player || !player.clientID) {
22
+ logger_1.loggers.security.warn(`@Guard misuse: First argument is not a Player`, {
23
+ method: propertyKey,
24
+ targetClass: (_a = target.constructor) === null || _a === void 0 ? void 0 : _a.name,
25
+ });
26
+ throw new Error('Guard Security Error: Context is not a player');
27
+ }
28
+ const accessControl = container_1.di.resolve(services_1.AccessControlService);
29
+ await accessControl.enforce(player, {
30
+ minRank: options.rank,
31
+ permission: options.permission,
32
+ });
33
+ return originalMethod.apply(this, args);
34
+ };
35
+ // no need a defined metadata key, as we won't read it later
36
+ Reflect.defineMetadata('core:guard', options, target, propertyKey);
37
+ return descriptor;
38
+ };
39
+ }
@@ -0,0 +1,10 @@
1
+ export * from './bind';
2
+ export * from './utils';
3
+ export * from './command';
4
+ export * from './coreEvent';
5
+ export * from './netEvent';
6
+ export * from './onTick';
7
+ export * from './controller';
8
+ export * from './throttle';
9
+ export * from './guard';
10
+ export * from './requiresState';
@@ -0,0 +1,26 @@
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("./bind"), exports);
18
+ __exportStar(require("./utils"), exports);
19
+ __exportStar(require("./command"), exports);
20
+ __exportStar(require("./coreEvent"), exports);
21
+ __exportStar(require("./netEvent"), exports);
22
+ __exportStar(require("./onTick"), exports);
23
+ __exportStar(require("./controller"), exports);
24
+ __exportStar(require("./throttle"), exports);
25
+ __exportStar(require("./guard"), exports);
26
+ __exportStar(require("./requiresState"), exports);
@@ -0,0 +1,36 @@
1
+ import type { z } from 'zod';
2
+ export interface NetEventOptions {
3
+ eventName: string;
4
+ schema?: z.ZodType;
5
+ }
6
+ /**
7
+ * Decorator used to register a server-side NetEvent handler.
8
+ *
9
+ * ## Player Injection
10
+ * The handler method will **always receive a `ServerPlayer` instance as its
11
+ * first argument**, automatically resolved by the Core based on the client
12
+ * that triggered the event.
13
+ *
14
+ * This means you do NOT need to read `source`, `global.source` or call
15
+ * `GetPlayerIdentifier()`: the Core resolves the player for you.
16
+ *
17
+ * ## Example
18
+ * ```ts
19
+ * export class AuthServerController {
20
+ * @OnNet('auth:loginAttempt')
21
+ * handleLogin(player: ServerPlayer, username: string, password: string) {
22
+ * console.log(player.name, 'is trying to log in');
23
+ * }
24
+ * }
25
+ * ```
26
+ *
27
+ * ## Event Arguments
28
+ * Any arguments sent from the client will be passed **after** the `ServerPlayer`
29
+ * instance:
30
+ *
31
+ * client → emitNet("auth:loginAttempt", username, password)
32
+ * server → handler(player, username, password)
33
+ *
34
+ * @param eventName - The name of the network event to listen for.
35
+ */
36
+ export declare function OnNet(eventName: string, schema?: z.ZodType): (target: any, propertyKey: string) => void;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnNet = OnNet;
4
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
+ /**
6
+ * Decorator used to register a server-side NetEvent handler.
7
+ *
8
+ * ## Player Injection
9
+ * The handler method will **always receive a `ServerPlayer` instance as its
10
+ * first argument**, automatically resolved by the Core based on the client
11
+ * that triggered the event.
12
+ *
13
+ * This means you do NOT need to read `source`, `global.source` or call
14
+ * `GetPlayerIdentifier()`: the Core resolves the player for you.
15
+ *
16
+ * ## Example
17
+ * ```ts
18
+ * export class AuthServerController {
19
+ * @OnNet('auth:loginAttempt')
20
+ * handleLogin(player: ServerPlayer, username: string, password: string) {
21
+ * console.log(player.name, 'is trying to log in');
22
+ * }
23
+ * }
24
+ * ```
25
+ *
26
+ * ## Event Arguments
27
+ * Any arguments sent from the client will be passed **after** the `ServerPlayer`
28
+ * instance:
29
+ *
30
+ * client → emitNet("auth:loginAttempt", username, password)
31
+ * server → handler(player, username, password)
32
+ *
33
+ * @param eventName - The name of the network event to listen for.
34
+ */
35
+ function OnNet(eventName, schema) {
36
+ return (target, propertyKey) => {
37
+ const metadata = { eventName, schema };
38
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.NET_EVENT, metadata, target, propertyKey);
39
+ };
40
+ }
@@ -0,0 +1 @@
1
+ export declare function OnTick(): (target: any, propertyKey: string) => void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnTick = OnTick;
4
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
+ function OnTick() {
6
+ return (target, propertyKey) => {
7
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.TICK, {}, target, propertyKey);
8
+ };
9
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * **Only works on NetEvents in Server-side**
3
+ *
4
+ * Marks an endpoint as publicly accessible (no authentication required).
5
+ * Use only for login, register, or public info endpoints.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * class AuthServerController {
10
+ * @ Server.Public()
11
+ * @ Server.OnNet('auth:login')
12
+ * async login(player: Server.Player, credentials: AuthCredentials) { ... }
13
+ * }
14
+ * ```
15
+ * */
16
+ export declare function Public(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Public = Public;
4
+ const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
+ /**
6
+ * **Only works on NetEvents in Server-side**
7
+ *
8
+ * Marks an endpoint as publicly accessible (no authentication required).
9
+ * Use only for login, register, or public info endpoints.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * class AuthServerController {
14
+ * @ Server.Public()
15
+ * @ Server.OnNet('auth:login')
16
+ * async login(player: Server.Player, credentials: AuthCredentials) { ... }
17
+ * }
18
+ * ```
19
+ * */
20
+ function Public() {
21
+ return function (target, propertyKey, descriptor) {
22
+ Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.PUBLIC, true, target, propertyKey);
23
+ return descriptor;
24
+ };
25
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Configuration options for state validation requirements.
3
+ * Defines the logical constraints (whitelist/blacklist) applied to the player's current state flags.
4
+ */
5
+ export interface StateRequirement {
6
+ /**
7
+ * **Whitelist:** The player **MUST** possess ALL of these states to proceed.
8
+ * If the player is missing any one of these, the execution is blocked.
9
+ * @example ['on_duty_police', 'in_vehicle']
10
+ */
11
+ has?: string[];
12
+ /**
13
+ * **Blacklist:** The player **MUST NOT** possess ANY of these states to proceed.
14
+ * If the player has any one of these, the execution is blocked.
15
+ * @example ['dead', 'cuffed', 'unconscious']
16
+ */
17
+ missing?: string[];
18
+ /**
19
+ * A custom message to display to the client if validation fails.
20
+ * If omitted, a default generic message will be generated based on the missing/conflicting state.
21
+ */
22
+ errorMessage?: string;
23
+ }
24
+ /**
25
+ * **Game State Guard Decorator**
26
+ *
27
+ * A method decorator that enforces game logic constraints based on the player's dynamic states.
28
+ * It intercepts the method call and validates the player's flags (e.g., 'dead', 'cuffed', 'driving')
29
+ * before allowing the controller logic to execute.
30
+ *
31
+ * @remarks
32
+ * - This decorator assumes the **first argument** of the decorated method is a `Server.Player` instance.
33
+ * - It throws a `GAME_STATE_ERROR` (AppError) if requirements are not met, which should be caught by the global error handler.
34
+ *
35
+ * @param req - The state requirements configuration (whitelist and/or blacklist).
36
+ *
37
+ * @throws {Error} If the decorated method is called without a valid Player context (Server-side logic error).
38
+ * @throws {AppError} If the player fails the state validation (Client-facing logic error).
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * // Example 1: Action requires being alive (not dead) and not handcuffed
43
+ * @RequiresState({ missing: ['dead', 'cuffed'] })
44
+ * openInventory(player: Server.Player) { ... }
45
+ *
46
+ * // Example 2: Action requires being a police officer on duty
47
+ * @RequiresState({
48
+ * has: ['police_duty'],
49
+ * missing: ['dead'],
50
+ * errorMessage: 'You must be on duty to access the armory.'
51
+ * })
52
+ * openArmory(player: Server.Player) { ... }
53
+ * ```
54
+ */
55
+ export declare function RequiresState(req: StateRequirement): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequiresState = RequiresState;
4
+ const utils_1 = require("../../utils");
5
+ /**
6
+ * **Game State Guard Decorator**
7
+ *
8
+ * A method decorator that enforces game logic constraints based on the player's dynamic states.
9
+ * It intercepts the method call and validates the player's flags (e.g., 'dead', 'cuffed', 'driving')
10
+ * before allowing the controller logic to execute.
11
+ *
12
+ * @remarks
13
+ * - This decorator assumes the **first argument** of the decorated method is a `Server.Player` instance.
14
+ * - It throws a `GAME_STATE_ERROR` (AppError) if requirements are not met, which should be caught by the global error handler.
15
+ *
16
+ * @param req - The state requirements configuration (whitelist and/or blacklist).
17
+ *
18
+ * @throws {Error} If the decorated method is called without a valid Player context (Server-side logic error).
19
+ * @throws {AppError} If the player fails the state validation (Client-facing logic error).
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * // Example 1: Action requires being alive (not dead) and not handcuffed
24
+ * @RequiresState({ missing: ['dead', 'cuffed'] })
25
+ * openInventory(player: Server.Player) { ... }
26
+ *
27
+ * // Example 2: Action requires being a police officer on duty
28
+ * @RequiresState({
29
+ * has: ['police_duty'],
30
+ * missing: ['dead'],
31
+ * errorMessage: 'You must be on duty to access the armory.'
32
+ * })
33
+ * openArmory(player: Server.Player) { ... }
34
+ * ```
35
+ */
36
+ function RequiresState(req) {
37
+ return function (target, propertyKey, descriptor) {
38
+ const originalMethod = descriptor.value;
39
+ descriptor.value = async function (...args) {
40
+ const player = args[0];
41
+ if (!player) {
42
+ throw new Error(`@RequiresState used on ${propertyKey} without Player context`);
43
+ }
44
+ if (req.has) {
45
+ for (const state of req.has) {
46
+ if (!player.hasState(state)) {
47
+ throw new utils_1.AppError('GAME_STATE_ERROR', req.errorMessage || `You must be [${state}] to do this.`, 'client');
48
+ }
49
+ }
50
+ }
51
+ if (req.missing) {
52
+ for (const state of req.missing) {
53
+ if (player.hasState(state)) {
54
+ throw new utils_1.AppError('GAME_STATE_ERROR', req.errorMessage || `You can't do this while you're [${state}].`, 'client');
55
+ }
56
+ }
57
+ }
58
+ return originalMethod.apply(this, args);
59
+ };
60
+ return descriptor;
61
+ };
62
+ }
@@ -0,0 +1,9 @@
1
+ import type { SecurityAction } from '../types/security.types';
2
+ interface ThrottleOptions {
3
+ limit: number;
4
+ windowMs: number;
5
+ onExceed?: SecurityAction;
6
+ message?: string;
7
+ }
8
+ export declare function Throttle(optionsOrLimit: number | ThrottleOptions, windowMs?: number): (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => PropertyDescriptor | undefined;
9
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Throttle = Throttle;
4
+ const tsyringe_1 = require("tsyringe");
5
+ const rate_limiter_service_1 = require("../services/rate-limiter.service");
6
+ const utils_1 = require("../../utils");
7
+ function Throttle(optionsOrLimit, windowMs) {
8
+ return function (target, propertyKey, descriptor) {
9
+ if (!descriptor) {
10
+ // In benchmarks or edge cases, skip method wrapping
11
+ // This should NOT happen in production code with proper TypeScript compilation
12
+ // Note: Throttle cannot work without descriptor, so we just skip it
13
+ return;
14
+ }
15
+ const originalMethod = descriptor.value;
16
+ let opts;
17
+ if (typeof optionsOrLimit === 'number') {
18
+ opts = { limit: optionsOrLimit, windowMs: windowMs || 1000, onExceed: 'LOG' };
19
+ }
20
+ else {
21
+ opts = Object.assign({ onExceed: 'LOG' }, optionsOrLimit);
22
+ }
23
+ descriptor.value = async function (...args) {
24
+ const player = args[0];
25
+ if (player === null || player === void 0 ? void 0 : player.clientID) {
26
+ const service = tsyringe_1.container.resolve(rate_limiter_service_1.RateLimiterService);
27
+ const key = `${player.clientID}:${target.constructor.name}:${propertyKey}`;
28
+ if (!service.checkLimit(key, opts.limit, opts.windowMs)) {
29
+ throw new utils_1.SecurityError(opts.onExceed, opts.message || `Rate limit exceeded on ${propertyKey}`, { limit: opts.limit, key });
30
+ }
31
+ }
32
+ return originalMethod.apply(this, args);
33
+ };
34
+ return descriptor;
35
+ };
36
+ }
@@ -0,0 +1,7 @@
1
+ import type { BindingScope } from './bind';
2
+ export declare function Service(options?: {
3
+ scope?: BindingScope;
4
+ }): (target: any) => void;
5
+ export declare function Repo(options?: {
6
+ scope?: BindingScope;
7
+ }): (target: any) => void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Service = Service;
4
+ exports.Repo = Repo;
5
+ const bind_1 = require("./bind");
6
+ function Service(options) {
7
+ var _a;
8
+ return (0, bind_1.Bind)((_a = options === null || options === void 0 ? void 0 : options.scope) !== null && _a !== void 0 ? _a : 'singleton');
9
+ }
10
+ function Repo(options) {
11
+ var _a;
12
+ return (0, bind_1.Bind)((_a = options === null || options === void 0 ? void 0 : options.scope) !== null && _a !== void 0 ? _a : 'singleton');
13
+ }
@@ -0,0 +1 @@
1
+ export * from './player';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./player"), exports);