@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,166 @@
1
+ # Telemetry
2
+
3
+ OpenTelemetry auto-instrumentation and Sentry error tracking.
4
+
5
+ ## OpenTelemetry Setup
6
+
7
+ Call `init()` **before** other imports to enable auto-instrumentation:
8
+
9
+ ```typescript
10
+ import { init } from '@zyno-io/dk-server-foundation/telemetry/otel';
11
+
12
+ init();
13
+
14
+ // Now import everything else
15
+ import { createApp } from '@zyno-io/dk-server-foundation';
16
+ ```
17
+
18
+ ### `init(options?)`
19
+
20
+ | Option | Type | Description |
21
+ | ---------------------------------- | --------------------------------------------- | ----------------------------------------- |
22
+ | `instrumentations` | `Instrumentation[]` | Additional OpenTelemetry instrumentations |
23
+ | `httpIncomingRequestAttributeHook` | `(request) => Record<string, AttributeValue>` | Add custom attributes to HTTP spans |
24
+ | `enableMetricsEndpoint` | `boolean` | Enable `/metrics` Prometheus endpoint |
25
+
26
+ ### Built-in Instrumentations
27
+
28
+ | Instrumentation | Package | Notes |
29
+ | --------------- | ---------------------------------------- | ------------------------------------------ |
30
+ | HTTP | `@opentelemetry/instrumentation-http` | Ignores `/healthz` and Sentry requests |
31
+ | Undici (fetch) | `@opentelemetry/instrumentation-undici` | Ignores `/healthz` and Sentry requests |
32
+ | DNS | `@opentelemetry/instrumentation-dns` | — |
33
+ | ioredis | `@opentelemetry/instrumentation-ioredis` | — |
34
+ | BullMQ | `@opentelemetry/instrumentation-bullmq` | — |
35
+ | MariaDB | Custom | Traces queries and connection pool metrics |
36
+
37
+ ### Trace Export
38
+
39
+ - **Development**: `SimpleSpanProcessor` (immediate export)
40
+ - **Production**: `BatchSpanProcessor` (buffered export)
41
+
42
+ ### Metric Export
43
+
44
+ - **Pull**: `/metrics` endpoint (Prometheus format, restricted to private IPs)
45
+ - **Push**: OTLP endpoint with 10-second interval
46
+
47
+ ### Database Transaction Tracing
48
+
49
+ The library automatically wraps `Database.prototype.transaction` to create spans named `sql.transaction`.
50
+
51
+ ## Tracing Helpers
52
+
53
+ ```typescript
54
+ import { withSpan, withRootSpan, withRemoteSpan, setSpanAttributes } from '@zyno-io/dk-server-foundation';
55
+
56
+ // Create a child span
57
+ const result = await withSpan('processOrder', async () => {
58
+ return await doWork();
59
+ });
60
+
61
+ // With attributes
62
+ const result = await withSpan('processOrder', { orderId: '123' }, async () => {
63
+ return await doWork();
64
+ });
65
+
66
+ // Create a root span (ignores current context)
67
+ const result = await withRootSpan('backgroundJob', async () => {
68
+ return await doWork();
69
+ });
70
+
71
+ // Continue a trace from a remote context
72
+ const result = await withRemoteSpan('handleRequest', { traceparent: '00-abc...' }, undefined, async () => {
73
+ return await doWork();
74
+ });
75
+
76
+ // Add attributes to the active span
77
+ setSpanAttributes({ 'user.id': userId, 'order.total': total });
78
+ ```
79
+
80
+ ### State Inspection
81
+
82
+ ```typescript
83
+ import { isTracingInstalled, getTracer, getActiveSpan, getTraceContext, disableActiveTrace } from '@zyno-io/dk-server-foundation';
84
+
85
+ if (isTracingInstalled()) {
86
+ const tracer = getTracer();
87
+ const span = getActiveSpan();
88
+ const context = getTraceContext(); // { traceId, spanId, traceFlags }
89
+ }
90
+
91
+ // Suppress tracing for a section
92
+ disableActiveTrace();
93
+ ```
94
+
95
+ ### `SpanInfo`
96
+
97
+ Remote span context for `withRemoteSpan`:
98
+
99
+ ```typescript
100
+ type SpanInfo = { traceId: string; spanId: string; traceFlags?: number } | { traceparent: string } | undefined;
101
+ ```
102
+
103
+ ## Sentry
104
+
105
+ Sentry functions are available from the `telemetry/sentry` subpath (not re-exported from the package root):
106
+
107
+ ```typescript
108
+ import { installSentry, isSentryInstalled, flushSentry } from '@zyno-io/dk-server-foundation/telemetry/sentry';
109
+
110
+ installSentry({ dsn: 'https://...' });
111
+
112
+ // Check if installed
113
+ if (isSentryInstalled()) {
114
+ /* ... */
115
+ }
116
+
117
+ // Flush pending events (5s timeout)
118
+ await flushSentry();
119
+ ```
120
+
121
+ Sentry is automatically installed by `createApp()` when `SENTRY_DSN` is configured. It integrates with OpenTelemetry tracing (adds trace context to Sentry events).
122
+
123
+ ### Automatic Error Handling
124
+
125
+ `createApp()` sets up handlers for `uncaughtException` and `unhandledRejection` that report to Sentry and flush before exit.
126
+
127
+ ## MariaDB Instrumentation
128
+
129
+ Custom OpenTelemetry instrumentation for the `mariadb` package:
130
+
131
+ - Wraps `createConnection`, `createPool`, `createPoolCluster`
132
+ - Creates spans for each SQL query
133
+ - Tracks connection pool metrics via `db.client.connections.usage` counter
134
+ - Reports `idle` and `used` connection states
135
+
136
+ ## Metrics Endpoint
137
+
138
+ The `/metrics` endpoint serves Prometheus-formatted metrics. It is:
139
+
140
+ - Restricted to private LAN IPs (10.x, 172.16-31.x, 192.168.x, 127.x, ::1, fc00::/7, fe80::/10)
141
+ - Returns 403 for non-private IPs
142
+ - Returns 503 if the Prometheus exporter is not available
143
+
144
+ ## Configuration
145
+
146
+ | Variable | Description |
147
+ | ------------------------------------- | ------------------------------------- |
148
+ | `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP endpoint for traces and metrics |
149
+ | `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP endpoint for traces only |
150
+ | `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP endpoint for metrics push |
151
+ | `OTEL_METRICS_ENDPOINT_ENABLED` | Enable `/metrics` Prometheus endpoint |
152
+ | `OTEL_DEBUG` | Enable debug logging |
153
+ | `SENTRY_DSN` | Sentry DSN |
154
+ | `APP_ENV` | Environment name sent to Sentry |
155
+
156
+ ### Resource Attributes
157
+
158
+ Traces and metrics include:
159
+
160
+ | Attribute | Source |
161
+ | ----------------------------- | --------------- |
162
+ | `service.name` | Package name |
163
+ | `service.version` | Package version |
164
+ | `deployment.environment.name` | `APP_ENV` |
165
+ | `host.name` | OS hostname |
166
+ | `process.pid` | Process ID |
@@ -0,0 +1,222 @@
1
+ # Testing
2
+
3
+ Test facades with per-test database isolation, entity fixtures, request mocking, and SQL mocking.
4
+
5
+ ## Setup
6
+
7
+ Tests use `node:test` runner against compiled output. The global setup enforces UTC timezone.
8
+
9
+ ```bash
10
+ # Run all tests
11
+ yarn test
12
+
13
+ # Run a single test file
14
+ yarn test tests/helpers/array.spec.ts
15
+
16
+ # Run with debugger
17
+ yarn test:debug
18
+ ```
19
+
20
+ ## Testing Facade
21
+
22
+ `TestingFacade` wraps a Deepkit app for testing with database isolation and lifecycle hooks.
23
+
24
+ ```typescript
25
+ import { describe, it } from 'node:test';
26
+ import assert from 'node:assert/strict';
27
+ import { TestingHelpers, makeMockRequest } from '@zyno-io/dk-server-foundation';
28
+
29
+ // Pass app options (not an app instance) -- the facade creates the app for you
30
+ const tf = TestingHelpers.createTestingFacade(
31
+ {
32
+ db: MyDB,
33
+ controllers: [UserController],
34
+ providers: [UserService]
35
+ },
36
+ {
37
+ enableDatabase: true,
38
+ seedData: async facade => {
39
+ await loadEntityFixtures([fixtures.user1, fixtures.admin1]);
40
+ }
41
+ }
42
+ );
43
+
44
+ TestingHelpers.installStandardHooks(tf);
45
+
46
+ describe('UserController', () => {
47
+ it('should return user', async () => {
48
+ const res = await makeMockRequest(tf, 'GET', '/api/users/1', {});
49
+ assert.strictEqual(res.statusCode, 200);
50
+ });
51
+ });
52
+ ```
53
+
54
+ ### `createTestingFacade(appOptions, facadeOptions?)`
55
+
56
+ Creates a `TestingFacade` instance. The first argument is app options (same as `CreateAppOptions` but with `config` optional -- defaults to `BaseAppConfig`). The facade calls `createApp()` internally with `port: 0`.
57
+
58
+ ### `ITestingFacadeOptions`
59
+
60
+ | Option | Type | Default | Description |
61
+ | -------------------- | --------------------------- | ------------------------------ | --------------------------------------------------------------- |
62
+ | `enableDatabase` | `boolean` | `false` | Create an isolated test database |
63
+ | `enableMigrations` | `boolean` | `true` (when database enabled) | Run migrations after database creation. Set to `false` to skip. |
64
+ | `autoSeedData` | `boolean` | `false` | Run `seedData` automatically before each test |
65
+ | `databasePrefix` | `string` | `'test'` | Prefix for test database names |
66
+ | `onBeforeStart` | `(facade) => Promise<void>` | — | Hook before app starts |
67
+ | `onStart` | `(facade) => Promise<void>` | — | Hook after app starts |
68
+ | `onBeforeStop` | `(facade) => Promise<void>` | — | Hook before app stops |
69
+ | `onStop` | `(facade) => Promise<void>` | — | Hook after app stops |
70
+ | `seedData` | `(facade) => Promise<void>` | — | Seed test data |
71
+ | `defaultTestHeaders` | `Record<string, string>` | — | Default headers for mock requests |
72
+
73
+ ### Facade Methods
74
+
75
+ | Method | Description |
76
+ | ------------------- | ------------------------------------------ |
77
+ | `start()` | Start the app and create the test database |
78
+ | `stop()` | Stop the app and destroy the test database |
79
+ | `createDatabase()` | Create the isolated test database |
80
+ | `destroyDatabase()` | Drop the test database |
81
+ | `truncateTables()` | Truncate all tables |
82
+ | `runMigrations()` | Run pending migrations |
83
+ | `resetToSeed()` | Truncate tables and re-seed |
84
+
85
+ ### Database Isolation
86
+
87
+ Each test process gets its own database: `{prefix}_{timestamp}_{pid}_1`. Databases are created on `start()` and dropped on `stop()`.
88
+
89
+ Environment variables:
90
+
91
+ | Variable | Description |
92
+ | -------------- | --------------------------------- |
93
+ | `TEST_KEEP_DB` | Skip database destruction on stop |
94
+
95
+ ## Standard Hooks
96
+
97
+ `installStandardHooks(tf)` sets up test lifecycle hooks:
98
+
99
+ - `before` -- Start the facade
100
+ - `after` -- Stop the facade
101
+ - `beforeEach` -- Reset to seed data; install DB rejection hooks if database is disabled
102
+ - `afterEach` -- Reset timers, restore all mocks, clear SQL mocks
103
+
104
+ ## Entity Fixtures
105
+
106
+ Define reusable test data with automatic date handling:
107
+
108
+ ```typescript
109
+ import { TestingHelpers } from '@zyno-io/dk-server-foundation';
110
+
111
+ const { defineEntityFixtures, loadEntityFixtures } = TestingHelpers;
112
+
113
+ const fixtures = defineEntityFixtures(User, {
114
+ alice: {
115
+ id: 1,
116
+ name: 'Alice',
117
+ email: 'alice@example.com',
118
+ createdAt: '2024-01-01T00:00:00Z' // String dates auto-converted
119
+ },
120
+ bob: {
121
+ id: 2,
122
+ name: 'Bob',
123
+ email: 'bob@example.com',
124
+ createdAt: '2024-01-02T00:00:00Z'
125
+ }
126
+ });
127
+
128
+ // Load into database
129
+ await loadEntityFixtures([fixtures.alice, fixtures.bob]);
130
+ ```
131
+
132
+ ### `defineEntityFixtures(entityClass, data)`
133
+
134
+ - Date fields accept ISO strings (converted to `Date` on load)
135
+ - Fields with defaults (auto-increment, nullable, `HasDefault`) are optional
136
+ - Returns an object with the same keys, each containing prepared fixture data
137
+
138
+ ### `prepareEntityFixtures(entityClass, data)`
139
+
140
+ Lower-level function to prepare a single fixture record:
141
+
142
+ ```typescript
143
+ const prepared = TestingHelpers.prepareEntityFixtures(User, {
144
+ name: 'Charlie',
145
+ email: 'charlie@example.com'
146
+ });
147
+ ```
148
+
149
+ ## Mock HTTP Requests
150
+
151
+ ```typescript
152
+ import { makeMockRequest } from '@zyno-io/dk-server-foundation';
153
+
154
+ // Without custom headers
155
+ const res = await makeMockRequest(tf, 'GET', '/api/users', {});
156
+
157
+ // With custom headers
158
+ const res = await makeMockRequest(
159
+ tf,
160
+ 'POST',
161
+ '/api/users',
162
+ {
163
+ Authorization: 'Bearer token123',
164
+ 'Content-Type': 'application/json'
165
+ },
166
+ { name: 'Alice', email: 'alice@example.com' }
167
+ );
168
+
169
+ // Response
170
+ assert.strictEqual(res.statusCode, 200);
171
+ assert.deepStrictEqual(res.json, { id: 1, name: 'Alice' });
172
+ ```
173
+
174
+ Methods: `GET`, `PUT`, `POST`, `DELETE`.
175
+
176
+ Default headers from `options.defaultTestHeaders` are merged with per-request headers.
177
+
178
+ ## SQL Mocking
179
+
180
+ Mock database queries without a real database:
181
+
182
+ ```typescript
183
+ import { SqlTestingHelper } from '@zyno-io/dk-server-foundation';
184
+
185
+ const sql = new SqlTestingHelper();
186
+
187
+ // Mock entity data
188
+ sql.mockEntity(User, [
189
+ { id: 1, name: 'Alice' },
190
+ { id: 2, name: 'Bob' }
191
+ ]);
192
+
193
+ // Queries against User will return mocked data
194
+ const users = await db.query(User).find();
195
+ // [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
196
+
197
+ // Throws if no mock is set up
198
+ // "No mock data found for entity: User"
199
+
200
+ // Clear all mocks
201
+ sql.clearMocks();
202
+ ```
203
+
204
+ Uses Deepkit's `MemoryDatabaseAdapter` internally. Automatically cleared by `installStandardHooks`.
205
+
206
+ ## Configuration
207
+
208
+ For tests without a database, set `MYSQL_MIN_IDLE_CONNECTIONS=0` to avoid connection attempts.
209
+
210
+ ## Redis Cleanup
211
+
212
+ If your tests use Redis-backed features, call `disconnectAllRedis()` in your `after()` hook:
213
+
214
+ ```typescript
215
+ import { after } from 'node:test';
216
+ import { disconnectAllRedis } from '@zyno-io/dk-server-foundation';
217
+
218
+ after(async () => {
219
+ await tf.stop();
220
+ await disconnectAllRedis();
221
+ });
222
+ ```
@@ -0,0 +1,215 @@
1
+ # Types
2
+
3
+ Custom validated types that integrate with Deepkit's type system for automatic validation and transformation during deserialization.
4
+
5
+ ## Date Types
6
+
7
+ ### `DateString`
8
+
9
+ MySQL DATE column type. Stored as `YYYY-MM-DD` string, validated via regex pattern.
10
+
11
+ ```typescript
12
+ import { DateString } from '@zyno-io/dk-server-foundation';
13
+
14
+ class Event {
15
+ date!: DateString; // MySQL DATE column
16
+ }
17
+ ```
18
+
19
+ ### `ValidDate`
20
+
21
+ A `Date` that rejects `Invalid Date` values during validation.
22
+
23
+ ```typescript
24
+ import { ValidDate } from '@zyno-io/dk-server-foundation';
25
+
26
+ class Booking {
27
+ startDate!: ValidDate;
28
+ }
29
+ ```
30
+
31
+ ## String Types
32
+
33
+ ### `TrimmedString` / `NonEmptyTrimmedString`
34
+
35
+ Strings that are automatically trimmed during Deepkit deserialization.
36
+
37
+ ```typescript
38
+ import { TrimmedString, NonEmptyTrimmedString } from '@zyno-io/dk-server-foundation';
39
+
40
+ class UserInput {
41
+ name!: NonEmptyTrimmedString; // Trimmed + must be non-empty
42
+ notes!: TrimmedString; // Trimmed, can be empty
43
+ }
44
+ ```
45
+
46
+ ### `EmailAddress`
47
+
48
+ Regex-validated email address:
49
+
50
+ ```typescript
51
+ import { EmailAddress } from '@zyno-io/dk-server-foundation';
52
+
53
+ class User {
54
+ email!: EmailAddress; // Validated against /^[a-z0-9_+.-]+@[a-z0-9-.]+\.[a-z]+$/i
55
+ }
56
+ ```
57
+
58
+ ## Phone Types
59
+
60
+ Validated phone numbers using Google's libphonenumber library. Automatically cleaned and validated during Deepkit deserialization.
61
+
62
+ ### `PhoneNumber`
63
+
64
+ International E.164 format with `+` prefix:
65
+
66
+ ```typescript
67
+ import { PhoneNumber } from '@zyno-io/dk-server-foundation';
68
+
69
+ class Contact {
70
+ phone!: PhoneNumber; // e.g., '+15551234567'
71
+ }
72
+ ```
73
+
74
+ ### `PhoneNumberNANP`
75
+
76
+ North American Numbering Plan format (US/Canada) without the `+1` prefix:
77
+
78
+ ```typescript
79
+ import { PhoneNumberNANP } from '@zyno-io/dk-server-foundation';
80
+
81
+ class Contact {
82
+ phone!: PhoneNumberNANP; // e.g., '5551234567'
83
+ }
84
+ ```
85
+
86
+ ### Phone Utilities
87
+
88
+ ```typescript
89
+ import { cleanPhone, formatPhoneFriendly } from '@zyno-io/dk-server-foundation';
90
+
91
+ // Clean and validate (returns null if invalid)
92
+ cleanPhone('(555) 123-4567'); // '+15551234567'
93
+ cleanPhone('555-1234567', 'US'); // '+15551234567'
94
+ cleanPhone('invalid'); // null
95
+
96
+ // Format for display
97
+ formatPhoneFriendly('+15551234567'); // '(555) 123-4567'
98
+ formatPhoneFriendly('+15551234567', 'US'); // '(555) 123-4567'
99
+ ```
100
+
101
+ ## Database Types
102
+
103
+ ### `Coordinate`
104
+
105
+ MySQL POINT geometry type:
106
+
107
+ ```typescript
108
+ import { Coordinate, MySQLCoordinate, NullableMySQLCoordinate } from '@zyno-io/dk-server-foundation';
109
+
110
+ class Location {
111
+ coords!: MySQLCoordinate; // NOT NULL POINT column
112
+ altCoords!: NullableMySQLCoordinate; // NULLABLE POINT column
113
+ }
114
+
115
+ // Usage
116
+ const loc = new Location();
117
+ loc.coords = { x: -73.9857, y: 40.7484 }; // longitude, latitude
118
+ ```
119
+
120
+ ### `UuidString`
121
+
122
+ Type annotation for UUID string fields:
123
+
124
+ ```typescript
125
+ import { UuidString } from '@zyno-io/dk-server-foundation';
126
+
127
+ class Resource {
128
+ id!: UuidString;
129
+ }
130
+ ```
131
+
132
+ ### `Length<N>`
133
+
134
+ Fixed-length string validator:
135
+
136
+ ```typescript
137
+ import { Length } from '@zyno-io/dk-server-foundation';
138
+
139
+ class VerificationCode {
140
+ code!: Length<6>; // Must be exactly 6 characters
141
+ }
142
+ ```
143
+
144
+ ### `OnUpdate<T>`
145
+
146
+ MySQL `ON UPDATE` column expression annotation. Used by `migration:create` to generate and detect `ON UPDATE` clauses:
147
+
148
+ ```typescript
149
+ import { OnUpdate } from '@zyno-io/dk-server-foundation';
150
+
151
+ class User {
152
+ updatedAt!: Date & OnUpdate<'CURRENT_TIMESTAMP'>; // ON UPDATE CURRENT_TIMESTAMP
153
+ }
154
+ ```
155
+
156
+ This is MySQL-only. The annotation is ignored on PostgreSQL.
157
+
158
+ ### `HasDefault`
159
+
160
+ Mark fields with application-level defaults so they become optional in entity creation:
161
+
162
+ ```typescript
163
+ import { HasDefault } from '@zyno-io/dk-server-foundation';
164
+
165
+ class User {
166
+ role!: string & HasDefault; // Optional in createEntity/createPersistedEntity
167
+ }
168
+ ```
169
+
170
+ ## Utility Types
171
+
172
+ ### Primitives
173
+
174
+ ```typescript
175
+ type ConcretePrimitive = string | number | boolean;
176
+ type DefinedPrimitive = ConcretePrimitive | null;
177
+ type Primitive = DefinedPrimitive | undefined;
178
+ type StrictBool = true | false;
179
+ ```
180
+
181
+ ### Object Types
182
+
183
+ ```typescript
184
+ type KVObject<T = any> = Record<string, T>;
185
+ type NestedKVObject<T = any> = KVObject<T | T[] | KVObject<T>>;
186
+ type Serializable<T = ConcretePrimitive> = T | T[] | NestedKVObject<T> | NestedKVObject<T>[];
187
+ ```
188
+
189
+ ### Field Manipulation
190
+
191
+ ```typescript
192
+ // Make specific fields required
193
+ type RequireFields<T, K extends keyof T> = T & { [P in K]-?: T[P] };
194
+
195
+ // Get keys where values match a type
196
+ type ObjectKeysMatching<O, V> = { [K in keyof O]: O[K] extends V ? K : never }[keyof O];
197
+ ```
198
+
199
+ ### Function Types
200
+
201
+ ```typescript
202
+ type ArrowFunction = (...args: any) => any;
203
+ type ArrowFunctionNoArgs = () => any;
204
+ type VoidFunction = () => void;
205
+ ```
206
+
207
+ ### Method Extraction
208
+
209
+ ```typescript
210
+ // Get only the method keys of a type
211
+ type MethodKeys<T> = keyof MethodsOf<T>;
212
+
213
+ // Get an object with only the methods
214
+ type MethodsOf<T> = { [K in keyof T as IsFunction<T[K]> extends never ? never : K]: T[K] };
215
+ ```