@open-core/framework 0.2.8 → 0.3.0

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 (323) hide show
  1. package/README.md +10 -0
  2. package/dist/adapters/contracts/IPlatformCapabilities.d.ts +79 -0
  3. package/dist/adapters/contracts/IPlatformCapabilities.js +31 -0
  4. package/dist/adapters/contracts/IPlayerInfo.d.ts +1 -1
  5. package/dist/adapters/contracts/{IPedAppearanceClient.d.ts → client/IPedAppearanceClient.d.ts} +1 -1
  6. package/dist/adapters/contracts/server/IEntityServer.d.ts +188 -0
  7. package/dist/adapters/contracts/server/IEntityServer.js +39 -0
  8. package/dist/adapters/contracts/{IPlayerServer.d.ts → server/IPlayerServer.d.ts} +52 -9
  9. package/dist/adapters/contracts/server/IPlayerServer.js +39 -0
  10. package/dist/adapters/contracts/types/identifier.d.ts +67 -0
  11. package/dist/adapters/contracts/types/identifier.js +64 -0
  12. package/dist/adapters/contracts/types/index.d.ts +1 -0
  13. package/dist/{kernel/shared/appearance → adapters/contracts/types}/index.js +1 -1
  14. package/dist/adapters/fivem/fivem-capabilities.d.ts +18 -0
  15. package/dist/adapters/fivem/fivem-capabilities.js +67 -0
  16. package/dist/adapters/fivem/fivem-engine-events.js +17 -4
  17. package/dist/adapters/fivem/fivem-entity-server.d.ts +6 -2
  18. package/dist/adapters/fivem/fivem-entity-server.js +14 -1
  19. package/dist/adapters/fivem/fivem-ped-appearance-client.d.ts +1 -1
  20. package/dist/adapters/fivem/fivem-ped-appearance-client.js +1 -1
  21. package/dist/adapters/fivem/fivem-ped-appearance-server.d.ts +1 -1
  22. package/dist/adapters/fivem/fivem-ped-appearance-server.js +1 -1
  23. package/dist/adapters/fivem/fivem-platform.d.ts +5 -0
  24. package/dist/adapters/fivem/fivem-platform.js +100 -0
  25. package/dist/adapters/fivem/fivem-player-server.d.ts +7 -1
  26. package/dist/adapters/fivem/fivem-player-server.js +19 -1
  27. package/dist/adapters/fivem/fivem-playerinfo.d.ts +1 -1
  28. package/dist/adapters/fivem/fivem-vehicle-server.d.ts +1 -1
  29. package/dist/adapters/fivem/fivem-vehicle-server.js +1 -1
  30. package/dist/adapters/fivem/index.d.ts +13 -0
  31. package/dist/adapters/fivem/index.js +31 -0
  32. package/dist/adapters/index.d.ts +8 -7
  33. package/dist/adapters/index.js +13 -12
  34. package/dist/adapters/node/index.d.ts +5 -0
  35. package/dist/adapters/node/index.js +13 -1
  36. package/dist/adapters/node/node-capabilities.d.ts +19 -0
  37. package/dist/adapters/node/node-capabilities.js +54 -0
  38. package/dist/adapters/node/node-entity-server.d.ts +17 -6
  39. package/dist/adapters/node/node-entity-server.js +41 -15
  40. package/dist/adapters/node/node-net-transport.js +2 -2
  41. package/dist/adapters/node/node-ped-appearance-client.d.ts +1 -1
  42. package/dist/adapters/node/node-ped-appearance-client.js +1 -1
  43. package/dist/adapters/node/node-ped-appearance-server.d.ts +1 -1
  44. package/dist/adapters/node/node-ped-appearance-server.js +1 -1
  45. package/dist/adapters/node/node-platform.d.ts +5 -0
  46. package/dist/adapters/node/node-platform.js +103 -0
  47. package/dist/adapters/node/node-player-server.d.ts +19 -3
  48. package/dist/adapters/node/node-player-server.js +43 -9
  49. package/dist/adapters/node/node-playerinfo.d.ts +2 -2
  50. package/dist/adapters/node/node-playerinfo.js +14 -3
  51. package/dist/adapters/node/node-vehicle-server.d.ts +1 -1
  52. package/dist/adapters/node/node-vehicle-server.js +1 -1
  53. package/dist/adapters/platform/index.d.ts +1 -0
  54. package/dist/{runtime/server/database.js → adapters/platform/index.js} +1 -7
  55. package/dist/adapters/platform/platform-registry.d.ts +101 -0
  56. package/dist/adapters/platform/platform-registry.js +122 -0
  57. package/dist/adapters/register-capabilities.d.ts +52 -2
  58. package/dist/adapters/register-capabilities.js +69 -130
  59. package/dist/adapters/register-client-capabilities.js +1 -1
  60. package/dist/index.d.ts +2 -5
  61. package/dist/index.js +5 -31
  62. package/dist/kernel/di/container.d.ts +4 -2
  63. package/dist/kernel/di/container.js +5 -3
  64. package/dist/kernel/di/metadata.scanner.d.ts +2 -1
  65. package/dist/kernel/di/metadata.scanner.js +3 -2
  66. package/dist/kernel/{utils/error → error}/app.error.d.ts +2 -2
  67. package/dist/kernel/error/common.error-codes.d.ts +1 -0
  68. package/dist/kernel/error/framework.error-codes.d.ts +12 -0
  69. package/dist/kernel/error/index.d.ts +4 -0
  70. package/dist/kernel/error/index.js +18 -0
  71. package/dist/kernel/{utils/error → error}/security.error.d.ts +1 -1
  72. package/dist/kernel/error/security.types.js +2 -0
  73. package/dist/kernel/index.d.ts +4 -5
  74. package/dist/kernel/index.js +6 -11
  75. package/dist/kernel/{shared/logger → logger}/core-logger.d.ts +0 -19
  76. package/dist/kernel/{shared/logger → logger}/core-logger.js +10 -24
  77. package/dist/kernel/{shared/logger → logger}/logger.env.d.ts +12 -5
  78. package/dist/kernel/{shared/logger → logger}/logger.env.js +29 -13
  79. package/dist/kernel/{shared/logger → logger}/logger.service.d.ts +14 -0
  80. package/dist/kernel/{shared/logger → logger}/logger.service.js +20 -2
  81. package/dist/kernel/logger/transports/transport.interface.js +2 -0
  82. package/dist/kernel/shared/index.d.ts +1 -2
  83. package/dist/kernel/shared/index.js +1 -2
  84. package/dist/kernel/utils/index.d.ts +0 -2
  85. package/dist/kernel/utils/index.js +0 -2
  86. package/dist/kernel/utils/result.d.ts +1 -1
  87. package/dist/runtime/client/api.d.ts +7 -0
  88. package/dist/runtime/client/api.js +23 -0
  89. package/dist/runtime/client/client-bootstrap.js +1 -1
  90. package/dist/runtime/client/controllers/spawner.controller.d.ts +1 -1
  91. package/dist/runtime/client/decorators/index.d.ts +2 -2
  92. package/dist/runtime/client/decorators/index.js +2 -2
  93. package/dist/runtime/client/decorators/key.d.ts +2 -2
  94. package/dist/runtime/client/decorators/key.js +3 -3
  95. package/dist/runtime/client/decorators/localEvent.d.ts +1 -1
  96. package/dist/runtime/client/decorators/localEvent.js +1 -1
  97. package/dist/runtime/client/decorators/{tick.d.ts → onTick.d.ts} +1 -1
  98. package/dist/runtime/client/decorators/{tick.js → onTick.js} +2 -2
  99. package/dist/runtime/client/decorators/{nui.d.ts → onView.d.ts} +4 -4
  100. package/dist/runtime/client/decorators/{nui.js → onView.js} +5 -5
  101. package/dist/runtime/client/index.d.ts +1 -7
  102. package/dist/runtime/client/index.js +26 -12
  103. package/dist/runtime/client/player/player.d.ts +1 -1
  104. package/dist/runtime/client/player/player.loader.js +3 -3
  105. package/dist/runtime/client/services/appearance.service.d.ts +1 -1
  106. package/dist/runtime/client/services/appearance.service.js +1 -1
  107. package/dist/runtime/client/services/blip.service.d.ts +1 -1
  108. package/dist/runtime/client/services/marker.service.d.ts +1 -1
  109. package/dist/runtime/client/services/ped.service.d.ts +1 -1
  110. package/dist/runtime/client/services/spawn.service.d.ts +2 -2
  111. package/dist/runtime/client/services/spawn.service.js +12 -12
  112. package/dist/runtime/client/services/textui.service.d.ts +1 -1
  113. package/dist/runtime/client/services/vehicle-client.service.d.ts +1 -1
  114. package/dist/runtime/client/services/vehicle.service.d.ts +1 -1
  115. package/dist/runtime/client/system/processors/export.processor.js +1 -1
  116. package/dist/runtime/client/system/processors/gameEvent.processor.js +1 -1
  117. package/dist/runtime/client/system/processors/interval.processor.js +1 -1
  118. package/dist/runtime/client/system/processors/localEvent.processor.js +1 -1
  119. package/dist/runtime/client/system/processors/netEvent.processor.js +1 -1
  120. package/dist/runtime/client/system/processors/nui.processor.js +5 -4
  121. package/dist/runtime/client/system/processors/resourceLifecycle.processor.js +1 -1
  122. package/dist/runtime/client/system/processors/tick.processor.js +1 -1
  123. package/dist/runtime/client/ui-bridge.js +1 -1
  124. package/dist/runtime/core/entity.d.ts +168 -0
  125. package/dist/runtime/core/entity.js +226 -0
  126. package/dist/runtime/core/index.d.ts +3 -0
  127. package/dist/runtime/core/index.js +19 -0
  128. package/dist/runtime/core/spatial.d.ts +5 -0
  129. package/dist/runtime/core/spatial.js +2 -0
  130. package/dist/runtime/core/world.d.ts +13 -0
  131. package/dist/runtime/core/world.js +64 -0
  132. package/dist/runtime/server/api.d.ts +12 -0
  133. package/dist/runtime/server/api.js +34 -0
  134. package/dist/runtime/server/bootstrap.js +58 -103
  135. package/dist/runtime/server/bus/internal-event.bus.js +1 -1
  136. package/dist/runtime/server/contracts/index.d.ts +1 -2
  137. package/dist/runtime/server/contracts/index.js +2 -3
  138. package/dist/runtime/server/contracts/player-persistence.contract.d.ts +16 -18
  139. package/dist/runtime/server/contracts/player-persistence.contract.js +16 -18
  140. package/dist/runtime/server/contracts/security/command-error-observer.contract.d.ts +73 -0
  141. package/dist/runtime/server/contracts/security/command-error-observer.contract.js +9 -0
  142. package/dist/runtime/server/contracts/security/permission.types.d.ts +2 -2
  143. package/dist/runtime/server/contracts/security/principal-provider.contract.d.ts +3 -3
  144. package/dist/runtime/server/contracts/security/principal-provider.contract.js +2 -2
  145. package/dist/runtime/server/contracts/security/security-handler.contract.d.ts +2 -2
  146. package/dist/runtime/server/controllers/chat.controller.d.ts +1 -1
  147. package/dist/runtime/server/controllers/chat.controller.js +5 -0
  148. package/dist/runtime/server/controllers/command-export.controller.d.ts +12 -3
  149. package/dist/runtime/server/controllers/command-export.controller.js +81 -25
  150. package/dist/runtime/server/controllers/player-export.controller.d.ts +2 -2
  151. package/dist/runtime/server/controllers/player-export.controller.js +5 -0
  152. package/dist/runtime/server/controllers/principal-export.controller.js +8 -7
  153. package/dist/runtime/server/controllers/ready.controller.d.ts +5 -0
  154. package/dist/runtime/server/controllers/ready.controller.js +37 -0
  155. package/dist/runtime/server/controllers/remote-command-execution.controller.d.ts +10 -1
  156. package/dist/runtime/server/controllers/remote-command-execution.controller.js +65 -13
  157. package/dist/runtime/server/controllers/session.controller.d.ts +2 -2
  158. package/dist/runtime/server/controllers/session.controller.js +25 -17
  159. package/dist/runtime/server/controllers/vehicle.controller.d.ts +3 -38
  160. package/dist/runtime/server/controllers/vehicle.controller.js +6 -152
  161. package/dist/runtime/server/decorators/guard.d.ts +8 -6
  162. package/dist/runtime/server/decorators/guard.js +10 -8
  163. package/dist/runtime/server/decorators/index.d.ts +1 -1
  164. package/dist/runtime/server/decorators/index.js +1 -1
  165. package/dist/runtime/server/decorators/onNet.d.ts +3 -3
  166. package/dist/runtime/server/decorators/{onFiveMEvent.d.ts → onRuntimeEvent.d.ts} +5 -4
  167. package/dist/runtime/server/decorators/{onFiveMEvent.js → onRuntimeEvent.js} +7 -6
  168. package/dist/runtime/server/decorators/requiresState.js +3 -3
  169. package/dist/runtime/server/decorators/throttle.d.ts +1 -1
  170. package/dist/runtime/server/decorators/throttle.js +1 -1
  171. package/dist/runtime/server/decorators/utils.d.ts +1 -1
  172. package/dist/runtime/server/decorators/utils.js +1 -1
  173. package/dist/runtime/server/devmode/dev-mode.service.d.ts +7 -8
  174. package/dist/runtime/server/devmode/dev-mode.service.js +18 -46
  175. package/dist/runtime/server/devmode/index.d.ts +1 -3
  176. package/dist/runtime/server/devmode/index.js +1 -18
  177. package/dist/runtime/server/devmode/player-simulator.service.js +3 -3
  178. package/dist/runtime/server/devmode/state-inspector.service.js +2 -2
  179. package/dist/runtime/server/devmode/types.d.ts +67 -31
  180. package/dist/runtime/server/devmode/types.js +1 -4
  181. package/dist/runtime/server/entities/player.d.ts +80 -66
  182. package/dist/runtime/server/entities/player.js +137 -98
  183. package/dist/runtime/server/entities/vehicle.d.ts +3 -3
  184. package/dist/runtime/server/error-handler.js +5 -5
  185. package/dist/runtime/server/helpers/normalize-app-error.d.ts +9 -0
  186. package/dist/runtime/server/helpers/normalize-app-error.js +20 -0
  187. package/dist/runtime/server/helpers/resolve-method.js +3 -3
  188. package/dist/runtime/server/index.d.ts +1 -13
  189. package/dist/runtime/server/index.js +25 -23
  190. package/dist/runtime/server/runtime.d.ts +32 -281
  191. package/dist/runtime/server/runtime.js +46 -60
  192. package/dist/runtime/server/services/appearance.service.d.ts +5 -5
  193. package/dist/runtime/server/services/appearance.service.js +5 -5
  194. package/dist/runtime/server/services/chat.service.d.ts +5 -3
  195. package/dist/runtime/server/services/chat.service.js +17 -12
  196. package/dist/runtime/server/services/core/command.service.d.ts +9 -1
  197. package/dist/runtime/server/services/core/command.service.js +16 -7
  198. package/dist/runtime/server/services/core/player.service.d.ts +12 -16
  199. package/dist/runtime/server/services/core/player.service.js +42 -47
  200. package/dist/runtime/server/services/core/principal.service.js +5 -5
  201. package/dist/runtime/server/services/core/session-recovery.service.d.ts +1 -1
  202. package/dist/runtime/server/services/core/session-recovery.service.js +2 -2
  203. package/dist/runtime/server/services/default/default-command-error-observer.d.ts +14 -0
  204. package/dist/runtime/server/services/default/default-command-error-observer.js +43 -0
  205. package/dist/runtime/server/services/default/default-principal.provider.d.ts +13 -0
  206. package/dist/runtime/server/services/default/default-principal.provider.js +38 -0
  207. package/dist/runtime/server/services/default/default-security.handler.d.ts +1 -1
  208. package/dist/runtime/server/services/default/default-security.handler.js +1 -1
  209. package/dist/runtime/server/services/index.d.ts +0 -3
  210. package/dist/runtime/server/services/index.js +1 -6
  211. package/dist/runtime/server/services/parallel/index.d.ts +1 -45
  212. package/dist/runtime/server/services/parallel/index.js +0 -44
  213. package/dist/runtime/server/services/parallel/native-worker.entry.d.ts +1 -0
  214. package/dist/runtime/server/services/parallel/native-worker.entry.js +12 -0
  215. package/dist/runtime/server/services/parallel/parallel-compute.service.d.ts +17 -17
  216. package/dist/runtime/server/services/parallel/parallel-compute.service.js +10 -3
  217. package/dist/runtime/server/services/parallel/types.d.ts +5 -2
  218. package/dist/runtime/server/services/parallel/worker-pool.d.ts +5 -9
  219. package/dist/runtime/server/services/parallel/worker-pool.js +167 -57
  220. package/dist/runtime/server/services/parallel/worker.d.ts +8 -5
  221. package/dist/runtime/server/services/parallel/worker.js +8 -5
  222. package/dist/runtime/server/services/persistence.service.js +3 -3
  223. package/dist/runtime/server/services/ports/command-execution.port.d.ts +7 -0
  224. package/dist/runtime/server/services/ports/principal.port.d.ts +1 -1
  225. package/dist/runtime/server/services/remote/remote-command.service.d.ts +1 -0
  226. package/dist/runtime/server/services/remote/remote-command.service.js +7 -3
  227. package/dist/runtime/server/services/remote/remote-player.service.d.ts +2 -2
  228. package/dist/runtime/server/services/remote/remote-player.service.js +3 -3
  229. package/dist/runtime/server/services/remote/server-bridge.js +2 -2
  230. package/dist/runtime/server/services/services.register.d.ts +2 -5
  231. package/dist/runtime/server/services/services.register.js +29 -41
  232. package/dist/runtime/server/services/vehicle-modification.service.js +1 -1
  233. package/dist/runtime/server/services/vehicle.service.d.ts +3 -3
  234. package/dist/runtime/server/services/vehicle.service.js +5 -5
  235. package/dist/runtime/server/setup.d.ts +2 -3
  236. package/dist/runtime/server/setup.js +10 -11
  237. package/dist/runtime/server/system/metadata-server.keys.d.ts +1 -1
  238. package/dist/runtime/server/system/metadata-server.keys.js +1 -1
  239. package/dist/runtime/server/system/processors/command.processor.js +4 -0
  240. package/dist/runtime/server/system/processors/export.processor.js +1 -1
  241. package/dist/runtime/server/system/processors/internalEvent.processor.js +1 -1
  242. package/dist/runtime/server/system/processors/netEvent.processor.js +8 -9
  243. package/dist/runtime/server/system/processors/{fivemEvent.processor.d.ts → runtimeEvent.processor.d.ts} +1 -1
  244. package/dist/runtime/server/system/processors/{fivemEvent.processor.js → runtimeEvent.processor.js} +8 -8
  245. package/dist/runtime/server/system/processors/tick.processor.js +1 -1
  246. package/dist/runtime/server/system/processors.register.js +16 -11
  247. package/dist/runtime/server/system/schema-generator.js +2 -2
  248. package/dist/runtime/server/types/core-exports.d.ts +6 -6
  249. package/dist/runtime/server/types/index.d.ts +1 -1
  250. package/dist/runtime/server/types/index.js +1 -1
  251. package/dist/runtime/server/types/internal-events.d.ts +1 -1
  252. package/dist/runtime/server/types/vehicle.types.d.ts +1 -1
  253. package/package.json +8 -16
  254. package/dist/adapters/contracts/IEntityServer.d.ts +0 -88
  255. package/dist/adapters/contracts/IEntityServer.js +0 -13
  256. package/dist/adapters/contracts/IPlayerServer.js +0 -13
  257. package/dist/adapters/database/oxmysql.adapter.d.ts +0 -89
  258. package/dist/adapters/database/oxmysql.adapter.js +0 -149
  259. package/dist/adapters/database/resource.adapter.d.ts +0 -12
  260. package/dist/adapters/database/resource.adapter.js +0 -68
  261. package/dist/kernel/shared/appearance/index.d.ts +0 -1
  262. package/dist/runtime/index.d.ts +0 -2
  263. package/dist/runtime/index.js +0 -39
  264. package/dist/runtime/server/bootstrap.validation.d.ts +0 -12
  265. package/dist/runtime/server/bootstrap.validation.js +0 -104
  266. package/dist/runtime/server/contracts/auth-provider.contract.d.ts +0 -58
  267. package/dist/runtime/server/contracts/auth-provider.contract.js +0 -23
  268. package/dist/runtime/server/contracts/repository/index.d.ts +0 -57
  269. package/dist/runtime/server/contracts/repository/index.js +0 -61
  270. package/dist/runtime/server/contracts/repository/repository.contract.d.ts +0 -224
  271. package/dist/runtime/server/contracts/repository/repository.contract.js +0 -341
  272. package/dist/runtime/server/contracts/repository/repository.types.d.ts +0 -51
  273. package/dist/runtime/server/contracts/repository/repository.types.js +0 -7
  274. package/dist/runtime/server/database/adapter.registry.d.ts +0 -4
  275. package/dist/runtime/server/database/adapter.registry.js +0 -14
  276. package/dist/runtime/server/database/database.contract.d.ts +0 -128
  277. package/dist/runtime/server/database/database.contract.js +0 -29
  278. package/dist/runtime/server/database/database.service.d.ts +0 -188
  279. package/dist/runtime/server/database/database.service.js +0 -287
  280. package/dist/runtime/server/database/index.d.ts +0 -5
  281. package/dist/runtime/server/database/index.js +0 -25
  282. package/dist/runtime/server/database/types.d.ts +0 -67
  283. package/dist/runtime/server/database/types.js +0 -7
  284. package/dist/runtime/server/database.d.ts +0 -7
  285. package/dist/runtime/server/devmode/hot-reload.server.d.ts +0 -74
  286. package/dist/runtime/server/devmode/hot-reload.server.js +0 -261
  287. package/dist/runtime/server/services/config.service.d.ts +0 -75
  288. package/dist/runtime/server/services/config.service.js +0 -116
  289. package/dist/runtime/server/services/http/http.service.d.ts +0 -50
  290. package/dist/runtime/server/services/http/http.service.js +0 -126
  291. /package/dist/adapters/contracts/{IPedAppearanceClient.js → client/IPedAppearanceClient.js} +0 -0
  292. /package/dist/adapters/contracts/{IPedAppearanceServer.d.ts → server/IPedAppearanceServer.d.ts} +0 -0
  293. /package/dist/adapters/contracts/{IPedAppearanceServer.js → server/IPedAppearanceServer.js} +0 -0
  294. /package/dist/adapters/contracts/{IVehicleServer.d.ts → server/IVehicleServer.d.ts} +0 -0
  295. /package/dist/adapters/contracts/{IVehicleServer.js → server/IVehicleServer.js} +0 -0
  296. /package/dist/kernel/{utils/error → error}/app.error.js +0 -0
  297. /package/dist/kernel/{shared/logger/transports/transport.interface.js → error/common.error-codes.js} +0 -0
  298. /package/dist/{runtime/server/types/security.types.js → kernel/error/framework.error-codes.js} +0 -0
  299. /package/dist/kernel/{utils/error → error}/security.error.js +0 -0
  300. /package/dist/{runtime/server/types → kernel/error}/security.types.d.ts +0 -0
  301. /package/dist/kernel/{shared/logger → logger}/index.d.ts +0 -0
  302. /package/dist/kernel/{shared/logger → logger}/index.js +0 -0
  303. /package/dist/kernel/{shared/logger → logger}/logger.config.d.ts +0 -0
  304. /package/dist/kernel/{shared/logger → logger}/logger.config.js +0 -0
  305. /package/dist/kernel/{shared/logger → logger}/logger.types.d.ts +0 -0
  306. /package/dist/kernel/{shared/logger → logger}/logger.types.js +0 -0
  307. /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.d.ts +0 -0
  308. /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.js +0 -0
  309. /package/dist/kernel/{shared/logger → logger}/transports/console.transport.d.ts +0 -0
  310. /package/dist/kernel/{shared/logger → logger}/transports/console.transport.js +0 -0
  311. /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.d.ts +0 -0
  312. /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.js +0 -0
  313. /package/dist/kernel/{shared/logger → logger}/transports/http.transport.d.ts +0 -0
  314. /package/dist/kernel/{shared/logger → logger}/transports/http.transport.js +0 -0
  315. /package/dist/kernel/{shared/logger → logger}/transports/index.d.ts +0 -0
  316. /package/dist/kernel/{shared/logger → logger}/transports/index.js +0 -0
  317. /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.d.ts +0 -0
  318. /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.js +0 -0
  319. /package/dist/kernel/{shared/logger → logger}/transports/transport.interface.d.ts +0 -0
  320. /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.d.ts +0 -0
  321. /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.js +0 -0
  322. /package/dist/kernel/shared/{appearance/appearance.interface.d.ts → player-appearance.types.d.ts} +0 -0
  323. /package/dist/kernel/shared/{appearance/appearance.interface.js → player-appearance.types.js} +0 -0
