@open-core/framework 0.2.9 → 0.3.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 (313) hide show
  1. package/dist/adapters/contracts/IPlatformCapabilities.d.ts +79 -0
  2. package/dist/adapters/contracts/IPlatformCapabilities.js +31 -0
  3. package/dist/adapters/contracts/IPlayerInfo.d.ts +1 -1
  4. package/dist/adapters/contracts/{IPedAppearanceClient.d.ts → client/IPedAppearanceClient.d.ts} +1 -1
  5. package/dist/adapters/contracts/server/IEntityServer.d.ts +188 -0
  6. package/dist/adapters/contracts/server/IEntityServer.js +39 -0
  7. package/dist/adapters/contracts/{IPlayerServer.d.ts → server/IPlayerServer.d.ts} +52 -9
  8. package/dist/adapters/contracts/server/IPlayerServer.js +39 -0
  9. package/dist/adapters/contracts/types/identifier.d.ts +67 -0
  10. package/dist/adapters/contracts/types/identifier.js +64 -0
  11. package/dist/adapters/contracts/types/index.d.ts +1 -0
  12. package/dist/{kernel/shared/appearance → adapters/contracts/types}/index.js +1 -1
  13. package/dist/adapters/fivem/fivem-capabilities.d.ts +18 -0
  14. package/dist/adapters/fivem/fivem-capabilities.js +67 -0
  15. package/dist/adapters/fivem/fivem-engine-events.js +17 -4
  16. package/dist/adapters/fivem/fivem-entity-server.d.ts +6 -2
  17. package/dist/adapters/fivem/fivem-entity-server.js +14 -1
  18. package/dist/adapters/fivem/fivem-ped-appearance-client.d.ts +1 -1
  19. package/dist/adapters/fivem/fivem-ped-appearance-client.js +1 -1
  20. package/dist/adapters/fivem/fivem-ped-appearance-server.d.ts +1 -1
  21. package/dist/adapters/fivem/fivem-ped-appearance-server.js +1 -1
  22. package/dist/adapters/fivem/fivem-platform.d.ts +5 -0
  23. package/dist/adapters/fivem/fivem-platform.js +100 -0
  24. package/dist/adapters/fivem/fivem-player-server.d.ts +7 -1
  25. package/dist/adapters/fivem/fivem-player-server.js +19 -1
  26. package/dist/adapters/fivem/fivem-playerinfo.d.ts +1 -1
  27. package/dist/adapters/fivem/fivem-vehicle-server.d.ts +1 -1
  28. package/dist/adapters/fivem/fivem-vehicle-server.js +1 -1
  29. package/dist/adapters/fivem/index.d.ts +13 -0
  30. package/dist/adapters/fivem/index.js +31 -0
  31. package/dist/adapters/index.d.ts +8 -7
  32. package/dist/adapters/index.js +13 -12
  33. package/dist/adapters/node/index.d.ts +5 -0
  34. package/dist/adapters/node/index.js +13 -1
  35. package/dist/adapters/node/node-capabilities.d.ts +19 -0
  36. package/dist/adapters/node/node-capabilities.js +54 -0
  37. package/dist/adapters/node/node-entity-server.d.ts +17 -6
  38. package/dist/adapters/node/node-entity-server.js +41 -15
  39. package/dist/adapters/node/node-net-transport.js +2 -2
  40. package/dist/adapters/node/node-ped-appearance-client.d.ts +1 -1
  41. package/dist/adapters/node/node-ped-appearance-client.js +1 -1
  42. package/dist/adapters/node/node-ped-appearance-server.d.ts +1 -1
  43. package/dist/adapters/node/node-ped-appearance-server.js +1 -1
  44. package/dist/adapters/node/node-platform.d.ts +5 -0
  45. package/dist/adapters/node/node-platform.js +103 -0
  46. package/dist/adapters/node/node-player-server.d.ts +19 -3
  47. package/dist/adapters/node/node-player-server.js +43 -9
  48. package/dist/adapters/node/node-playerinfo.d.ts +2 -2
  49. package/dist/adapters/node/node-playerinfo.js +14 -3
  50. package/dist/adapters/node/node-vehicle-server.d.ts +1 -1
  51. package/dist/adapters/node/node-vehicle-server.js +1 -1
  52. package/dist/adapters/platform/index.d.ts +1 -0
  53. package/dist/{runtime/server/database.js → adapters/platform/index.js} +1 -7
  54. package/dist/adapters/platform/platform-registry.d.ts +101 -0
  55. package/dist/adapters/platform/platform-registry.js +122 -0
  56. package/dist/adapters/register-capabilities.d.ts +52 -2
  57. package/dist/adapters/register-capabilities.js +69 -130
  58. package/dist/adapters/register-client-capabilities.js +1 -1
  59. package/dist/index.d.ts +2 -5
  60. package/dist/index.js +5 -31
  61. package/dist/kernel/di/container.d.ts +4 -2
  62. package/dist/kernel/di/container.js +5 -3
  63. package/dist/kernel/di/metadata.scanner.d.ts +2 -1
  64. package/dist/kernel/di/metadata.scanner.js +3 -2
  65. package/dist/kernel/{utils/error → error}/app.error.d.ts +2 -2
  66. package/dist/kernel/error/common.error-codes.d.ts +1 -0
  67. package/dist/kernel/error/framework.error-codes.d.ts +12 -0
  68. package/dist/kernel/error/index.d.ts +4 -0
  69. package/dist/kernel/error/index.js +18 -0
  70. package/dist/kernel/{utils/error → error}/security.error.d.ts +1 -1
  71. package/dist/kernel/error/security.types.js +2 -0
  72. package/dist/kernel/index.d.ts +4 -5
  73. package/dist/kernel/index.js +6 -11
  74. package/dist/kernel/{shared/logger → logger}/core-logger.d.ts +0 -19
  75. package/dist/kernel/{shared/logger → logger}/core-logger.js +10 -24
  76. package/dist/kernel/{shared/logger → logger}/logger.env.d.ts +12 -5
  77. package/dist/kernel/{shared/logger → logger}/logger.env.js +29 -13
  78. package/dist/kernel/{shared/logger → logger}/logger.service.d.ts +14 -0
  79. package/dist/kernel/{shared/logger → logger}/logger.service.js +20 -2
  80. package/dist/kernel/logger/transports/transport.interface.js +2 -0
  81. package/dist/kernel/shared/index.d.ts +1 -2
  82. package/dist/kernel/shared/index.js +1 -2
  83. package/dist/kernel/utils/index.d.ts +0 -2
  84. package/dist/kernel/utils/index.js +0 -2
  85. package/dist/kernel/utils/result.d.ts +1 -1
  86. package/dist/runtime/client/api.d.ts +7 -0
  87. package/dist/runtime/client/api.js +23 -0
  88. package/dist/runtime/client/client-bootstrap.js +1 -1
  89. package/dist/runtime/client/controllers/spawner.controller.d.ts +1 -1
  90. package/dist/runtime/client/decorators/index.d.ts +2 -2
  91. package/dist/runtime/client/decorators/index.js +2 -2
  92. package/dist/runtime/client/decorators/key.d.ts +2 -2
  93. package/dist/runtime/client/decorators/key.js +3 -3
  94. package/dist/runtime/client/decorators/localEvent.d.ts +1 -1
  95. package/dist/runtime/client/decorators/localEvent.js +1 -1
  96. package/dist/runtime/client/decorators/{tick.d.ts → onTick.d.ts} +1 -1
  97. package/dist/runtime/client/decorators/{tick.js → onTick.js} +2 -2
  98. package/dist/runtime/client/decorators/{nui.d.ts → onView.d.ts} +4 -4
  99. package/dist/runtime/client/decorators/{nui.js → onView.js} +5 -5
  100. package/dist/runtime/client/index.d.ts +1 -7
  101. package/dist/runtime/client/index.js +26 -12
  102. package/dist/runtime/client/player/player.d.ts +1 -1
  103. package/dist/runtime/client/player/player.loader.js +3 -3
  104. package/dist/runtime/client/services/appearance.service.d.ts +1 -1
  105. package/dist/runtime/client/services/appearance.service.js +1 -1
  106. package/dist/runtime/client/services/blip.service.d.ts +1 -1
  107. package/dist/runtime/client/services/marker.service.d.ts +1 -1
  108. package/dist/runtime/client/services/ped.service.d.ts +1 -1
  109. package/dist/runtime/client/services/spawn.service.d.ts +2 -2
  110. package/dist/runtime/client/services/spawn.service.js +12 -12
  111. package/dist/runtime/client/services/textui.service.d.ts +1 -1
  112. package/dist/runtime/client/services/vehicle-client.service.d.ts +1 -1
  113. package/dist/runtime/client/services/vehicle.service.d.ts +1 -1
  114. package/dist/runtime/client/system/processors/export.processor.js +1 -1
  115. package/dist/runtime/client/system/processors/gameEvent.processor.js +1 -1
  116. package/dist/runtime/client/system/processors/interval.processor.js +1 -1
  117. package/dist/runtime/client/system/processors/localEvent.processor.js +1 -1
  118. package/dist/runtime/client/system/processors/netEvent.processor.js +1 -1
  119. package/dist/runtime/client/system/processors/nui.processor.js +1 -1
  120. package/dist/runtime/client/system/processors/resourceLifecycle.processor.js +1 -1
  121. package/dist/runtime/client/system/processors/tick.processor.js +1 -1
  122. package/dist/runtime/client/ui-bridge.js +1 -1
  123. package/dist/runtime/core/entity.d.ts +168 -0
  124. package/dist/runtime/core/entity.js +226 -0
  125. package/dist/runtime/core/index.d.ts +3 -0
  126. package/dist/runtime/core/index.js +19 -0
  127. package/dist/runtime/core/spatial.d.ts +5 -0
  128. package/dist/runtime/core/spatial.js +2 -0
  129. package/dist/runtime/core/world.d.ts +13 -0
  130. package/dist/runtime/core/world.js +64 -0
  131. package/dist/runtime/server/api.d.ts +12 -0
  132. package/dist/runtime/server/api.js +34 -0
  133. package/dist/runtime/server/bootstrap.js +84 -108
  134. package/dist/runtime/server/bus/internal-event.bus.js +1 -1
  135. package/dist/runtime/server/contracts/index.d.ts +1 -2
  136. package/dist/runtime/server/contracts/index.js +2 -3
  137. package/dist/runtime/server/contracts/player-persistence.contract.d.ts +16 -18
  138. package/dist/runtime/server/contracts/player-persistence.contract.js +16 -18
  139. package/dist/runtime/server/contracts/security/command-error-observer.contract.d.ts +73 -0
  140. package/dist/runtime/server/contracts/security/command-error-observer.contract.js +9 -0
  141. package/dist/runtime/server/contracts/security/permission.types.d.ts +2 -2
  142. package/dist/runtime/server/contracts/security/principal-provider.contract.d.ts +3 -3
  143. package/dist/runtime/server/contracts/security/principal-provider.contract.js +2 -2
  144. package/dist/runtime/server/contracts/security/security-handler.contract.d.ts +2 -2
  145. package/dist/runtime/server/controllers/chat.controller.d.ts +1 -1
  146. package/dist/runtime/server/controllers/chat.controller.js +5 -0
  147. package/dist/runtime/server/controllers/command-export.controller.d.ts +12 -3
  148. package/dist/runtime/server/controllers/command-export.controller.js +94 -28
  149. package/dist/runtime/server/controllers/player-export.controller.d.ts +2 -2
  150. package/dist/runtime/server/controllers/player-export.controller.js +5 -0
  151. package/dist/runtime/server/controllers/principal-export.controller.js +8 -7
  152. package/dist/runtime/server/controllers/ready.controller.d.ts +4 -0
  153. package/dist/runtime/server/controllers/ready.controller.js +32 -0
  154. package/dist/runtime/server/controllers/remote-command-execution.controller.d.ts +10 -1
  155. package/dist/runtime/server/controllers/remote-command-execution.controller.js +79 -13
  156. package/dist/runtime/server/controllers/session.controller.d.ts +2 -2
  157. package/dist/runtime/server/controllers/session.controller.js +25 -17
  158. package/dist/runtime/server/controllers/vehicle.controller.d.ts +3 -38
  159. package/dist/runtime/server/controllers/vehicle.controller.js +6 -152
  160. package/dist/runtime/server/decorators/guard.js +2 -2
  161. package/dist/runtime/server/decorators/index.d.ts +1 -1
  162. package/dist/runtime/server/decorators/index.js +1 -1
  163. package/dist/runtime/server/decorators/{onFiveMEvent.d.ts → onRuntimeEvent.d.ts} +5 -4
  164. package/dist/runtime/server/decorators/{onFiveMEvent.js → onRuntimeEvent.js} +7 -6
  165. package/dist/runtime/server/decorators/requiresState.js +3 -3
  166. package/dist/runtime/server/decorators/throttle.d.ts +1 -1
  167. package/dist/runtime/server/decorators/throttle.js +1 -1
  168. package/dist/runtime/server/decorators/utils.d.ts +1 -1
  169. package/dist/runtime/server/decorators/utils.js +1 -1
  170. package/dist/runtime/server/devmode/dev-mode.service.d.ts +7 -8
  171. package/dist/runtime/server/devmode/dev-mode.service.js +18 -46
  172. package/dist/runtime/server/devmode/index.d.ts +1 -3
  173. package/dist/runtime/server/devmode/index.js +1 -18
  174. package/dist/runtime/server/devmode/player-simulator.service.js +3 -3
  175. package/dist/runtime/server/devmode/state-inspector.service.js +2 -2
  176. package/dist/runtime/server/devmode/types.d.ts +67 -31
  177. package/dist/runtime/server/devmode/types.js +1 -4
  178. package/dist/runtime/server/entities/player.d.ts +80 -66
  179. package/dist/runtime/server/entities/player.js +137 -98
  180. package/dist/runtime/server/entities/vehicle.d.ts +3 -3
  181. package/dist/runtime/server/error-handler.js +5 -5
  182. package/dist/runtime/server/helpers/command-validation.helper.d.ts +0 -3
  183. package/dist/runtime/server/helpers/command-validation.helper.js +3 -7
  184. package/dist/runtime/server/helpers/normalize-app-error.d.ts +9 -0
  185. package/dist/runtime/server/helpers/normalize-app-error.js +20 -0
  186. package/dist/runtime/server/helpers/process-tuple-schema.d.ts +20 -0
  187. package/dist/runtime/server/helpers/process-tuple-schema.js +51 -0
  188. package/dist/runtime/server/helpers/resolve-method.js +3 -3
  189. package/dist/runtime/server/index.d.ts +1 -13
  190. package/dist/runtime/server/index.js +25 -23
  191. package/dist/runtime/server/runtime.d.ts +32 -281
  192. package/dist/runtime/server/runtime.js +46 -60
  193. package/dist/runtime/server/services/appearance.service.d.ts +5 -5
  194. package/dist/runtime/server/services/appearance.service.js +5 -5
  195. package/dist/runtime/server/services/chat.service.d.ts +5 -3
  196. package/dist/runtime/server/services/chat.service.js +17 -12
  197. package/dist/runtime/server/services/core/command.service.d.ts +9 -1
  198. package/dist/runtime/server/services/core/command.service.js +16 -7
  199. package/dist/runtime/server/services/core/player.service.d.ts +12 -16
  200. package/dist/runtime/server/services/core/player.service.js +42 -47
  201. package/dist/runtime/server/services/core/principal.service.js +5 -5
  202. package/dist/runtime/server/services/core/session-recovery.service.d.ts +1 -1
  203. package/dist/runtime/server/services/core/session-recovery.service.js +2 -2
  204. package/dist/runtime/server/services/default/default-command-error-observer.d.ts +14 -0
  205. package/dist/runtime/server/services/default/default-command-error-observer.js +43 -0
  206. package/dist/runtime/server/services/default/default-principal.provider.d.ts +13 -0
  207. package/dist/runtime/server/services/default/default-principal.provider.js +38 -0
  208. package/dist/runtime/server/services/default/default-security.handler.d.ts +1 -1
  209. package/dist/runtime/server/services/default/default-security.handler.js +1 -1
  210. package/dist/runtime/server/services/index.d.ts +0 -3
  211. package/dist/runtime/server/services/index.js +1 -6
  212. package/dist/runtime/server/services/persistence.service.js +3 -3
  213. package/dist/runtime/server/services/ports/command-execution.port.d.ts +7 -0
  214. package/dist/runtime/server/services/ports/principal.port.d.ts +1 -1
  215. package/dist/runtime/server/services/remote/remote-command.service.d.ts +1 -0
  216. package/dist/runtime/server/services/remote/remote-command.service.js +30 -11
  217. package/dist/runtime/server/services/remote/remote-player.service.d.ts +2 -2
  218. package/dist/runtime/server/services/remote/remote-player.service.js +3 -3
  219. package/dist/runtime/server/services/remote/server-bridge.js +2 -2
  220. package/dist/runtime/server/services/services.register.d.ts +2 -5
  221. package/dist/runtime/server/services/services.register.js +29 -41
  222. package/dist/runtime/server/services/vehicle-modification.service.js +1 -1
  223. package/dist/runtime/server/services/vehicle.service.d.ts +3 -3
  224. package/dist/runtime/server/services/vehicle.service.js +5 -5
  225. package/dist/runtime/server/setup.d.ts +2 -3
  226. package/dist/runtime/server/setup.js +10 -11
  227. package/dist/runtime/server/system/metadata-server.keys.d.ts +1 -1
  228. package/dist/runtime/server/system/metadata-server.keys.js +1 -1
  229. package/dist/runtime/server/system/processors/command.processor.js +4 -0
  230. package/dist/runtime/server/system/processors/export.processor.js +1 -1
  231. package/dist/runtime/server/system/processors/internalEvent.processor.js +1 -1
  232. package/dist/runtime/server/system/processors/netEvent.processor.js +11 -10
  233. package/dist/runtime/server/system/processors/{fivemEvent.processor.d.ts → runtimeEvent.processor.d.ts} +1 -1
  234. package/dist/runtime/server/system/processors/{fivemEvent.processor.js → runtimeEvent.processor.js} +8 -8
  235. package/dist/runtime/server/system/processors/tick.processor.js +1 -1
  236. package/dist/runtime/server/system/processors.register.js +16 -11
  237. package/dist/runtime/server/system/schema-generator.js +5 -3
  238. package/dist/runtime/server/types/core-exports.d.ts +6 -6
  239. package/dist/runtime/server/types/index.d.ts +1 -1
  240. package/dist/runtime/server/types/index.js +1 -1
  241. package/dist/runtime/server/types/internal-events.d.ts +1 -1
  242. package/dist/runtime/server/types/vehicle.types.d.ts +1 -1
  243. package/package.json +7 -15
  244. package/dist/adapters/contracts/IEntityServer.d.ts +0 -88
  245. package/dist/adapters/contracts/IEntityServer.js +0 -13
  246. package/dist/adapters/contracts/IPlayerServer.js +0 -13
  247. package/dist/adapters/database/oxmysql.adapter.d.ts +0 -89
  248. package/dist/adapters/database/oxmysql.adapter.js +0 -149
  249. package/dist/adapters/database/resource.adapter.d.ts +0 -12
  250. package/dist/adapters/database/resource.adapter.js +0 -68
  251. package/dist/kernel/shared/appearance/index.d.ts +0 -1
  252. package/dist/runtime/index.d.ts +0 -2
  253. package/dist/runtime/index.js +0 -39
  254. package/dist/runtime/server/bootstrap.validation.d.ts +0 -12
  255. package/dist/runtime/server/bootstrap.validation.js +0 -104
  256. package/dist/runtime/server/contracts/auth-provider.contract.d.ts +0 -58
  257. package/dist/runtime/server/contracts/auth-provider.contract.js +0 -23
  258. package/dist/runtime/server/contracts/repository/index.d.ts +0 -57
  259. package/dist/runtime/server/contracts/repository/index.js +0 -61
  260. package/dist/runtime/server/contracts/repository/repository.contract.d.ts +0 -224
  261. package/dist/runtime/server/contracts/repository/repository.contract.js +0 -341
  262. package/dist/runtime/server/contracts/repository/repository.types.d.ts +0 -51
  263. package/dist/runtime/server/contracts/repository/repository.types.js +0 -7
  264. package/dist/runtime/server/database/adapter.registry.d.ts +0 -4
  265. package/dist/runtime/server/database/adapter.registry.js +0 -14
  266. package/dist/runtime/server/database/database.contract.d.ts +0 -128
  267. package/dist/runtime/server/database/database.contract.js +0 -29
  268. package/dist/runtime/server/database/database.service.d.ts +0 -188
  269. package/dist/runtime/server/database/database.service.js +0 -287
  270. package/dist/runtime/server/database/index.d.ts +0 -5
  271. package/dist/runtime/server/database/index.js +0 -25
  272. package/dist/runtime/server/database/types.d.ts +0 -67
  273. package/dist/runtime/server/database/types.js +0 -7
  274. package/dist/runtime/server/database.d.ts +0 -7
  275. package/dist/runtime/server/devmode/hot-reload.server.d.ts +0 -74
  276. package/dist/runtime/server/devmode/hot-reload.server.js +0 -261
  277. package/dist/runtime/server/services/config.service.d.ts +0 -75
  278. package/dist/runtime/server/services/config.service.js +0 -116
  279. package/dist/runtime/server/services/http/http.service.d.ts +0 -50
  280. package/dist/runtime/server/services/http/http.service.js +0 -126
  281. /package/dist/adapters/contracts/{IPedAppearanceClient.js → client/IPedAppearanceClient.js} +0 -0
  282. /package/dist/adapters/contracts/{IPedAppearanceServer.d.ts → server/IPedAppearanceServer.d.ts} +0 -0
  283. /package/dist/adapters/contracts/{IPedAppearanceServer.js → server/IPedAppearanceServer.js} +0 -0
  284. /package/dist/adapters/contracts/{IVehicleServer.d.ts → server/IVehicleServer.d.ts} +0 -0
  285. /package/dist/adapters/contracts/{IVehicleServer.js → server/IVehicleServer.js} +0 -0
  286. /package/dist/kernel/{utils/error → error}/app.error.js +0 -0
  287. /package/dist/kernel/{shared/logger/transports/transport.interface.js → error/common.error-codes.js} +0 -0
  288. /package/dist/{runtime/server/types/security.types.js → kernel/error/framework.error-codes.js} +0 -0
  289. /package/dist/kernel/{utils/error → error}/security.error.js +0 -0
  290. /package/dist/{runtime/server/types → kernel/error}/security.types.d.ts +0 -0
  291. /package/dist/kernel/{shared/logger → logger}/index.d.ts +0 -0
  292. /package/dist/kernel/{shared/logger → logger}/index.js +0 -0
  293. /package/dist/kernel/{shared/logger → logger}/logger.config.d.ts +0 -0
  294. /package/dist/kernel/{shared/logger → logger}/logger.config.js +0 -0
  295. /package/dist/kernel/{shared/logger → logger}/logger.types.d.ts +0 -0
  296. /package/dist/kernel/{shared/logger → logger}/logger.types.js +0 -0
  297. /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.d.ts +0 -0
  298. /package/dist/kernel/{shared/logger → logger}/transports/buffered.transport.js +0 -0
  299. /package/dist/kernel/{shared/logger → logger}/transports/console.transport.d.ts +0 -0
  300. /package/dist/kernel/{shared/logger → logger}/transports/console.transport.js +0 -0
  301. /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.d.ts +0 -0
  302. /package/dist/kernel/{shared/logger → logger}/transports/dev-transport.factory.js +0 -0
  303. /package/dist/kernel/{shared/logger → logger}/transports/http.transport.d.ts +0 -0
  304. /package/dist/kernel/{shared/logger → logger}/transports/http.transport.js +0 -0
  305. /package/dist/kernel/{shared/logger → logger}/transports/index.d.ts +0 -0
  306. /package/dist/kernel/{shared/logger → logger}/transports/index.js +0 -0
  307. /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.d.ts +0 -0
  308. /package/dist/kernel/{shared/logger → logger}/transports/simple-console.transport.js +0 -0
  309. /package/dist/kernel/{shared/logger → logger}/transports/transport.interface.d.ts +0 -0
  310. /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.d.ts +0 -0
  311. /package/dist/kernel/{shared/logger → logger}/transports/websocket.transport.js +0 -0
  312. /package/dist/kernel/shared/{appearance/appearance.interface.d.ts → player-appearance.types.d.ts} +0 -0
  313. /package/dist/kernel/shared/{appearance/appearance.interface.js → player-appearance.types.js} +0 -0
