@zyno-io/dk-server-foundation 26.216.430

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 (663) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +458 -0
  3. package/dist/devconsole/assets/index-CKF3C3kv.css +1 -0
  4. package/dist/devconsole/assets/index-CsHdomhM.js +27 -0
  5. package/dist/devconsole/index.html +13 -0
  6. package/dist/resources/proto/generated/devconsole/devconsole.d.ts +320 -0
  7. package/dist/resources/proto/generated/devconsole/devconsole.d.ts.map +1 -0
  8. package/dist/resources/proto/generated/devconsole/devconsole.js +3751 -0
  9. package/dist/resources/proto/generated/devconsole/devconsole.js.map +1 -0
  10. package/dist/src/app/base.d.ts +36 -0
  11. package/dist/src/app/base.d.ts.map +1 -0
  12. package/dist/src/app/base.js +240 -0
  13. package/dist/src/app/base.js.map +1 -0
  14. package/dist/src/app/config.d.ts +90 -0
  15. package/dist/src/app/config.d.ts.map +1 -0
  16. package/dist/src/app/config.js +33 -0
  17. package/dist/src/app/config.js.map +1 -0
  18. package/dist/src/app/config.loader.d.ts +14 -0
  19. package/dist/src/app/config.loader.d.ts.map +1 -0
  20. package/dist/src/app/config.loader.js +67 -0
  21. package/dist/src/app/config.loader.js.map +1 -0
  22. package/dist/src/app/const.d.ts +3 -0
  23. package/dist/src/app/const.d.ts.map +1 -0
  24. package/dist/src/app/const.js +6 -0
  25. package/dist/src/app/const.js.map +1 -0
  26. package/dist/src/app/dev.d.ts +7 -0
  27. package/dist/src/app/dev.d.ts.map +1 -0
  28. package/dist/src/app/dev.js +105 -0
  29. package/dist/src/app/dev.js.map +1 -0
  30. package/dist/src/app/index.d.ts +7 -0
  31. package/dist/src/app/index.d.ts.map +1 -0
  32. package/dist/src/app/index.js +12 -0
  33. package/dist/src/app/index.js.map +1 -0
  34. package/dist/src/app/openapi.d.ts +4 -0
  35. package/dist/src/app/openapi.d.ts.map +1 -0
  36. package/dist/src/app/openapi.js +6 -0
  37. package/dist/src/app/openapi.js.map +1 -0
  38. package/dist/src/app/resolver.d.ts +11 -0
  39. package/dist/src/app/resolver.d.ts.map +1 -0
  40. package/dist/src/app/resolver.js +60 -0
  41. package/dist/src/app/resolver.js.map +1 -0
  42. package/dist/src/app/shutdown.d.ts +12 -0
  43. package/dist/src/app/shutdown.d.ts.map +1 -0
  44. package/dist/src/app/shutdown.js +63 -0
  45. package/dist/src/app/shutdown.js.map +1 -0
  46. package/dist/src/app/state.d.ts +16 -0
  47. package/dist/src/app/state.d.ts.map +1 -0
  48. package/dist/src/app/state.js +12 -0
  49. package/dist/src/app/state.js.map +1 -0
  50. package/dist/src/auth/index.d.ts +3 -0
  51. package/dist/src/auth/index.d.ts.map +1 -0
  52. package/dist/src/auth/index.js +6 -0
  53. package/dist/src/auth/index.js.map +1 -0
  54. package/dist/src/auth/jwt.d.ts +76 -0
  55. package/dist/src/auth/jwt.d.ts.map +1 -0
  56. package/dist/src/auth/jwt.js +218 -0
  57. package/dist/src/auth/jwt.js.map +1 -0
  58. package/dist/src/auth/provider.d.ts +15 -0
  59. package/dist/src/auth/provider.d.ts.map +1 -0
  60. package/dist/src/auth/provider.js +50 -0
  61. package/dist/src/auth/provider.js.map +1 -0
  62. package/dist/src/cli/dksf-dev.d.ts +3 -0
  63. package/dist/src/cli/dksf-dev.d.ts.map +1 -0
  64. package/dist/src/cli/dksf-dev.js +408 -0
  65. package/dist/src/cli/dksf-dev.js.map +1 -0
  66. package/dist/src/cli/dksf-gen-proto.d.ts +3 -0
  67. package/dist/src/cli/dksf-gen-proto.d.ts.map +1 -0
  68. package/dist/src/cli/dksf-gen-proto.js +164 -0
  69. package/dist/src/cli/dksf-gen-proto.js.map +1 -0
  70. package/dist/src/cli/dksf-install.d.ts +3 -0
  71. package/dist/src/cli/dksf-install.d.ts.map +1 -0
  72. package/dist/src/cli/dksf-install.js +10 -0
  73. package/dist/src/cli/dksf-install.js.map +1 -0
  74. package/dist/src/cli/dksf-test.d.ts +3 -0
  75. package/dist/src/cli/dksf-test.d.ts.map +1 -0
  76. package/dist/src/cli/dksf-test.js +78 -0
  77. package/dist/src/cli/dksf-test.js.map +1 -0
  78. package/dist/src/cli/dksf-update.d.ts +3 -0
  79. package/dist/src/cli/dksf-update.d.ts.map +1 -0
  80. package/dist/src/cli/dksf-update.js +86 -0
  81. package/dist/src/cli/dksf-update.js.map +1 -0
  82. package/dist/src/database/common.d.ts +84 -0
  83. package/dist/src/database/common.d.ts.map +1 -0
  84. package/dist/src/database/common.js +380 -0
  85. package/dist/src/database/common.js.map +1 -0
  86. package/dist/src/database/dialect.d.ts +10 -0
  87. package/dist/src/database/dialect.d.ts.map +1 -0
  88. package/dist/src/database/dialect.js +56 -0
  89. package/dist/src/database/dialect.js.map +1 -0
  90. package/dist/src/database/entity.d.ts +62 -0
  91. package/dist/src/database/entity.d.ts.map +1 -0
  92. package/dist/src/database/entity.js +198 -0
  93. package/dist/src/database/entity.js.map +1 -0
  94. package/dist/src/database/index.d.ts +8 -0
  95. package/dist/src/database/index.d.ts.map +1 -0
  96. package/dist/src/database/index.js +15 -0
  97. package/dist/src/database/index.js.map +1 -0
  98. package/dist/src/database/migration/MigrationResetCommand.d.ts +9 -0
  99. package/dist/src/database/migration/MigrationResetCommand.d.ts.map +1 -0
  100. package/dist/src/database/migration/MigrationResetCommand.js +75 -0
  101. package/dist/src/database/migration/MigrationResetCommand.js.map +1 -0
  102. package/dist/src/database/migration/MigrationRunCommand.d.ts +11 -0
  103. package/dist/src/database/migration/MigrationRunCommand.d.ts.map +1 -0
  104. package/dist/src/database/migration/MigrationRunCommand.js +118 -0
  105. package/dist/src/database/migration/MigrationRunCommand.js.map +1 -0
  106. package/dist/src/database/migration/characters.d.ts +14 -0
  107. package/dist/src/database/migration/characters.d.ts.map +1 -0
  108. package/dist/src/database/migration/characters.js +56 -0
  109. package/dist/src/database/migration/characters.js.map +1 -0
  110. package/dist/src/database/migration/create/MigrationCreateCommand.d.ts +11 -0
  111. package/dist/src/database/migration/create/MigrationCreateCommand.d.ts.map +1 -0
  112. package/dist/src/database/migration/create/MigrationCreateCommand.js +106 -0
  113. package/dist/src/database/migration/create/MigrationCreateCommand.js.map +1 -0
  114. package/dist/src/database/migration/create/comparator.d.ts +3 -0
  115. package/dist/src/database/migration/create/comparator.d.ts.map +1 -0
  116. package/dist/src/database/migration/create/comparator.js +408 -0
  117. package/dist/src/database/migration/create/comparator.js.map +1 -0
  118. package/dist/src/database/migration/create/db-reader.d.ts +5 -0
  119. package/dist/src/database/migration/create/db-reader.d.ts.map +1 -0
  120. package/dist/src/database/migration/create/db-reader.js +473 -0
  121. package/dist/src/database/migration/create/db-reader.js.map +1 -0
  122. package/dist/src/database/migration/create/ddl-generator.d.ts +3 -0
  123. package/dist/src/database/migration/create/ddl-generator.d.ts.map +1 -0
  124. package/dist/src/database/migration/create/ddl-generator.js +725 -0
  125. package/dist/src/database/migration/create/ddl-generator.js.map +1 -0
  126. package/dist/src/database/migration/create/entity-reader.d.ts +4 -0
  127. package/dist/src/database/migration/create/entity-reader.d.ts.map +1 -0
  128. package/dist/src/database/migration/create/entity-reader.js +417 -0
  129. package/dist/src/database/migration/create/entity-reader.js.map +1 -0
  130. package/dist/src/database/migration/create/file-generator.d.ts +3 -0
  131. package/dist/src/database/migration/create/file-generator.d.ts.map +1 -0
  132. package/dist/src/database/migration/create/file-generator.js +62 -0
  133. package/dist/src/database/migration/create/file-generator.js.map +1 -0
  134. package/dist/src/database/migration/create/prompt.d.ts +4 -0
  135. package/dist/src/database/migration/create/prompt.d.ts.map +1 -0
  136. package/dist/src/database/migration/create/prompt.js +55 -0
  137. package/dist/src/database/migration/create/prompt.js.map +1 -0
  138. package/dist/src/database/migration/create/schema-model.d.ts +109 -0
  139. package/dist/src/database/migration/create/schema-model.d.ts.map +1 -0
  140. package/dist/src/database/migration/create/schema-model.js +24 -0
  141. package/dist/src/database/migration/create/schema-model.js.map +1 -0
  142. package/dist/src/database/migration/helpers.d.ts +3 -0
  143. package/dist/src/database/migration/helpers.d.ts.map +1 -0
  144. package/dist/src/database/migration/helpers.js +13 -0
  145. package/dist/src/database/migration/helpers.js.map +1 -0
  146. package/dist/src/database/migration/index.d.ts +9 -0
  147. package/dist/src/database/migration/index.d.ts.map +1 -0
  148. package/dist/src/database/migration/index.js +43 -0
  149. package/dist/src/database/migration/index.js.map +1 -0
  150. package/dist/src/database/migration/migration.entity.d.ts +8 -0
  151. package/dist/src/database/migration/migration.entity.d.ts.map +1 -0
  152. package/dist/src/database/migration/migration.entity.js +16 -0
  153. package/dist/src/database/migration/migration.entity.js.map +1 -0
  154. package/dist/src/database/mysql.d.ts +16 -0
  155. package/dist/src/database/mysql.d.ts.map +1 -0
  156. package/dist/src/database/mysql.js +140 -0
  157. package/dist/src/database/mysql.js.map +1 -0
  158. package/dist/src/database/postgres.d.ts +16 -0
  159. package/dist/src/database/postgres.d.ts.map +1 -0
  160. package/dist/src/database/postgres.js +91 -0
  161. package/dist/src/database/postgres.js.map +1 -0
  162. package/dist/src/database/types.d.ts +21 -0
  163. package/dist/src/database/types.d.ts.map +1 -0
  164. package/dist/src/database/types.js +27 -0
  165. package/dist/src/database/types.js.map +1 -0
  166. package/dist/src/devconsole/devconsole.controller.d.ts +7 -0
  167. package/dist/src/devconsole/devconsole.controller.d.ts.map +1 -0
  168. package/dist/src/devconsole/devconsole.controller.js +82 -0
  169. package/dist/src/devconsole/devconsole.controller.js.map +1 -0
  170. package/dist/src/devconsole/devconsole.middleware.d.ts +12 -0
  171. package/dist/src/devconsole/devconsole.middleware.d.ts.map +1 -0
  172. package/dist/src/devconsole/devconsole.middleware.js +28 -0
  173. package/dist/src/devconsole/devconsole.middleware.js.map +1 -0
  174. package/dist/src/devconsole/devconsole.srpc.d.ts +14 -0
  175. package/dist/src/devconsole/devconsole.srpc.d.ts.map +1 -0
  176. package/dist/src/devconsole/devconsole.srpc.js +94 -0
  177. package/dist/src/devconsole/devconsole.srpc.js.map +1 -0
  178. package/dist/src/devconsole/devconsole.store.d.ts +101 -0
  179. package/dist/src/devconsole/devconsole.store.d.ts.map +1 -0
  180. package/dist/src/devconsole/devconsole.store.js +125 -0
  181. package/dist/src/devconsole/devconsole.store.js.map +1 -0
  182. package/dist/src/devconsole/devconsole.ws.d.ts +18 -0
  183. package/dist/src/devconsole/devconsole.ws.d.ts.map +1 -0
  184. package/dist/src/devconsole/devconsole.ws.js +470 -0
  185. package/dist/src/devconsole/devconsole.ws.js.map +1 -0
  186. package/dist/src/devconsole/index.d.ts +2 -0
  187. package/dist/src/devconsole/index.d.ts.map +1 -0
  188. package/dist/src/devconsole/index.js +6 -0
  189. package/dist/src/devconsole/index.js.map +1 -0
  190. package/dist/src/devconsole/patches.d.ts +6 -0
  191. package/dist/src/devconsole/patches.d.ts.map +1 -0
  192. package/dist/src/devconsole/patches.js +397 -0
  193. package/dist/src/devconsole/patches.js.map +1 -0
  194. package/dist/src/health/health.module.d.ts +6 -0
  195. package/dist/src/health/health.module.d.ts.map +1 -0
  196. package/dist/src/health/health.module.js +32 -0
  197. package/dist/src/health/health.module.js.map +1 -0
  198. package/dist/src/health/healthcheck.controller.d.ts +10 -0
  199. package/dist/src/health/healthcheck.controller.d.ts.map +1 -0
  200. package/dist/src/health/healthcheck.controller.js +30 -0
  201. package/dist/src/health/healthcheck.controller.js.map +1 -0
  202. package/dist/src/health/healthcheck.service.d.ts +13 -0
  203. package/dist/src/health/healthcheck.service.d.ts.map +1 -0
  204. package/dist/src/health/healthcheck.service.js +33 -0
  205. package/dist/src/health/healthcheck.service.js.map +1 -0
  206. package/dist/src/health/index.d.ts +3 -0
  207. package/dist/src/health/index.d.ts.map +1 -0
  208. package/dist/src/health/index.js +6 -0
  209. package/dist/src/health/index.js.map +1 -0
  210. package/dist/src/helpers/async/context.d.ts +11 -0
  211. package/dist/src/helpers/async/context.d.ts.map +1 -0
  212. package/dist/src/helpers/async/context.js +75 -0
  213. package/dist/src/helpers/async/context.js.map +1 -0
  214. package/dist/src/helpers/async/process.d.ts +16 -0
  215. package/dist/src/helpers/async/process.d.ts.map +1 -0
  216. package/dist/src/helpers/async/process.js +44 -0
  217. package/dist/src/helpers/async/process.js.map +1 -0
  218. package/dist/src/helpers/async/promise.d.ts +5 -0
  219. package/dist/src/helpers/async/promise.d.ts.map +1 -0
  220. package/dist/src/helpers/async/promise.js +27 -0
  221. package/dist/src/helpers/async/promise.js.map +1 -0
  222. package/dist/src/helpers/data/array.d.ts +3 -0
  223. package/dist/src/helpers/data/array.d.ts.map +1 -0
  224. package/dist/src/helpers/data/array.js +17 -0
  225. package/dist/src/helpers/data/array.js.map +1 -0
  226. package/dist/src/helpers/data/objects.d.ts +12 -0
  227. package/dist/src/helpers/data/objects.d.ts.map +1 -0
  228. package/dist/src/helpers/data/objects.js +75 -0
  229. package/dist/src/helpers/data/objects.js.map +1 -0
  230. package/dist/src/helpers/data/serialization.d.ts +4 -0
  231. package/dist/src/helpers/data/serialization.d.ts.map +1 -0
  232. package/dist/src/helpers/data/serialization.js +15 -0
  233. package/dist/src/helpers/data/serialization.js.map +1 -0
  234. package/dist/src/helpers/data/transformer.d.ts +13 -0
  235. package/dist/src/helpers/data/transformer.d.ts.map +1 -0
  236. package/dist/src/helpers/data/transformer.js +55 -0
  237. package/dist/src/helpers/data/transformer.js.map +1 -0
  238. package/dist/src/helpers/framework/decorators.d.ts +5 -0
  239. package/dist/src/helpers/framework/decorators.d.ts.map +1 -0
  240. package/dist/src/helpers/framework/decorators.js +39 -0
  241. package/dist/src/helpers/framework/decorators.js.map +1 -0
  242. package/dist/src/helpers/framework/event.d.ts +3 -0
  243. package/dist/src/helpers/framework/event.d.ts.map +1 -0
  244. package/dist/src/helpers/framework/event.js +20 -0
  245. package/dist/src/helpers/framework/event.js.map +1 -0
  246. package/dist/src/helpers/framework/injection.d.ts +7 -0
  247. package/dist/src/helpers/framework/injection.d.ts.map +1 -0
  248. package/dist/src/helpers/framework/injection.js +52 -0
  249. package/dist/src/helpers/framework/injection.js.map +1 -0
  250. package/dist/src/helpers/index.d.ts +22 -0
  251. package/dist/src/helpers/index.d.ts.map +1 -0
  252. package/dist/src/helpers/index.js +32 -0
  253. package/dist/src/helpers/index.js.map +1 -0
  254. package/dist/src/helpers/io/package.d.ts +5 -0
  255. package/dist/src/helpers/io/package.d.ts.map +1 -0
  256. package/dist/src/helpers/io/package.js +31 -0
  257. package/dist/src/helpers/io/package.js.map +1 -0
  258. package/dist/src/helpers/io/stream.d.ts +18 -0
  259. package/dist/src/helpers/io/stream.d.ts.map +1 -0
  260. package/dist/src/helpers/io/stream.js +91 -0
  261. package/dist/src/helpers/io/stream.js.map +1 -0
  262. package/dist/src/helpers/redis/broadcast.d.ts +13 -0
  263. package/dist/src/helpers/redis/broadcast.d.ts.map +1 -0
  264. package/dist/src/helpers/redis/broadcast.js +100 -0
  265. package/dist/src/helpers/redis/broadcast.js.map +1 -0
  266. package/dist/src/helpers/redis/cache.d.ts +7 -0
  267. package/dist/src/helpers/redis/cache.d.ts.map +1 -0
  268. package/dist/src/helpers/redis/cache.js +28 -0
  269. package/dist/src/helpers/redis/cache.js.map +1 -0
  270. package/dist/src/helpers/redis/mutex.d.ts +24 -0
  271. package/dist/src/helpers/redis/mutex.d.ts.map +1 -0
  272. package/dist/src/helpers/redis/mutex.js +240 -0
  273. package/dist/src/helpers/redis/mutex.js.map +1 -0
  274. package/dist/src/helpers/redis/redis.d.ts +11 -0
  275. package/dist/src/helpers/redis/redis.d.ts.map +1 -0
  276. package/dist/src/helpers/redis/redis.js +59 -0
  277. package/dist/src/helpers/redis/redis.js.map +1 -0
  278. package/dist/src/helpers/security/crypto.d.ts +26 -0
  279. package/dist/src/helpers/security/crypto.d.ts.map +1 -0
  280. package/dist/src/helpers/security/crypto.js +121 -0
  281. package/dist/src/helpers/security/crypto.js.map +1 -0
  282. package/dist/src/helpers/security/validation.d.ts +4 -0
  283. package/dist/src/helpers/security/validation.d.ts.map +1 -0
  284. package/dist/src/helpers/security/validation.js +25 -0
  285. package/dist/src/helpers/security/validation.js.map +1 -0
  286. package/dist/src/helpers/utils/date.d.ts +4 -0
  287. package/dist/src/helpers/utils/date.d.ts.map +1 -0
  288. package/dist/src/helpers/utils/date.js +23 -0
  289. package/dist/src/helpers/utils/date.js.map +1 -0
  290. package/dist/src/helpers/utils/error.d.ts +24 -0
  291. package/dist/src/helpers/utils/error.d.ts.map +1 -0
  292. package/dist/src/helpers/utils/error.js +168 -0
  293. package/dist/src/helpers/utils/error.js.map +1 -0
  294. package/dist/src/helpers/utils/jsx.d.ts +3 -0
  295. package/dist/src/helpers/utils/jsx.d.ts.map +1 -0
  296. package/dist/src/helpers/utils/jsx.js +13 -0
  297. package/dist/src/helpers/utils/jsx.js.map +1 -0
  298. package/dist/src/helpers/utils/uuid.d.ts +3 -0
  299. package/dist/src/helpers/utils/uuid.d.ts.map +1 -0
  300. package/dist/src/helpers/utils/uuid.js +14 -0
  301. package/dist/src/helpers/utils/uuid.js.map +1 -0
  302. package/dist/src/http/auth.d.ts +46 -0
  303. package/dist/src/http/auth.d.ts.map +1 -0
  304. package/dist/src/http/auth.js +162 -0
  305. package/dist/src/http/auth.js.map +1 -0
  306. package/dist/src/http/context.d.ts +5 -0
  307. package/dist/src/http/context.d.ts.map +1 -0
  308. package/dist/src/http/context.js +22 -0
  309. package/dist/src/http/context.js.map +1 -0
  310. package/dist/src/http/cors.d.ts +36 -0
  311. package/dist/src/http/cors.d.ts.map +1 -0
  312. package/dist/src/http/cors.js +171 -0
  313. package/dist/src/http/cors.js.map +1 -0
  314. package/dist/src/http/errors.d.ts +3 -0
  315. package/dist/src/http/errors.d.ts.map +1 -0
  316. package/dist/src/http/errors.js +10 -0
  317. package/dist/src/http/errors.js.map +1 -0
  318. package/dist/src/http/index.d.ts +24 -0
  319. package/dist/src/http/index.d.ts.map +1 -0
  320. package/dist/src/http/index.js +25 -0
  321. package/dist/src/http/index.js.map +1 -0
  322. package/dist/src/http/kernel.d.ts +17 -0
  323. package/dist/src/http/kernel.d.ts.map +1 -0
  324. package/dist/src/http/kernel.js +133 -0
  325. package/dist/src/http/kernel.js.map +1 -0
  326. package/dist/src/http/middleware.d.ts +12 -0
  327. package/dist/src/http/middleware.d.ts.map +1 -0
  328. package/dist/src/http/middleware.js +61 -0
  329. package/dist/src/http/middleware.js.map +1 -0
  330. package/dist/src/http/overrides.d.ts +2 -0
  331. package/dist/src/http/overrides.d.ts.map +1 -0
  332. package/dist/src/http/overrides.js +19 -0
  333. package/dist/src/http/overrides.js.map +1 -0
  334. package/dist/src/http/store.d.ts +33 -0
  335. package/dist/src/http/store.d.ts.map +1 -0
  336. package/dist/src/http/store.js +102 -0
  337. package/dist/src/http/store.js.map +1 -0
  338. package/dist/src/http/uploads.d.ts +7 -0
  339. package/dist/src/http/uploads.d.ts.map +1 -0
  340. package/dist/src/http/uploads.js +8 -0
  341. package/dist/src/http/uploads.js.map +1 -0
  342. package/dist/src/http/workflow.d.ts +18 -0
  343. package/dist/src/http/workflow.d.ts.map +1 -0
  344. package/dist/src/http/workflow.js +181 -0
  345. package/dist/src/http/workflow.js.map +1 -0
  346. package/dist/src/index.d.ts +13 -0
  347. package/dist/src/index.d.ts.map +1 -0
  348. package/dist/src/index.js +25 -0
  349. package/dist/src/index.js.map +1 -0
  350. package/dist/src/services/cli/invoke.d.ts +5 -0
  351. package/dist/src/services/cli/invoke.d.ts.map +1 -0
  352. package/dist/src/services/cli/invoke.js +45 -0
  353. package/dist/src/services/cli/invoke.js.map +1 -0
  354. package/dist/src/services/cli/repl-context.d.ts +13 -0
  355. package/dist/src/services/cli/repl-context.d.ts.map +1 -0
  356. package/dist/src/services/cli/repl-context.js +60 -0
  357. package/dist/src/services/cli/repl-context.js.map +1 -0
  358. package/dist/src/services/cli/repl.d.ts +5 -0
  359. package/dist/src/services/cli/repl.d.ts.map +1 -0
  360. package/dist/src/services/cli/repl.js +32 -0
  361. package/dist/src/services/cli/repl.js.map +1 -0
  362. package/dist/src/services/cli.d.ts +12 -0
  363. package/dist/src/services/cli.d.ts.map +1 -0
  364. package/dist/src/services/cli.js +76 -0
  365. package/dist/src/services/cli.js.map +1 -0
  366. package/dist/src/services/index.d.ts +7 -0
  367. package/dist/src/services/index.d.ts.map +1 -0
  368. package/dist/src/services/index.js +10 -0
  369. package/dist/src/services/index.js.map +1 -0
  370. package/dist/src/services/leader.d.ts +32 -0
  371. package/dist/src/services/leader.d.ts.map +1 -0
  372. package/dist/src/services/leader.js +174 -0
  373. package/dist/src/services/leader.js.map +1 -0
  374. package/dist/src/services/logger.d.ts +35 -0
  375. package/dist/src/services/logger.d.ts.map +1 -0
  376. package/dist/src/services/logger.js +245 -0
  377. package/dist/src/services/logger.js.map +1 -0
  378. package/dist/src/services/mail/index.d.ts +61 -0
  379. package/dist/src/services/mail/index.d.ts.map +1 -0
  380. package/dist/src/services/mail/index.js +90 -0
  381. package/dist/src/services/mail/index.js.map +1 -0
  382. package/dist/src/services/mail/postmark.d.ts +11 -0
  383. package/dist/src/services/mail/postmark.d.ts.map +1 -0
  384. package/dist/src/services/mail/postmark.js +42 -0
  385. package/dist/src/services/mail/postmark.js.map +1 -0
  386. package/dist/src/services/mail/smtp.d.ts +11 -0
  387. package/dist/src/services/mail/smtp.d.ts.map +1 -0
  388. package/dist/src/services/mail/smtp.js +61 -0
  389. package/dist/src/services/mail/smtp.js.map +1 -0
  390. package/dist/src/services/mesh.d.ts +65 -0
  391. package/dist/src/services/mesh.d.ts.map +1 -0
  392. package/dist/src/services/mesh.js +422 -0
  393. package/dist/src/services/mesh.js.map +1 -0
  394. package/dist/src/services/worker/bootstrap.d.ts +3 -0
  395. package/dist/src/services/worker/bootstrap.d.ts.map +1 -0
  396. package/dist/src/services/worker/bootstrap.js +64 -0
  397. package/dist/src/services/worker/bootstrap.js.map +1 -0
  398. package/dist/src/services/worker/cli.d.ts +11 -0
  399. package/dist/src/services/worker/cli.d.ts.map +1 -0
  400. package/dist/src/services/worker/cli.js +43 -0
  401. package/dist/src/services/worker/cli.js.map +1 -0
  402. package/dist/src/services/worker/entity.d.ts +18 -0
  403. package/dist/src/services/worker/entity.d.ts.map +1 -0
  404. package/dist/src/services/worker/entity.js +16 -0
  405. package/dist/src/services/worker/entity.js.map +1 -0
  406. package/dist/src/services/worker/index.d.ts +9 -0
  407. package/dist/src/services/worker/index.d.ts.map +1 -0
  408. package/dist/src/services/worker/index.js +40 -0
  409. package/dist/src/services/worker/index.js.map +1 -0
  410. package/dist/src/services/worker/queue.d.ts +8 -0
  411. package/dist/src/services/worker/queue.d.ts.map +1 -0
  412. package/dist/src/services/worker/queue.js +32 -0
  413. package/dist/src/services/worker/queue.js.map +1 -0
  414. package/dist/src/services/worker/recorder.d.ts +16 -0
  415. package/dist/src/services/worker/recorder.d.ts.map +1 -0
  416. package/dist/src/services/worker/recorder.js +168 -0
  417. package/dist/src/services/worker/recorder.js.map +1 -0
  418. package/dist/src/services/worker/runner.d.ts +21 -0
  419. package/dist/src/services/worker/runner.d.ts.map +1 -0
  420. package/dist/src/services/worker/runner.js +156 -0
  421. package/dist/src/services/worker/runner.js.map +1 -0
  422. package/dist/src/services/worker/types.d.ts +26 -0
  423. package/dist/src/services/worker/types.d.ts.map +1 -0
  424. package/dist/src/services/worker/types.js +29 -0
  425. package/dist/src/services/worker/types.js.map +1 -0
  426. package/dist/src/srpc/SrpcByteStream.d.ts +67 -0
  427. package/dist/src/srpc/SrpcByteStream.d.ts.map +1 -0
  428. package/dist/src/srpc/SrpcByteStream.js +319 -0
  429. package/dist/src/srpc/SrpcByteStream.js.map +1 -0
  430. package/dist/src/srpc/SrpcClient.d.ts +75 -0
  431. package/dist/src/srpc/SrpcClient.d.ts.map +1 -0
  432. package/dist/src/srpc/SrpcClient.js +445 -0
  433. package/dist/src/srpc/SrpcClient.js.map +1 -0
  434. package/dist/src/srpc/SrpcServer.d.ts +80 -0
  435. package/dist/src/srpc/SrpcServer.d.ts.map +1 -0
  436. package/dist/src/srpc/SrpcServer.js +561 -0
  437. package/dist/src/srpc/SrpcServer.js.map +1 -0
  438. package/dist/src/srpc/index.d.ts +7 -0
  439. package/dist/src/srpc/index.d.ts.map +1 -0
  440. package/dist/src/srpc/index.js +12 -0
  441. package/dist/src/srpc/index.js.map +1 -0
  442. package/dist/src/srpc/types.d.ts +131 -0
  443. package/dist/src/srpc/types.d.ts.map +1 -0
  444. package/dist/src/srpc/types.js +65 -0
  445. package/dist/src/srpc/types.js.map +1 -0
  446. package/dist/src/telemetry/index.d.ts +2 -0
  447. package/dist/src/telemetry/index.d.ts.map +1 -0
  448. package/dist/src/telemetry/index.js +5 -0
  449. package/dist/src/telemetry/index.js.map +1 -0
  450. package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts +22 -0
  451. package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts.map +1 -0
  452. package/dist/src/telemetry/otel/MariaDBInstrumentation.js +248 -0
  453. package/dist/src/telemetry/otel/MariaDBInstrumentation.js.map +1 -0
  454. package/dist/src/telemetry/otel/helpers.d.ts +27 -0
  455. package/dist/src/telemetry/otel/helpers.d.ts.map +1 -0
  456. package/dist/src/telemetry/otel/helpers.js +126 -0
  457. package/dist/src/telemetry/otel/helpers.js.map +1 -0
  458. package/dist/src/telemetry/otel/index.d.ts +14 -0
  459. package/dist/src/telemetry/otel/index.d.ts.map +1 -0
  460. package/dist/src/telemetry/otel/index.js +132 -0
  461. package/dist/src/telemetry/otel/index.js.map +1 -0
  462. package/dist/src/telemetry/otel/metrics.controller.d.ts +6 -0
  463. package/dist/src/telemetry/otel/metrics.controller.d.ts.map +1 -0
  464. package/dist/src/telemetry/otel/metrics.controller.js +63 -0
  465. package/dist/src/telemetry/otel/metrics.controller.js.map +1 -0
  466. package/dist/src/telemetry/sentry.d.ts +9 -0
  467. package/dist/src/telemetry/sentry.d.ts.map +1 -0
  468. package/dist/src/telemetry/sentry.js +62 -0
  469. package/dist/src/telemetry/sentry.js.map +1 -0
  470. package/dist/src/testing/expect.d.ts +25 -0
  471. package/dist/src/testing/expect.d.ts.map +1 -0
  472. package/dist/src/testing/expect.js +151 -0
  473. package/dist/src/testing/expect.js.map +1 -0
  474. package/dist/src/testing/fixtures.d.ts +19 -0
  475. package/dist/src/testing/fixtures.d.ts.map +1 -0
  476. package/dist/src/testing/fixtures.js +69 -0
  477. package/dist/src/testing/fixtures.js.map +1 -0
  478. package/dist/src/testing/index.d.ts +260 -0
  479. package/dist/src/testing/index.d.ts.map +1 -0
  480. package/dist/src/testing/index.js +345 -0
  481. package/dist/src/testing/index.js.map +1 -0
  482. package/dist/src/testing/requests.d.ts +10 -0
  483. package/dist/src/testing/requests.d.ts.map +1 -0
  484. package/dist/src/testing/requests.js +56 -0
  485. package/dist/src/testing/requests.js.map +1 -0
  486. package/dist/src/testing/sql.d.ts +11 -0
  487. package/dist/src/testing/sql.d.ts.map +1 -0
  488. package/dist/src/testing/sql.js +55 -0
  489. package/dist/src/testing/sql.js.map +1 -0
  490. package/dist/src/types/index.d.ts +57 -0
  491. package/dist/src/types/index.d.ts.map +1 -0
  492. package/dist/src/types/index.js +73 -0
  493. package/dist/src/types/index.js.map +1 -0
  494. package/dist/src/types/phone.d.ts +11 -0
  495. package/dist/src/types/phone.d.ts.map +1 -0
  496. package/dist/src/types/phone.js +73 -0
  497. package/dist/src/types/phone.js.map +1 -0
  498. package/docs/.vitepress/config.mts +79 -0
  499. package/docs/.yarnrc.yml +1 -0
  500. package/docs/content/CONTRIBUTING.md +140 -0
  501. package/docs/content/README-DEV.md +142 -0
  502. package/docs/content/README.md +39 -0
  503. package/docs/content/authentication.md +215 -0
  504. package/docs/content/cli.md +335 -0
  505. package/docs/content/configuration.md +175 -0
  506. package/docs/content/database.md +422 -0
  507. package/docs/content/devconsole.md +123 -0
  508. package/docs/content/getting-started.md +154 -0
  509. package/docs/content/guides/test-migration-guide.md +351 -0
  510. package/docs/content/health.md +54 -0
  511. package/docs/content/helpers.md +322 -0
  512. package/docs/content/http.md +253 -0
  513. package/docs/content/index.md +147 -0
  514. package/docs/content/leader-service.md +98 -0
  515. package/docs/content/logging.md +150 -0
  516. package/docs/content/mail.md +161 -0
  517. package/docs/content/mesh-service.md +204 -0
  518. package/docs/content/public/images/devconsole/01-dashboard.png +0 -0
  519. package/docs/content/public/images/devconsole/02-routes.png +0 -0
  520. package/docs/content/public/images/devconsole/03-openapi.png +0 -0
  521. package/docs/content/public/images/devconsole/04-requests.png +0 -0
  522. package/docs/content/public/images/devconsole/05-srpc.png +0 -0
  523. package/docs/content/public/images/devconsole/06-database.png +0 -0
  524. package/docs/content/public/images/devconsole/07-health.png +0 -0
  525. package/docs/content/public/images/devconsole/08-mutex.png +0 -0
  526. package/docs/content/public/images/devconsole/09-repl.png +0 -0
  527. package/docs/content/public/images/devconsole/10-workers.png +0 -0
  528. package/docs/content/redis.md +168 -0
  529. package/docs/content/srpc.md +261 -0
  530. package/docs/content/telemetry.md +166 -0
  531. package/docs/content/testing.md +222 -0
  532. package/docs/content/types.md +215 -0
  533. package/docs/content/worker.md +177 -0
  534. package/docs/package.json +16 -0
  535. package/docs/scripts/README-SCREENSHOTS.md +145 -0
  536. package/docs/scripts/capture-devconsole-screenshots.js +184 -0
  537. package/docs/yarn.lock +2408 -0
  538. package/package.json +144 -0
  539. package/patches/@deepkit+type+1.0.19.patch +38 -0
  540. package/patches/deepkit-openapi-core+0.0.9.patch +62 -0
  541. package/src/app/base.ts +253 -0
  542. package/src/app/config.loader.ts +66 -0
  543. package/src/app/config.ts +119 -0
  544. package/src/app/const.ts +4 -0
  545. package/src/app/dev.ts +92 -0
  546. package/src/app/index.ts +6 -0
  547. package/src/app/openapi.ts +3 -0
  548. package/src/app/resolver.ts +49 -0
  549. package/src/app/shutdown.ts +55 -0
  550. package/src/app/state.ts +19 -0
  551. package/src/auth/index.ts +2 -0
  552. package/src/auth/jwt.ts +275 -0
  553. package/src/auth/provider.ts +57 -0
  554. package/src/cli/dksf-dev.ts +416 -0
  555. package/src/cli/dksf-gen-proto.ts +176 -0
  556. package/src/cli/dksf-install.ts +11 -0
  557. package/src/cli/dksf-test.ts +84 -0
  558. package/src/cli/dksf-update.ts +101 -0
  559. package/src/database/common.ts +385 -0
  560. package/src/database/dialect.ts +43 -0
  561. package/src/database/entity.ts +285 -0
  562. package/src/database/index.ts +7 -0
  563. package/src/database/migration/MigrationResetCommand.ts +72 -0
  564. package/src/database/migration/MigrationRunCommand.ts +118 -0
  565. package/src/database/migration/characters.ts +53 -0
  566. package/src/database/migration/create/MigrationCreateCommand.ts +96 -0
  567. package/src/database/migration/create/comparator.ts +467 -0
  568. package/src/database/migration/create/db-reader.ts +510 -0
  569. package/src/database/migration/create/ddl-generator.ts +755 -0
  570. package/src/database/migration/create/entity-reader.ts +471 -0
  571. package/src/database/migration/create/file-generator.ts +57 -0
  572. package/src/database/migration/create/prompt.ts +49 -0
  573. package/src/database/migration/create/schema-model.ts +102 -0
  574. package/src/database/migration/helpers.ts +7 -0
  575. package/src/database/migration/index.ts +35 -0
  576. package/src/database/migration/migration.entity.ts +10 -0
  577. package/src/database/mysql.ts +140 -0
  578. package/src/database/postgres.ts +97 -0
  579. package/src/database/types.ts +18 -0
  580. package/src/devconsole/devconsole.controller.ts +59 -0
  581. package/src/devconsole/devconsole.middleware.ts +23 -0
  582. package/src/devconsole/devconsole.srpc.ts +94 -0
  583. package/src/devconsole/devconsole.store.ts +190 -0
  584. package/src/devconsole/devconsole.ws.ts +491 -0
  585. package/src/devconsole/index.ts +1 -0
  586. package/src/devconsole/patches.ts +428 -0
  587. package/src/health/health.module.ts +30 -0
  588. package/src/health/healthcheck.controller.ts +17 -0
  589. package/src/health/healthcheck.service.ts +28 -0
  590. package/src/health/index.ts +2 -0
  591. package/src/helpers/async/context.ts +67 -0
  592. package/src/helpers/async/process.ts +49 -0
  593. package/src/helpers/async/promise.ts +16 -0
  594. package/src/helpers/data/array.ts +11 -0
  595. package/src/helpers/data/objects.ts +64 -0
  596. package/src/helpers/data/serialization.ts +11 -0
  597. package/src/helpers/data/transformer.ts +54 -0
  598. package/src/helpers/framework/decorators.ts +27 -0
  599. package/src/helpers/framework/event.ts +11 -0
  600. package/src/helpers/framework/injection.ts +47 -0
  601. package/src/helpers/index.ts +34 -0
  602. package/src/helpers/io/package.ts +26 -0
  603. package/src/helpers/io/stream.ts +79 -0
  604. package/src/helpers/redis/broadcast.ts +96 -0
  605. package/src/helpers/redis/cache.ts +28 -0
  606. package/src/helpers/redis/mutex.ts +260 -0
  607. package/src/helpers/redis/redis.ts +60 -0
  608. package/src/helpers/security/crypto.ts +133 -0
  609. package/src/helpers/security/validation.ts +16 -0
  610. package/src/helpers/utils/date.ts +13 -0
  611. package/src/helpers/utils/error.ts +155 -0
  612. package/src/helpers/utils/jsx.ts +8 -0
  613. package/src/helpers/utils/uuid.ts +8 -0
  614. package/src/http/auth.ts +156 -0
  615. package/src/http/context.ts +15 -0
  616. package/src/http/cors.ts +159 -0
  617. package/src/http/errors.ts +9 -0
  618. package/src/http/index.ts +19 -0
  619. package/src/http/kernel.ts +138 -0
  620. package/src/http/middleware.ts +59 -0
  621. package/src/http/overrides.ts +20 -0
  622. package/src/http/store.ts +86 -0
  623. package/src/http/uploads.ts +6 -0
  624. package/src/http/workflow.ts +167 -0
  625. package/src/index.ts +19 -0
  626. package/src/services/cli/invoke.ts +39 -0
  627. package/src/services/cli/repl-context.ts +63 -0
  628. package/src/services/cli/repl.ts +22 -0
  629. package/src/services/cli.ts +74 -0
  630. package/src/services/index.ts +6 -0
  631. package/src/services/leader.ts +201 -0
  632. package/src/services/logger.ts +258 -0
  633. package/src/services/mail/index.ts +117 -0
  634. package/src/services/mail/postmark.ts +37 -0
  635. package/src/services/mail/smtp.ts +46 -0
  636. package/src/services/mesh.ts +508 -0
  637. package/src/services/worker/bootstrap.ts +53 -0
  638. package/src/services/worker/cli.ts +32 -0
  639. package/src/services/worker/entity.ts +22 -0
  640. package/src/services/worker/index.ts +30 -0
  641. package/src/services/worker/queue.ts +35 -0
  642. package/src/services/worker/recorder.ts +172 -0
  643. package/src/services/worker/runner.ts +179 -0
  644. package/src/services/worker/types.ts +32 -0
  645. package/src/srpc/SrpcByteStream.ts +382 -0
  646. package/src/srpc/SrpcClient.ts +512 -0
  647. package/src/srpc/SrpcServer.ts +681 -0
  648. package/src/srpc/index.ts +15 -0
  649. package/src/srpc/types.ts +146 -0
  650. package/src/telemetry/index.ts +1 -0
  651. package/src/telemetry/otel/MariaDBInstrumentation.ts +297 -0
  652. package/src/telemetry/otel/helpers.ts +117 -0
  653. package/src/telemetry/otel/index.ts +150 -0
  654. package/src/telemetry/otel/metrics.controller.ts +50 -0
  655. package/src/telemetry/sentry.ts +58 -0
  656. package/src/testing/expect.ts +148 -0
  657. package/src/testing/fixtures.ts +62 -0
  658. package/src/testing/index.ts +355 -0
  659. package/src/testing/requests.ts +68 -0
  660. package/src/testing/sql.ts +50 -0
  661. package/src/types/index.ts +64 -0
  662. package/src/types/phone.ts +64 -0
  663. package/types.d.ts +20 -0