@@ -0,0 +1,5 @@
1
+ import { Vector3 } from '../../kernel/utils/vector3';
2
+ export interface Spatial {
3
+ getPosition(): Vector3;
4
+ setPosition(v: Vector3): void;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { BaseEntity, EntityId } from './entity';
2
+ export declare class WorldContext {
3
+ private entities;
4
+ private readonly kindIndex;
5
+ add(entity: BaseEntity): void;
6
+ remove(id: EntityId): void;
7
+ get<T extends BaseEntity = BaseEntity>(id: EntityId): T | undefined;
8
+ find<T extends BaseEntity>(predicate: (e: BaseEntity) => e is T): T[];
9
+ find(predicate: (e: BaseEntity) => boolean): BaseEntity[];
10
+ all(): BaseEntity[];
11
+ size(): number;
12
+ sizeBy(kind: string): number;
13
+ }
@@ -0,0 +1,64 @@
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.WorldContext = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ function getKind(id) {
12
+ const i = id.indexOf(':');
13
+ return i === -1 ? id : id.slice(0, i);
14
+ }
15
+ let WorldContext = class WorldContext {
16
+ constructor() {
17
+ this.entities = new Map();
18
+ this.kindIndex = new Map();
19
+ }
20
+ add(entity) {
21
+ var _a;
22
+ // If replacing, remove first to keep index consistent
23
+ const prev = this.entities.get(entity.id);
24
+ if (prev)
25
+ this.remove(entity.id);
26
+ this.entities.set(entity.id, entity);
27
+ const kind = getKind(entity.id);
28
+ this.kindIndex.set(kind, ((_a = this.kindIndex.get(kind)) !== null && _a !== void 0 ? _a : 0) + 1);
29
+ }
30
+ remove(id) {
31
+ const entity = this.entities.get(id);
32
+ if (!entity)
33
+ return;
34
+ const kind = getKind(id);
35
+ const n = this.kindIndex.get(kind);
36
+ if (n !== undefined) {
37
+ if (n <= 1)
38
+ this.kindIndex.delete(kind);
39
+ else
40
+ this.kindIndex.set(kind, n - 1);
41
+ }
42
+ this.entities.delete(id);
43
+ }
44
+ get(id) {
45
+ return this.entities.get(id);
46
+ }
47
+ find(predicate) {
48
+ return [...this.entities.values()].filter(predicate);
49
+ }
50
+ all() {
51
+ return [...this.entities.values()];
52
+ }
53
+ size() {
54
+ return this.entities.size;
55
+ }
56
+ sizeBy(kind) {
57
+ var _a;
58
+ return (_a = this.kindIndex.get(kind)) !== null && _a !== void 0 ? _a : 0;
59
+ }
60
+ };
61
+ exports.WorldContext = WorldContext;
62
+ exports.WorldContext = WorldContext = __decorate([
63
+ (0, tsyringe_1.injectable)()
64
+ ], WorldContext);
@@ -0,0 +1,12 @@
1
+ export { onFrameworkEvent } from './bus/internal-event.bus';
2
+ export * from './configs';
3
+ export * from './contracts/index';
4
+ export { init } from './core';
5
+ export * from './decorators';
6
+ export * from './devmode';
7
+ export * from './entities';
8
+ export * from './runtime';
9
+ export * from './services';
10
+ export * from './setup';
11
+ export * from './templates';
12
+ export type * from './types/internal-events';
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ // Framework modules
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.init = exports.onFrameworkEvent = void 0;
19
+ var internal_event_bus_1 = require("./bus/internal-event.bus");
20
+ Object.defineProperty(exports, "onFrameworkEvent", { enumerable: true, get: function () { return internal_event_bus_1.onFrameworkEvent; } });
21
+ // Configs
22
+ __exportStar(require("./configs"), exports);
23
+ __exportStar(require("./contracts/index"), exports);
24
+ var core_1 = require("./core");
25
+ Object.defineProperty(exports, "init", { enumerable: true, get: function () { return core_1.init; } });
26
+ __exportStar(require("./decorators"), exports);
27
+ // DevMode (development tools)
28
+ __exportStar(require("./devmode"), exports);
29
+ // Entities
30
+ __exportStar(require("./entities"), exports);
31
+ __exportStar(require("./runtime"), exports);
32
+ __exportStar(require("./services"), exports);
33
+ __exportStar(require("./setup"), exports);
34
+ __exportStar(require("./templates"), exports);
@@ -37,8 +37,7 @@ exports.initServer = initServer;
37
37
  const adapters_1 = require("../../adapters");
38
38
  const register_capabilities_1 = require("../../adapters/register-capabilities");
39
39
  const index_1 = require("../../kernel/di/index");
40
- const logger_1 = require("../../kernel/shared/logger");
41
- const bootstrap_validation_1 = require("./bootstrap.validation");
40
+ const logger_1 = require("../../kernel/logger");
42
41
  const index_2 = require("./contracts/index");
43
42
  const controller_1 = require("./decorators/controller");
44
43
  const runtime_1 = require("./runtime");
@@ -49,22 +48,14 @@ const CORE_WAIT_TIMEOUT = 10000;
49
48
  function checkProviders(ctx) {
50
49
  if (ctx.mode === 'RESOURCE')
51
50
  return;
52
- if (ctx.features.principal.enabled && ctx.features.principal.required) {
53
- if (!index_1.di.isRegistered(index_2.PrincipalProviderContract)) {
51
+ if (ctx.features.principal.enabled) {
52
+ if (!index_1.GLOBAL_CONTAINER.isRegistered(index_2.PrincipalProviderContract)) {
54
53
  const errorMsg = 'No Principal Provider configured. ' +
55
54
  "Please call 'Server.setPrincipalProvider(YourProvider)' before init(). This is required for authorization.";
56
55
  logger_1.loggers.bootstrap.fatal(errorMsg);
57
56
  throw new Error(`[OpenCore] CRITICAL: ${errorMsg}`);
58
57
  }
59
58
  }
60
- if (ctx.features.auth.enabled && ctx.features.auth.required) {
61
- if (!index_1.di.isRegistered(index_2.AuthProviderContract)) {
62
- const errorMsg = 'No Authentication Provider configured. ' +
63
- "Please call 'Server.setAuthProvider(YourProvider)' before init(). This is required for authentication.";
64
- logger_1.loggers.bootstrap.fatal(errorMsg);
65
- throw new Error(`[OpenCore] CRITICAL: ${errorMsg}`);
66
- }
67
- }
68
59
  }
69
60
  async function loadFrameworkControllers(ctx) {
70
61
  if (ctx.features.commands.enabled) {
@@ -89,6 +80,9 @@ async function loadFrameworkControllers(ctx) {
89
80
  if (ctx.features.players.enabled && ctx.features.players.export && ctx.features.exports.enabled) {
90
81
  await Promise.resolve().then(() => __importStar(require('./controllers/player-export.controller')));
91
82
  }
83
+ if (ctx.mode === 'CORE') {
84
+ await Promise.resolve().then(() => __importStar(require('./controllers/ready.controller')));
85
+ }
92
86
  if (ctx.features.principal.enabled &&
93
87
  ctx.features.principal.export &&
94
88
  ctx.features.exports.enabled) {
@@ -120,8 +114,9 @@ async function initServer(options) {
120
114
  mode: ctx.mode,
121
115
  scope: (0, runtime_1.getFrameworkModeScope)(ctx.mode),
122
116
  });
123
- // Adapters
117
+ // Register platform-specific capabilities (adapters)
124
118
  await (0, register_capabilities_1.registerServerCapabilities)();
119
+ logger_1.loggers.bootstrap.debug('Platform capabilities registered');
125
120
  const dependenciesToWaitFor = [];
126
121
  if (ctx.mode === 'RESOURCE') {
127
122
  logger_1.loggers.bootstrap.info(`[WAIT] Standing by for Core '${ctx.coreResourceName}' to be ready...`);
@@ -140,89 +135,20 @@ async function initServer(options) {
140
135
  logger_1.loggers.bootstrap.info(`Core ready detected!`);
141
136
  }
142
137
  logger_1.loggers.bootstrap.debug('Dependencies resolved. Proceeding with system boot.');
138
+ // 1. Register Core Services (WorldContext, PlayerService, etc.)
143
139
  (0, services_register_1.registerServicesServer)(ctx);
144
140
  logger_1.loggers.bootstrap.debug('Core services registered');
141
+ // 2. Load Controllers (Framework & User controllers)
142
+ // This is where user services get registered if they are decorated with @injectable()
143
+ // and imported before init() or discovered here.
144
+ await loadFrameworkControllers(ctx);
145
+ logger_1.loggers.bootstrap.debug('Controllers loaded');
146
+ // 3. Register System Processors (Command, NetEvent, etc.)
147
+ // These processors check if contracts are already registered before applying defaults.
145
148
  (0, processors_register_1.registerSystemServer)(ctx);
146
149
  logger_1.loggers.bootstrap.debug('System processors registered');
147
150
  checkProviders(ctx);
148
- // In RESOURCE mode, verify CORE exports are available before loading controllers
149
- if (ctx.mode === 'RESOURCE') {
150
- const needsCoreExports = ctx.features.players.provider === 'core' ||
151
- ctx.features.commands.provider === 'core' ||
152
- ctx.features.principal.provider === 'core' ||
153
- ctx.features.auth.provider === 'core';
154
- if (needsCoreExports) {
155
- const { coreResourceName } = ctx;
156
- logger_1.loggers.bootstrap.debug(`Verifying CORE exports availability`, {
157
- coreResourceName,
158
- globalExportsKeys: Object.keys(globalThis.exports || {}),
159
- });
160
- // Build list of required exports
161
- const requiredExports = [];
162
- if (ctx.features.commands.provider === 'core') {
163
- requiredExports.push('registerCommand', 'executeCommand', 'getAllCommands');
164
- }
165
- if (ctx.features.players.provider === 'core') {
166
- requiredExports.push('getPlayerId', 'getPlayerData', 'getAllPlayersData', 'getPlayerByAccountId', 'getPlayerCount', 'isPlayerOnline', 'getPlayerMeta', 'setPlayerMeta', 'getPlayerStates', 'hasPlayerState', 'addPlayerState', 'removePlayerState');
167
- }
168
- if (ctx.features.principal.provider === 'core') {
169
- requiredExports.push('getPrincipal', 'getPrincipalByAccountId', 'refreshPrincipal', 'hasPermission', 'hasRank', 'hasAnyPermission', 'hasAllPermissions', 'getPermissions', 'getRank', 'getPrincipalName', 'getPrincipalMeta');
170
- }
171
- logger_1.loggers.bootstrap.debug(`Checking CORE exports`, {
172
- coreResourceName,
173
- requiredExports,
174
- });
175
- // Access exports directly using FiveM's global exports object
176
- const globalExports = globalThis.exports;
177
- if (!globalExports) {
178
- throw new Error(`[OpenCore] FiveM 'exports' global not found. This should never happen in a FiveM environment.`);
179
- }
180
- const coreExports = globalExports[coreResourceName];
181
- // Check each required export directly (can't use Object.keys on FiveM exports proxy)
182
- const missingExports = [];
183
- for (const exportName of requiredExports) {
184
- try {
185
- const exportValue = coreExports === null || coreExports === void 0 ? void 0 : coreExports[exportName];
186
- if (typeof exportValue !== 'function') {
187
- missingExports.push(exportName);
188
- logger_1.loggers.bootstrap.warn(`Export '${exportName}' is not a function`, {
189
- exportName,
190
- type: typeof exportValue,
191
- value: exportValue,
192
- });
193
- }
194
- }
195
- catch (error) {
196
- missingExports.push(exportName);
197
- logger_1.loggers.bootstrap.warn(`Failed to access export '${exportName}'`, {
198
- exportName,
199
- error: error instanceof Error ? error.message : String(error),
200
- });
201
- }
202
- }
203
- if (missingExports.length > 0) {
204
- const errorMsg = `CORE resource '${coreResourceName}' is missing ${missingExports.length} required exports: ${missingExports.join(', ')}\n` +
205
- `\n` +
206
- `This usually means:\n` +
207
- ` 1. The CORE resource failed to initialize properly\n` +
208
- ` 2. The CORE resource doesn't have the 'exports' feature enabled\n` +
209
- ` 3. The CORE resource doesn't have the required features enabled (commands: ${ctx.features.commands.provider === 'core'})\n` +
210
- `\n` +
211
- `Verify in '${coreResourceName}/src/server/server.ts':\n` +
212
- ` - mode: 'CORE'\n` +
213
- ` - features.exports.enabled: true\n` +
214
- ` - features.commands.enabled: true (if using commands)`;
215
- logger_1.loggers.bootstrap.fatal(errorMsg);
216
- throw new Error(`[OpenCore] ${errorMsg}`);
217
- }
218
- }
219
- }
220
- await loadFrameworkControllers(ctx);
221
- if (ctx.features.database.enabled) {
222
- (0, bootstrap_validation_1.registerDefaultBootstrapValidators)();
223
- await (0, bootstrap_validation_1.runBootstrapValidatorsOrThrow)();
224
- }
225
- const scanner = index_1.di.resolve(index_1.MetadataScanner);
151
+ const scanner = index_1.GLOBAL_CONTAINER.resolve(index_1.MetadataScanner);
226
152
  scanner.scan((0, controller_1.getServerControllerRegistry)());
227
153
  // Initialize DevMode if enabled
228
154
  if ((_d = ctx.devMode) === null || _d === void 0 ? void 0 : _d.enabled) {
@@ -233,26 +159,56 @@ async function initServer(options) {
233
159
  runSessionRecovery();
234
160
  }
235
161
  logger_1.loggers.bootstrap.info('OpenCore Server initialized successfully');
236
- if (ctx.mode === 'CORE' && index_1.di.isRegistered(adapters_1.IEngineEvents)) {
237
- const engineInterface = index_1.di.resolve(adapters_1.IEngineEvents);
238
- engineInterface.emit('core:ready');
162
+ if (ctx.mode === 'CORE' &&
163
+ index_1.GLOBAL_CONTAINER.isRegistered(adapters_1.IEngineEvents) &&
164
+ index_1.GLOBAL_CONTAINER.isRegistered(adapters_1.INetTransport)) {
165
+ const engineEvents = index_1.GLOBAL_CONTAINER.resolve(adapters_1.IEngineEvents); // server -> servers
166
+ const net = index_1.GLOBAL_CONTAINER.resolve(adapters_1.INetTransport); // server -> clients
167
+ engineEvents.emit('core:ready'); // Broadcast to all Servers resources
168
+ net.emitNet('core:ready', 'all'); // Broadcast to all Clients resources
169
+ logger_1.loggers.bootstrap.debug(`'core:ready' events emmited to all clients and all servers`);
239
170
  }
240
171
  }
241
172
  function createCoreDependency(coreName) {
242
173
  return new Promise((resolve, reject) => {
243
174
  let resolved = false;
244
- const engineEvents = index_1.di.resolve(adapters_1.IEngineEvents);
175
+ const engineEvents = index_1.GLOBAL_CONTAINER.resolve(adapters_1.IEngineEvents);
245
176
  const cleanup = () => {
246
177
  resolved = true;
247
178
  clearTimeout(timeout);
179
+ clearInterval(pollingInterval);
180
+ };
181
+ // 1. Check if already ready via export (Polling)
182
+ const checkReady = () => {
183
+ var _a, _b;
184
+ if (resolved)
185
+ return;
186
+ try {
187
+ const globalExports = globalThis.exports;
188
+ const isReady = (_b = (_a = globalExports === null || globalExports === void 0 ? void 0 : globalExports[coreName]) === null || _a === void 0 ? void 0 : _a.isCoreReady) === null || _b === void 0 ? void 0 : _b.call(_a);
189
+ if (isReady === true) {
190
+ logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected as already ready via export.`);
191
+ cleanup();
192
+ resolve();
193
+ }
194
+ }
195
+ catch (_c) {
196
+ // Core might not be started yet, ignore
197
+ }
248
198
  };
199
+ const pollingInterval = setInterval(checkReady, 500);
200
+ checkReady(); // Initial check
201
+ // 2. Timeout protection
249
202
  const timeout = setTimeout(() => {
250
203
  if (!resolved) {
251
- reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' within ${CORE_WAIT_TIMEOUT}ms.`));
204
+ cleanup();
205
+ reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' or expose 'isCoreReady' within ${CORE_WAIT_TIMEOUT}ms.`));
252
206
  }
253
207
  }, CORE_WAIT_TIMEOUT);
208
+ // 3. Listen for the event (for resources starting after/during CORE init)
254
209
  const onReady = () => {
255
210
  if (!resolved) {
211
+ logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected via 'core:ready' event.`);
256
212
  cleanup();
257
213
  resolve();
258
214
  }
@@ -293,7 +249,7 @@ async function dependencyResolver(waitFor, onReady) {
293
249
  */
294
250
  function runSessionRecovery() {
295
251
  try {
296
- const recoveryService = index_1.di.resolve(session_recovery_service_1.SessionRecoveryService);
252
+ const recoveryService = index_1.GLOBAL_CONTAINER.resolve(session_recovery_service_1.SessionRecoveryService);
297
253
  const stats = recoveryService.recoverSessions();
298
254
  if (stats.recovered > 0) {
299
255
  logger_1.loggers.bootstrap.info(`[SessionRecovery] Recovered ${stats.recovered} player session(s)`);
@@ -315,15 +271,14 @@ async function initDevMode(config) {
315
271
  const { StateInspectorService } = await Promise.resolve().then(() => __importStar(require('./devmode/state-inspector.service')));
316
272
  const { PlayerSimulatorService } = await Promise.resolve().then(() => __importStar(require('./devmode/player-simulator.service')));
317
273
  // Register DevMode services
318
- index_1.di.registerSingleton(EventInterceptorService, EventInterceptorService);
319
- index_1.di.registerSingleton(StateInspectorService, StateInspectorService);
320
- index_1.di.registerSingleton(PlayerSimulatorService, PlayerSimulatorService);
321
- index_1.di.registerSingleton(DevModeService, DevModeService);
274
+ index_1.GLOBAL_CONTAINER.registerSingleton(EventInterceptorService, EventInterceptorService);
275
+ index_1.GLOBAL_CONTAINER.registerSingleton(StateInspectorService, StateInspectorService);
276
+ index_1.GLOBAL_CONTAINER.registerSingleton(PlayerSimulatorService, PlayerSimulatorService);
277
+ index_1.GLOBAL_CONTAINER.registerSingleton(DevModeService, DevModeService);
322
278
  // Enable DevMode
323
- const devModeService = index_1.di.resolve(DevModeService);
279
+ const devModeService = index_1.GLOBAL_CONTAINER.resolve(DevModeService);
324
280
  await devModeService.enable({
325
281
  enabled: true,
326
- hotReload: config.hotReload,
327
282
  bridge: config.bridge,
328
283
  interceptor: config.interceptor,
329
284
  simulator: config.simulator,
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.onFrameworkEvent = onFrameworkEvent;
4
4
  exports.emitFrameworkEvent = emitFrameworkEvent;
5
- const logger_1 = require("../../../kernel/shared/logger");
5
+ const logger_1 = require("../../../kernel/logger");
6
6
  const handlers = {};
7
7
  function onFrameworkEvent(event, handler) {
8
8
  let list = handlers[event];
@@ -1,6 +1,5 @@
1
- export * from './auth-provider.contract';
2
1
  export * from './player-persistence.contract';
3
- export * from './repository/index';
2
+ export * from './security/command-error-observer.contract';
4
3
  export * from './security/net-event-security-observer.contract';
5
4
  export * from './security/permission.types';
6
5
  export * from './security/principal-provider.contract';
@@ -15,10 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- __exportStar(require("./auth-provider.contract"), exports);
18
+ // Persistence
19
19
  __exportStar(require("./player-persistence.contract"), exports);
20
- // Repository
21
- __exportStar(require("./repository/index"), exports);
20
+ __exportStar(require("./security/command-error-observer.contract"), exports);
22
21
  __exportStar(require("./security/net-event-security-observer.contract"), exports);
23
22
  __exportStar(require("./security/permission.types"), exports);
24
23
  __exportStar(require("./security/principal-provider.contract"), exports);
@@ -36,24 +36,22 @@ export declare const DEFAULT_PERSISTENCE_CONFIG: PersistenceConfig;
36
36
  * }
37
37
  *
38
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
- * }
39
+ // Example: fetch data from your own storage
40
+ // const data = await myStorage.find(player.license)
41
+ // if (data) {
42
+ // player.setMeta('money', data.money)
43
+ // }
44
+ }
45
+
46
+ async onSessionSave(player: Player): Promise<void> {
47
+ // Example: save data to your own storage
48
+ // await myStorage.save(player.license, { money: player.getMeta('money') })
49
+ }
50
+
51
+ async onAutoSave(player: Player): Promise<void> {
52
+ // Can delegate to onSessionSave or implement lighter save logic
53
+ await this.onSessionSave(player)
54
+ }
57
55
  * }
58
56
  * ```
59
57
  */
@@ -26,24 +26,22 @@ exports.DEFAULT_PERSISTENCE_CONFIG = {
26
26
  * }
27
27
  *
28
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
- * }
29
+ // Example: fetch data from your own storage
30
+ // const data = await myStorage.find(player.license)
31
+ // if (data) {
32
+ // player.setMeta('money', data.money)
33
+ // }
34
+ }
35
+
36
+ async onSessionSave(player: Player): Promise<void> {
37
+ // Example: save data to your own storage
38
+ // await myStorage.save(player.license, { money: player.getMeta('money') })
39
+ }
40
+
41
+ async onAutoSave(player: Player): Promise<void> {
42
+ // Can delegate to onSessionSave or implement lighter save logic
43
+ await this.onSessionSave(player)
44
+ }
47
45
  * }
48
46
  * ```
49
47
  */
@@ -0,0 +1,73 @@
1
+ import { AppError } from '../../../../kernel/error';
2
+ import type { CommandMetadata } from '../../decorators/command';
3
+ import type { Player } from '../../entities/player';
4
+ import type { FeatureScope, FrameworkMode } from '../../runtime';
5
+ /**
6
+ * High-level stage where a command error happened.
7
+ *
8
+ * @remarks
9
+ * Useful to drive decisions (e.g. show usage on validation errors).
10
+ */
11
+ export type CommandErrorStage = 'dispatch' | 'auth' | 'security' | 'validation' | 'handler' | 'unknown';
12
+ /**
13
+ * Public-facing command info intended for error reporting.
14
+ */
15
+ export interface CommandErrorCommandInfo {
16
+ command: string;
17
+ description?: string;
18
+ usage?: string;
19
+ isPublic?: boolean;
20
+ methodName?: string;
21
+ expectsPlayer?: boolean;
22
+ paramNames?: string[];
23
+ }
24
+ /**
25
+ * Minimal player identity for error reporting.
26
+ */
27
+ export interface CommandErrorPlayerInfo {
28
+ clientId: number;
29
+ accountId?: string;
30
+ name?: string;
31
+ }
32
+ /**
33
+ * Rich context emitted whenever command execution fails.
34
+ *
35
+ * @remarks
36
+ * The framework does not notify players directly. Consumers can implement
37
+ * {@link CommandErrorObserverContract} to decide how to report errors.
38
+ */
39
+ export interface CommandErrorContext {
40
+ mode: FrameworkMode;
41
+ scope: FeatureScope;
42
+ stage: CommandErrorStage;
43
+ error: AppError;
44
+ commandName: string;
45
+ args: string[];
46
+ player: CommandErrorPlayerInfo;
47
+ /**
48
+ * Optional reference to the Player entity. Useful for custom
49
+ * (e.g. sending a chat message).
50
+ */
51
+ playerRef?: Player;
52
+ /**
53
+ * Best-effort command info (usage/description/etc.) to support.
54
+ */
55
+ command?: CommandErrorCommandInfo;
56
+ /**
57
+ * Raw metadata from the decorator, when available in the current runtime.
58
+ */
59
+ commandMeta?: CommandMetadata;
60
+ /**
61
+ * If the command is owned by a resource (remote command), indicates the owner.
62
+ */
63
+ ownerResourceName?: string;
64
+ }
65
+ /**
66
+ * Global observer contract for command execution errors.
67
+ */
68
+ export declare abstract class CommandErrorObserverContract {
69
+ /**
70
+ * Called whenever command execution fails.
71
+ */
72
+ abstract onError(ctx: CommandErrorContext): Promise<void>;
73
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandErrorObserverContract = void 0;
4
+ /**
5
+ * Global observer contract for command execution errors.
6
+ */
7
+ class CommandErrorObserverContract {
8
+ }
9
+ exports.CommandErrorObserverContract = CommandErrorObserverContract;
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Represents the security identity of a user/player within the framework.
3
- * This interface bridges the gap between the Core framework and your specific database implementation.
3
+ * This interface bridges the gap between the Core framework and your specific implementation.
4
4
  */
5
5
  export interface Principal {
6
6
  /**
7
- * Unique identifier for the user (e.g., database role ID).
7
+ * Unique identifier for the user (e.g., persistent role ID).
8
8
  */
9
9
  id: string;
10
10
  /**
@@ -1,17 +1,17 @@
1
- import { Server } from '../../../..';
1
+ import { Server } from '../..';
2
2
  import { LinkedID } from '../../services/types/linked-id';
3
3
  import { Principal } from './permission.types';
4
4
  /**
5
5
  * **Authorization**
6
6
  *
7
7
  * This abstract class defines how the Security Layer retrieves user permissions.
8
- * The Framework does not know about your database (SQL, Mongo, JSON or API); it relies on
8
+ * The Framework does not know about your persistence layer (SQL, Mongo, JSON or API); it relies on
9
9
  * your implementation of this provider to resolve a `Principal`.
10
10
  *
11
11
  * @example
12
12
  * ```ts
13
13
  * // In your game resource:
14
- * class MyAuthProvider implements PrincipalProviderContract { ... }
14
+ * class MyPrincipal implements PrincipalProviderContract { ... }
15
15
  * ```
16
16
  */
17
17
  export declare abstract class PrincipalProviderContract {
@@ -5,13 +5,13 @@ exports.PrincipalProviderContract = void 0;
5
5
  * **Authorization**
6
6
  *
7
7
  * This abstract class defines how the Security Layer retrieves user permissions.
8
- * The Framework does not know about your database (SQL, Mongo, JSON or API); it relies on
8
+ * The Framework does not know about your persistence layer (SQL, Mongo, JSON or API); it relies on
9
9
  * your implementation of this provider to resolve a `Principal`.
10
10
  *
11
11
  * @example
12
12
  * ```ts
13
13
  * // In your game resource:
14
- * class MyAuthProvider implements PrincipalProviderContract { ... }
14
+ * class MyPrincipal implements PrincipalProviderContract { ... }
15
15
  * ```
16
16
  */
17
17
  class PrincipalProviderContract {
@@ -1,5 +1,5 @@
1
- import { Server } from '../../../..';
2
- import { SecurityError } from '../../../../kernel/utils/error/security.error';
1
+ import { SecurityError } from '../../../../kernel/error/security.error';
2
+ import { Server } from '../../';
3
3
  export declare abstract class SecurityHandlerContract {
4
4
  abstract handleViolation(player: Server.Player, error: SecurityError): Promise<void>;
5
5
  }