@@ -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,31 +159,82 @@ 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);
166
+ const net = index_1.GLOBAL_CONTAINER.resolve(adapters_1.INetTransport);
167
+ // 1. Broadast to resources already running
168
+ engineEvents.emit('core:ready');
169
+ net.emitNet('core:ready', 'all');
170
+ // 2. Listen for 'core:request-ready' for resources starting late (hot-reload)
171
+ engineEvents.on('core:request-ready', () => {
172
+ engineEvents.emit('core:ready');
173
+ });
174
+ logger_1.loggers.bootstrap.info(`'core:ready' logic initialized and broadcasted`);
239
175
  }
176
+ const logLevelLabel = logger_1.LogLevelLabels[(0, logger_1.getLogLevel)()];
177
+ logger_1.loggers.bootstrap.info(`LogLevel Setted: ${logLevelLabel}`);
240
178
  }
241
179
  function createCoreDependency(coreName) {
180
+ logger_1.loggers.bootstrap.debug(`Setting up detection mechanisms for Core '${coreName}'...`);
242
181
  return new Promise((resolve, reject) => {
243
182
  let resolved = false;
244
- const engineEvents = index_1.di.resolve(adapters_1.IEngineEvents);
183
+ let pollingInterval;
184
+ let timeout;
185
+ const engineEvents = index_1.GLOBAL_CONTAINER.resolve(adapters_1.IEngineEvents);
245
186
  const cleanup = () => {
246
187
  resolved = true;
247
- clearTimeout(timeout);
188
+ if (timeout)
189
+ clearTimeout(timeout);
190
+ if (pollingInterval)
191
+ clearInterval(pollingInterval);
248
192
  };
249
- const timeout = setTimeout(() => {
250
- if (!resolved) {
251
- reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' within ${CORE_WAIT_TIMEOUT}ms.`));
252
- }
253
- }, CORE_WAIT_TIMEOUT);
193
+ // 1. Register listener FIRST (before any requests)
254
194
  const onReady = () => {
255
195
  if (!resolved) {
196
+ logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected via 'core:ready' event!`);
256
197
  cleanup();
257
198
  resolve();
258
199
  }
259
200
  };
260
201
  engineEvents.on('core:ready', onReady);
202
+ logger_1.loggers.bootstrap.debug(`Listening for 'core:ready' event from Core`);
203
+ // 2. Check if already ready via export (Polling)
204
+ const checkReady = () => {
205
+ var _a, _b;
206
+ if (resolved)
207
+ return;
208
+ try {
209
+ const globalExports = globalThis.exports;
210
+ 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);
211
+ logger_1.loggers.bootstrap.debug(`Polling isCoreReady export: ${isReady}`);
212
+ if (isReady === true) {
213
+ logger_1.loggers.bootstrap.debug(`Core '${coreName}' detected via isCoreReady export!`);
214
+ cleanup();
215
+ resolve();
216
+ }
217
+ }
218
+ catch (e) {
219
+ logger_1.loggers.bootstrap.debug(`Export check failed: ${e}`);
220
+ }
221
+ };
222
+ pollingInterval = setInterval(checkReady, 500);
223
+ checkReady(); // Initial check
224
+ // 3. Request status (for hot-reload cases where Core is already up)
225
+ // This is sent AFTER registering the listener so we can receive the response
226
+ if (!resolved) {
227
+ logger_1.loggers.bootstrap.debug(`Requesting Core status via 'core:request-ready' event`);
228
+ engineEvents.emit('core:request-ready');
229
+ }
230
+ // 4. Timeout protection
231
+ timeout = setTimeout(() => {
232
+ if (!resolved) {
233
+ logger_1.loggers.bootstrap.warn(`Timeout waiting for Core '${coreName}' after ${CORE_WAIT_TIMEOUT}ms`);
234
+ cleanup();
235
+ reject(new Error(`[OpenCore] Timeout waiting for CORE '${coreName}'. The Core did not emit 'core:ready' or expose 'isCoreReady' within ${CORE_WAIT_TIMEOUT}ms.`));
236
+ }
237
+ }, CORE_WAIT_TIMEOUT);
261
238
  });
262
239
  }
263
240
  async function dependencyResolver(waitFor, onReady) {
@@ -293,7 +270,7 @@ async function dependencyResolver(waitFor, onReady) {
293
270
  */
294
271
  function runSessionRecovery() {
295
272
  try {
296
- const recoveryService = index_1.di.resolve(session_recovery_service_1.SessionRecoveryService);
273
+ const recoveryService = index_1.GLOBAL_CONTAINER.resolve(session_recovery_service_1.SessionRecoveryService);
297
274
  const stats = recoveryService.recoverSessions();
298
275
  if (stats.recovered > 0) {
299
276
  logger_1.loggers.bootstrap.info(`[SessionRecovery] Recovered ${stats.recovered} player session(s)`);
@@ -315,15 +292,14 @@ async function initDevMode(config) {
315
292
  const { StateInspectorService } = await Promise.resolve().then(() => __importStar(require('./devmode/state-inspector.service')));
316
293
  const { PlayerSimulatorService } = await Promise.resolve().then(() => __importStar(require('./devmode/player-simulator.service')));
317
294
  // 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);
295
+ index_1.GLOBAL_CONTAINER.registerSingleton(EventInterceptorService, EventInterceptorService);
296
+ index_1.GLOBAL_CONTAINER.registerSingleton(StateInspectorService, StateInspectorService);
297
+ index_1.GLOBAL_CONTAINER.registerSingleton(PlayerSimulatorService, PlayerSimulatorService);
298
+ index_1.GLOBAL_CONTAINER.registerSingleton(DevModeService, DevModeService);
322
299
  // Enable DevMode
323
- const devModeService = index_1.di.resolve(DevModeService);
300
+ const devModeService = index_1.GLOBAL_CONTAINER.resolve(DevModeService);
324
301
  await devModeService.enable({
325
302
  enabled: true,
326
- hotReload: config.hotReload,
327
303
  bridge: config.bridge,
328
304
  interceptor: config.interceptor,
329
305
  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 {