@@ -0,0 +1,175 @@
1
+ # Configuration
2
+
3
+ Configuration is managed via `BaseAppConfig`, which uses `@zyno-io/config` to load values from environment variables. Extend it with your own properties.
4
+
5
+ ```typescript
6
+ import { BaseAppConfig } from '@zyno-io/dk-server-foundation';
7
+
8
+ class AppConfig extends BaseAppConfig {
9
+ STRIPE_KEY_SECRET!: string;
10
+ MAX_UPLOAD_SIZE: number = 10_000_000;
11
+ }
12
+ ```
13
+
14
+ Properties ending in `_SECRET` are treated as secrets by the config loader.
15
+
16
+ ## Built-in Configuration
17
+
18
+ ### Application
19
+
20
+ | Variable | Type | Default | Description |
21
+ | --------- | -------- | ------- | ----------------------------------------------------------- |
22
+ | `APP_ENV` | `string` | — | Application environment (`development`, `production`, etc.) |
23
+ | `PORT` | `number` | `3000` | HTTP server port |
24
+
25
+ ### MySQL Database
26
+
27
+ | Variable | Type | Default | Description |
28
+ | ---------------------------- | -------- | ------------------- | ------------------------ |
29
+ | `MYSQL_HOST` | `string` | — | Database host |
30
+ | `MYSQL_PORT` | `number` | — | Database port |
31
+ | `MYSQL_USER` | `string` | — | Database user |
32
+ | `MYSQL_PASSWORD_SECRET` | `string` | — | Database password |
33
+ | `MYSQL_DATABASE` | `string` | — | Database name |
34
+ | `MYSQL_CONNECTION_LIMIT` | `number` | 10 (prod) / 5 (dev) | Max pool connections |
35
+ | `MYSQL_MIN_IDLE_CONNECTIONS` | `number` | — (prod) / 1 (dev) | Minimum idle connections |
36
+ | `MYSQL_IDLE_TIMEOUT_SECONDS` | `number` | 60 (prod) / 5 (dev) | Idle connection timeout |
37
+
38
+ ### JWT Authentication
39
+
40
+ | Variable | Type | Default | Description |
41
+ | -------------------------- | --------- | ------- | --------------------------------------- |
42
+ | `AUTH_JWT_ISSUER` | `string` | — | JWT issuer claim |
43
+ | `AUTH_JWT_EXPIRATION_MINS` | `number` | — | Token expiration in minutes |
44
+ | `AUTH_JWT_COOKIE_NAME` | `string` | — | Cookie name for JWT storage |
45
+ | `AUTH_JWT_SECRET` | `string` | — | HMAC secret (plain string) |
46
+ | `AUTH_JWT_SECRET_B64` | `string` | — | HMAC secret (base64-encoded) |
47
+ | `AUTH_JWT_ED_SECRET` | `string` | — | EdDSA private key (PEM, base64-encoded) |
48
+ | `AUTH_JWT_ENABLE_VERIFY` | `boolean` | `true` | Enable JWT signature verification |
49
+
50
+ ### Basic Authentication
51
+
52
+ | Variable | Type | Default | Description |
53
+ | ------------------- | -------- | ------- | ---------------------------- |
54
+ | `AUTH_BASIC_SECRET` | `string` | — | Password for HTTP Basic Auth |
55
+
56
+ ### Cryptography
57
+
58
+ | Variable | Type | Default | Description |
59
+ | ------------------ | -------- | ------- | --------------------------------------------- |
60
+ | `CRYPTO_SECRET` | `string` | — | 32-byte key (or 64 hex chars) for AES-256-GCM |
61
+ | `CRYPTO_IV_LENGTH` | `number` | `12` | IV length for AES-GCM |
62
+
63
+ ### HTTP
64
+
65
+ | Variable | Type | Default | Description |
66
+ | -------------------------------- | --------- | ------- | ----------------------------------------------- |
67
+ | `USE_REAL_IP_HEADER` | `boolean` | — | Trust `x-real-ip` header from reverse proxy |
68
+ | `HTTP_REQUEST_LOGGING_MODE` | `string` | `e2e` | Logging mode: `none`, `e2e`, `finish`, `errors` |
69
+ | `HEALTHZ_ENABLE_REQUEST_LOGGING` | `boolean` | `false` | Log healthcheck requests |
70
+
71
+ ### Redis
72
+
73
+ All Redis configurations support both direct connection and Sentinel mode. The library uses separate Redis instances for different concerns:
74
+
75
+ #### Default Redis
76
+
77
+ | Variable | Description |
78
+ | --------------------- | --------------------------------------- |
79
+ | `REDIS_HOST` | Redis host |
80
+ | `REDIS_PORT` | Redis port |
81
+ | `REDIS_PREFIX` | Key prefix (falls back to package name) |
82
+ | `REDIS_SENTINEL_HOST` | Sentinel host |
83
+ | `REDIS_SENTINEL_PORT` | Sentinel port |
84
+ | `REDIS_SENTINEL_NAME` | Sentinel master name |
85
+
86
+ #### Cache Redis (`CACHE_REDIS_` prefix)
87
+
88
+ Used by the `Cache` class. Falls back to default Redis settings.
89
+
90
+ #### Broadcast Redis (`BROADCAST_REDIS_` prefix)
91
+
92
+ Used by `createBroadcastChannel()` and `createDistributedMethod()`. Falls back to default Redis settings.
93
+
94
+ #### BullMQ Redis (`BULL_REDIS_` prefix)
95
+
96
+ Used by the worker system. Falls back to default Redis settings.
97
+
98
+ | Variable | Type | Default | Description |
99
+ | ------------ | -------- | --------- | ------------------------- |
100
+ | `BULL_QUEUE` | `string` | `default` | Default BullMQ queue name |
101
+
102
+ #### Mesh Redis (`MESH_REDIS_` prefix)
103
+
104
+ Used by `MeshService`. Falls back to default Redis settings.
105
+
106
+ #### Mutex Redis (`MUTEX_REDIS_` prefix)
107
+
108
+ Used by `withMutex()` and `LeaderService`. Falls back to default Redis settings.
109
+
110
+ | Variable | Type | Default | Description |
111
+ | ------------ | -------- | ------- | ------------------------------------------- |
112
+ | `MUTEX_MODE` | `string` | `local` | Mutex mode: `local` (in-process) or `redis` |
113
+
114
+ ### Mail
115
+
116
+ | Variable | Type | Default | Description |
117
+ | ---------------------- | --------- | ----------- | ----------------------------------- |
118
+ | `MAIL_PROVIDER` | `string` | `smtp` | Mail provider: `smtp` or `postmark` |
119
+ | `MAIL_FROM` | `string` | — | Sender email address |
120
+ | `MAIL_FROM_NAME` | `string` | — | Sender display name |
121
+ | `SMTP_HOST` | `string` | `127.0.0.1` | SMTP server host |
122
+ | `SMTP_PORT` | `number` | `1025` | SMTP server port |
123
+ | `SMTP_USER` | `string` | — | SMTP username |
124
+ | `SMTP_PASSWORD_SECRET` | `string` | — | SMTP password |
125
+ | `SMTP_TLS` | `boolean` | `false` | Enable TLS |
126
+ | `POSTMARK_SECRET` | `string` | — | Postmark API token |
127
+
128
+ ### Workers
129
+
130
+ | Variable | Type | Default | Description |
131
+ | ------------------- | --------- | ------------ | ------------------------ |
132
+ | `ENABLE_JOB_RUNNER` | `boolean` | `true` (dev) | Enable BullMQ job runner |
133
+
134
+ ### Observability
135
+
136
+ | Variable | Type | Default | Description |
137
+ | ------------------------------------- | --------- | ------- | ------------------------------------- |
138
+ | `SENTRY_DSN` | `string` | — | Sentry DSN for error tracking |
139
+ | `OTEL_EXPORTER_OTLP_ENDPOINT` | `string` | — | OTLP endpoint for traces and metrics |
140
+ | `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | `string` | — | OTLP endpoint for traces only |
141
+ | `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | `string` | — | OTLP endpoint for metrics push |
142
+ | `OTEL_METRICS_ENDPOINT_ENABLED` | `boolean` | — | Enable `/metrics` Prometheus endpoint |
143
+ | `OTEL_DEBUG` | `boolean` | — | Enable debug logging |
144
+ | `ALERTS_SLACK_WEBHOOK_URL` | `string` | — | Slack webhook for alert-level errors |
145
+
146
+ ### SRPC
147
+
148
+ | Variable | Type | Default | Description |
149
+ | -------------------------- | -------- | ------- | ----------------------------------- |
150
+ | `SRPC_AUTH_SECRET` | `string` | — | HMAC secret for SRPC authentication |
151
+ | `SRPC_AUTH_CLOCK_DRIFT_MS` | `number` | `30000` | Allowed clock drift for SRPC auth |
152
+
153
+ ### OpenAPI
154
+
155
+ | Variable | Type | Default | Description |
156
+ | ----------------------- | --------- | ------- | ------------------------------------- |
157
+ | `ENABLE_OPENAPI_SCHEMA` | `boolean` | — | Dump OpenAPI schema to `openapi.yaml` |
158
+
159
+ ## `isDevFeatureEnabled(envVar, defaultInDev?)`
160
+
161
+ Helper function to check if a feature flag is enabled. Returns `true` in development/Jest by default.
162
+
163
+ ```typescript
164
+ import { isDevFeatureEnabled } from '@zyno-io/dk-server-foundation';
165
+
166
+ if (isDevFeatureEnabled(config.MY_FEATURE)) {
167
+ // enabled
168
+ }
169
+ ```
170
+
171
+ | Input | Production | Development |
172
+ | ------------------ | ---------- | ---------------- |
173
+ | `undefined` | `false` | `true` (default) |
174
+ | `'1'` or `'true'` | `true` | `true` |
175
+ | `'0'` or `'false'` | `false` | `false` |
@@ -0,0 +1,422 @@
1
+ # Database
2
+
3
+ MySQL/MariaDB ORM layer extending Deepkit's database with transaction hooks, session locks, raw query helpers, entity creation utilities, dirty tracking, relationship resolution, and a migration system.
4
+
5
+ ## Creating a Database
6
+
7
+ Use `createMySQLDatabase()` to define a database class with your entities:
8
+
9
+ ```typescript
10
+ import { createMySQLDatabase } from '@zyno-io/dk-server-foundation';
11
+
12
+ class AppDB extends createMySQLDatabase({ enableLocksTable: true }, [User, Post, Comment]) {}
13
+ ```
14
+
15
+ Pass the database class to `createApp()`:
16
+
17
+ ```typescript
18
+ const app = createApp({
19
+ config: AppConfig,
20
+ db: AppDB
21
+ });
22
+ ```
23
+
24
+ ### `createMySQLDatabase(config, entities?)`
25
+
26
+ | Option | Type | Default | Description |
27
+ | ------------------ | --------- | ------- | ---------------------------------------------------- |
28
+ | `enableLocksTable` | `boolean` | `false` | Create the `_locks` table for session-level locking. |
29
+
30
+ All other MySQL connection options are configured via environment variables (see [Configuration](./configuration.md)).
31
+
32
+ ## Entity Creation
33
+
34
+ Type-safe entity creation with automatic inference of optional fields (auto-increment, nullable, or `HasDefault`).
35
+
36
+ ### Create Without Persisting
37
+
38
+ ```typescript
39
+ import { createEntity, createEntities } from '@zyno-io/dk-server-foundation';
40
+
41
+ const user = createEntity(User, { email: 'a@b.com', name: 'Alice' });
42
+ const users = createEntities(User, [
43
+ { email: 'a@b.com', name: 'Alice' },
44
+ { email: 'b@c.com', name: 'Bob' }
45
+ ]);
46
+ ```
47
+
48
+ ### Create and Queue for Persistence
49
+
50
+ Entities are added to the session's unit of work but not flushed until `session.flush()`:
51
+
52
+ ```typescript
53
+ import { createQueuedEntity } from '@zyno-io/dk-server-foundation';
54
+
55
+ await db.transaction(async session => {
56
+ const user = createQueuedEntity(User, { email: 'a@b.com', name: 'Alice' }, session);
57
+ const post = createQueuedEntity(Post, { userId: user.id, title: 'Hello' }, session);
58
+ // Both persisted on commit
59
+ });
60
+ ```
61
+
62
+ ### Create and Persist Immediately
63
+
64
+ ```typescript
65
+ import { createPersistedEntity, createPersistedEntities } from '@zyno-io/dk-server-foundation';
66
+
67
+ const user = await createPersistedEntity(User, { email: 'a@b.com', name: 'Alice' }, session);
68
+ ```
69
+
70
+ ### Persist Existing Entities
71
+
72
+ ```typescript
73
+ import { persistEntity, persistEntities } from '@zyno-io/dk-server-foundation';
74
+
75
+ const user = createEntity(User, { email: 'a@b.com', name: 'Alice' });
76
+ await persistEntity(user, session);
77
+ ```
78
+
79
+ ## Entity Retrieval
80
+
81
+ ```typescript
82
+ import { getEntityOr404, getEntityOrUndefined, getEntity, entityExists } from '@zyno-io/dk-server-foundation';
83
+
84
+ // Throws HttpNotFoundError if not found
85
+ const user = await getEntityOr404(User, { id: 1 });
86
+
87
+ // Returns undefined if not found
88
+ const user = await getEntityOrUndefined(User, { id: 1 });
89
+
90
+ // Throws Deepkit ItemNotFound if not found
91
+ const user = await getEntity(User, { id: 1 });
92
+
93
+ // Check existence
94
+ const exists = await entityExists(User, { email: 'a@b.com' });
95
+ ```
96
+
97
+ ## Transactions and Sessions
98
+
99
+ ### Transactions
100
+
101
+ ```typescript
102
+ await db.transaction(async session => {
103
+ // All operations within this callback are wrapped in a transaction
104
+ const user = createQueuedEntity(User, { name: 'Alice' }, session);
105
+ // Auto-commits on success, auto-rollbacks on error
106
+ });
107
+ ```
108
+
109
+ ### Sessions (No Transaction)
110
+
111
+ ```typescript
112
+ await db.session(async session => {
113
+ // Unit of work without an explicit transaction
114
+ });
115
+ ```
116
+
117
+ ### Reuse or Create
118
+
119
+ ```typescript
120
+ // Uses existing session if provided, otherwise creates a new transaction
121
+ await db.withTransaction(existingSession, async session => {
122
+ // ...
123
+ });
124
+
125
+ // Same for sessions (no transaction)
126
+ await db.withSession(existingSession, async session => {
127
+ // ...
128
+ });
129
+ ```
130
+
131
+ ### Transaction Hooks
132
+
133
+ ```typescript
134
+ await db.transaction(async session => {
135
+ session.addPreCommitHook(async () => {
136
+ // Runs before the transaction commits
137
+ });
138
+
139
+ session.addPostCommitHook(async () => {
140
+ // Runs after successful commit
141
+ // Good for sending notifications, invalidating caches
142
+ });
143
+ });
144
+ ```
145
+
146
+ ### Session Locks
147
+
148
+ Acquire database-level locks that are held until the transaction completes. Requires `enableLocksTable: true` in database config.
149
+
150
+ ```typescript
151
+ await db.transaction(async session => {
152
+ await session.acquireSessionLock(['wallet', walletId]);
153
+ // Lock held until commit/rollback
154
+ // Other transactions attempting the same lock will wait
155
+ });
156
+ ```
157
+
158
+ Lock keys can be a single value or an array that gets flattened: `['wallet', 123]` becomes `wallet:123`.
159
+
160
+ ## Raw Queries
161
+
162
+ ### Tagged Template Literals
163
+
164
+ Use Deepkit's `sql` tagged template for parameterized queries:
165
+
166
+ ```typescript
167
+ import { sql } from '@deepkit/sql';
168
+
169
+ const users = await db.rawFind<User>(sql`SELECT * FROM users WHERE active = ${true} AND age > ${18}`);
170
+
171
+ await db.rawExecute(sql`UPDATE users SET last_login = NOW() WHERE id = ${userId}`);
172
+ ```
173
+
174
+ ### Single Result
175
+
176
+ ```typescript
177
+ const user = await db.rawFindOne<User>(sql`SELECT * FROM users WHERE id = ${id}`);
178
+ // Returns undefined if not found
179
+ ```
180
+
181
+ ### Unsafe (Manual Bindings)
182
+
183
+ ```typescript
184
+ const users = await db.rawFindUnsafe<User>('SELECT * FROM users WHERE name LIKE ?', ['%alice%']);
185
+ ```
186
+
187
+ ### Execute Results
188
+
189
+ ```typescript
190
+ const result = await db.rawExecute(sql`INSERT INTO users ...`);
191
+ // result: { affectedRows, insertId, warningStatus }
192
+ ```
193
+
194
+ ## Dirty Tracking
195
+
196
+ Track changes to entities loaded from the database:
197
+
198
+ ```typescript
199
+ import {
200
+ isEntityDirty,
201
+ getDirtyFields,
202
+ getDirtyDetails,
203
+ isFieldDirty,
204
+ getFieldOriginal,
205
+ getEntityOriginal,
206
+ revertDirtyEntity
207
+ } from '@zyno-io/dk-server-foundation';
208
+
209
+ user.name = 'Bob';
210
+
211
+ isEntityDirty(user); // true
212
+ getDirtyFields(user); // ['name']
213
+ isFieldDirty(user, 'name'); // true
214
+ getFieldOriginal(user, 'name'); // 'Alice'
215
+
216
+ getDirtyDetails(user);
217
+ // { name: { original: 'Alice', current: 'Bob' } }
218
+
219
+ getEntityOriginal(user);
220
+ // { id: 1, name: 'Alice', email: '...' }
221
+
222
+ revertDirtyEntity(user);
223
+ // user.name is now 'Alice' again
224
+ ```
225
+
226
+ ## Bulk Loading
227
+
228
+ ### Keyed Entities
229
+
230
+ Load entities indexed by a field:
231
+
232
+ ```typescript
233
+ import { getKeyedEntities, getKeyedGroupedEntities, getEntitiesById } from '@zyno-io/dk-server-foundation';
234
+
235
+ // Returns { [userId]: User }
236
+ const usersById = await getKeyedEntities({
237
+ schema: User,
238
+ ids: [1, 2, 3],
239
+ keyField: 'id'
240
+ });
241
+
242
+ // Returns { [departmentId]: User[] }
243
+ const usersByDept = await getKeyedGroupedEntities({
244
+ schema: User,
245
+ ids: [10, 20],
246
+ keyField: 'departmentId'
247
+ });
248
+
249
+ // Returns User[]
250
+ const users = await getEntitiesById({
251
+ schema: User,
252
+ ids: [1, 2, 3],
253
+ fields: ['id', 'name', 'email']
254
+ });
255
+ ```
256
+
257
+ ### Relationship Resolution
258
+
259
+ Resolve one-to-one/many-to-one and many-to-many relationships:
260
+
261
+ ```typescript
262
+ import { resolveRelated, resolveRelatedByPivot } from '@zyno-io/dk-server-foundation';
263
+
264
+ // Many-to-one: attach department to each user
265
+ await resolveRelated({
266
+ src: users,
267
+ srcIdField: 'departmentId',
268
+ targetField: 'department',
269
+ targetSchema: Department,
270
+ targetFields: ['id', 'name']
271
+ });
272
+ // users[0].department = Department { id, name }
273
+
274
+ // Many-to-many via pivot table
275
+ await resolveRelatedByPivot({
276
+ src: posts,
277
+ srcIdField: 'id',
278
+ pivotSchema: PostTag,
279
+ pivotIdKey: 'postId',
280
+ pivotRelatedKey: 'tagId',
281
+ targetField: 'tags',
282
+ targetSchema: Tag,
283
+ targetFields: ['id', 'name']
284
+ });
285
+ // posts[0].tags = [{ ...Tag, pivot: PostTag }, ...]
286
+ ```
287
+
288
+ ## Custom Types
289
+
290
+ ### Coordinate (POINT)
291
+
292
+ ```typescript
293
+ import { Coordinate, MySQLCoordinate, NullableMySQLCoordinate } from '@zyno-io/dk-server-foundation';
294
+
295
+ class Location {
296
+ coords!: MySQLCoordinate; // NOT NULL POINT
297
+ altCoords!: NullableMySQLCoordinate; // NULLABLE POINT
298
+ }
299
+ ```
300
+
301
+ ### DateString
302
+
303
+ ```typescript
304
+ import { DateString } from '@zyno-io/dk-server-foundation';
305
+
306
+ class Event {
307
+ date!: DateString; // MySQL DATE column, stored as 'YYYY-MM-DD'
308
+ }
309
+ ```
310
+
311
+ ### UuidString
312
+
313
+ ```typescript
314
+ import { UuidString } from '@zyno-io/dk-server-foundation';
315
+
316
+ class Resource {
317
+ id!: UuidString; // Type annotation for UUID fields
318
+ }
319
+ ```
320
+
321
+ ### Length
322
+
323
+ ```typescript
324
+ import { Length } from '@zyno-io/dk-server-foundation';
325
+
326
+ class Token {
327
+ code!: Length<6>; // Validated fixed-length string
328
+ }
329
+ ```
330
+
331
+ ### HasDefault
332
+
333
+ Mark fields that have application-level defaults so they become optional in `createEntity()`:
334
+
335
+ ```typescript
336
+ import { HasDefault } from '@zyno-io/dk-server-foundation';
337
+
338
+ class User {
339
+ role!: string & HasDefault; // Optional in createEntity()
340
+ }
341
+ ```
342
+
343
+ ## Migrations
344
+
345
+ ### Generating Migrations
346
+
347
+ The `migration:create` command diffs entity definitions against the live database and generates a migration file:
348
+
349
+ ```bash
350
+ # Interactive mode (prompts for column renames)
351
+ node app.js migration:create
352
+
353
+ # Non-interactive (CI-safe, treats ambiguous changes as drop+add)
354
+ node app.js migration:create --non-interactive
355
+ ```
356
+
357
+ It detects: table creation/removal, column additions/removals/modifications/renames, index and foreign key changes, primary key changes, and PostgreSQL enum type management. Both MySQL and PostgreSQL are supported.
358
+
359
+ ### Writing Migrations Manually
360
+
361
+ ```typescript
362
+ // src/migrations/20240101_120000_add_users.ts
363
+ import { createMigration } from '@zyno-io/dk-server-foundation';
364
+
365
+ export default createMigration(async db => {
366
+ await db.rawExecute(sql`
367
+ CREATE TABLE users (
368
+ id INT AUTO_INCREMENT PRIMARY KEY,
369
+ email VARCHAR(255) NOT NULL,
370
+ name VARCHAR(255) NOT NULL
371
+ )
372
+ `);
373
+ });
374
+ ```
375
+
376
+ ### Running Migrations
377
+
378
+ ```bash
379
+ # Via CLI
380
+ node app.js migration:run
381
+
382
+ # Programmatically
383
+ import { runMigrations } from '@zyno-io/dk-server-foundation';
384
+ await runMigrations();
385
+ ```
386
+
387
+ ### Reset Migrations
388
+
389
+ Removes all existing migrations and generates a single base migration from entity definitions:
390
+
391
+ ```bash
392
+ node app.js migration:reset
393
+ ```
394
+
395
+ ### Character Set Standardization
396
+
397
+ ```bash
398
+ node app.js migration:characters [charset] [collation]
399
+ # Defaults: utf8mb4, utf8mb4_0900_ai_ci
400
+ ```
401
+
402
+ Or programmatically:
403
+
404
+ ```typescript
405
+ import { standardizeDbCollation } from '@zyno-io/dk-server-foundation';
406
+ await standardizeDbCollation(db);
407
+ ```
408
+
409
+ ## Entity Utility Functions
410
+
411
+ ```typescript
412
+ import { getPKFieldForEntity, getEntityFields, logSql } from '@zyno-io/dk-server-foundation';
413
+
414
+ // Get primary key field name
415
+ const pk = getPKFieldForEntity(User); // 'id'
416
+
417
+ // Extract only data fields (no methods or relations)
418
+ const fields = getEntityFields(user);
419
+
420
+ // Debug SQL output
421
+ logSql('SELECT * FROM users WHERE id = ?', [1]);
422
+ ```