@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,167 @@
1
+ import { asyncOperation } from '@deepkit/core';
2
+ import { eventDispatcher } from '@deepkit/event';
3
+ import { HttpBadRequestError, HttpError, HttpRequest, HttpRouter, httpWorkflow, JSONResponse } from '@deepkit/http';
4
+ import { LoggerInterface } from '@deepkit/logger';
5
+ import { ValidationError } from '@deepkit/type';
6
+
7
+ import { DecoratedError } from '../helpers';
8
+ import { setSpanAttributes } from '../telemetry/otel/helpers';
9
+
10
+ export class HttpWorkflowListenerOptions {
11
+ logRequestBodyOnError: boolean = process.env.NODE_ENV !== 'production';
12
+ }
13
+
14
+ export class HttpWorkflowListener {
15
+ constructor(
16
+ protected router: HttpRouter,
17
+ protected logger: LoggerInterface,
18
+ protected options: HttpWorkflowListenerOptions
19
+ ) {}
20
+
21
+ // this is a copy of the default onRoute, with the timeouts removed, because
22
+ // we sometimes use middleware to easily express various security requirements, and allowing a timeout
23
+ // during a time of delayed response due to any number of factors (such as DB load) is a security risk
24
+ // having a priority of 99 and dispatching a "next" ensures the default handler doesn't do anything
25
+ @eventDispatcher.listen(httpWorkflow.onRoute, 99)
26
+ async onRouteOverride(event: typeof httpWorkflow.onRoute.event) {
27
+ if (event.sent) return;
28
+ if (event.hasNext()) return;
29
+
30
+ try {
31
+ const resolved = this.router.resolveRequest(event.request);
32
+ if (resolved) {
33
+ event.request.uploadedFiles = resolved.uploadedFiles;
34
+
35
+ if (resolved.middlewares) {
36
+ const middlewares = resolved.middlewares(event.injectorContext);
37
+ if (middlewares.length) {
38
+ await asyncOperation(async (resolve, reject) => {
39
+ function finish() {
40
+ resolve(undefined);
41
+ }
42
+
43
+ event.response.once('finish', finish);
44
+ let i = -1;
45
+
46
+ async function next() {
47
+ i++;
48
+ if (i >= middlewares.length) {
49
+ event.response.off('finish', finish);
50
+ resolve(undefined);
51
+ return;
52
+ }
53
+
54
+ try {
55
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
+ await middlewares[i].fn(event.request, event.response, (error?: any) => {
57
+ if (error) {
58
+ event.response.off('finish', finish);
59
+ reject(error);
60
+ } else {
61
+ next();
62
+ }
63
+ });
64
+ } catch (error) {
65
+ reject(error);
66
+ }
67
+ }
68
+
69
+ await next();
70
+ });
71
+ }
72
+ }
73
+
74
+ event.routeFound(resolved.routeConfig, resolved.parameters);
75
+ }
76
+ } catch (error) {
77
+ this.logger.error('Could not resolve request', error);
78
+ event.notFound();
79
+ }
80
+ }
81
+
82
+ // the default behavior for parameter resolver and controllers encountering HttpError
83
+ // is to return a JSONResponse with the error message in the "message" field. we want to use
84
+ // the "error" field, so override them both here
85
+ @eventDispatcher.listen(httpWorkflow.onParametersFailed)
86
+ onParametersFailed(event: typeof httpWorkflow.onParametersFailed.event) {
87
+ if (event.error instanceof ValidationError) {
88
+ this.logger.warn('Request parameters error', {
89
+ type: 'validation',
90
+ err: event.error.message,
91
+ requestBody: this.getRequestBodyForErrorLogging(event.request)
92
+ });
93
+
94
+ // JSON parse errors should be treated as 400s
95
+ } else if (event.error instanceof SyntaxError && event.error.message.includes('JSON')) {
96
+ this.logger.warn('Request parameters error ', { type: 'json', requestBody: this.getRequestBodyForErrorLogging(event.request) });
97
+ event.error = new HttpBadRequestError('Failed to parse JSON');
98
+
99
+ // all other errors should include the request body as error context
100
+ } else if (!(event.error instanceof HttpError)) {
101
+ this.decorateErrorWithRequest(event.error, event.request);
102
+ }
103
+
104
+ return this.handleHttpErrorFromEvent(event);
105
+ }
106
+
107
+ @eventDispatcher.listen(httpWorkflow.onControllerError)
108
+ onControllerError(event: typeof httpWorkflow.onControllerError.event) {
109
+ // ValidationErrors should only render as HTTP 400 when it's in the query or body, which is handled by
110
+ // parameters processing. validation errors within the controller body are internal errors and should be treated
111
+ // as 500s
112
+ if (event.error instanceof ValidationError) {
113
+ const originalError = event.error;
114
+ event.error = new Error('Validation failure within controller');
115
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
+ (event.error as any).cause = originalError;
117
+ }
118
+
119
+ if (event.sent && event.response.statusCode < 400) {
120
+ if (event.response.chunkedEncoding) {
121
+ event.response.write('\n\nINTERNAL SERVER ERROR\n\n', () => {
122
+ event.response.destroy();
123
+ });
124
+ } else {
125
+ // not safe to write more data if we're not using chunked encoding
126
+ event.response.destroy();
127
+ }
128
+ this.logger.error('Controller error after response sent', event.error);
129
+ return;
130
+ }
131
+
132
+ this.handleHttpErrorFromEvent(event);
133
+
134
+ if (!event.sent) {
135
+ this.decorateErrorWithRequest(event.error, event.request);
136
+ }
137
+ }
138
+
139
+ private handleHttpErrorFromEvent(event: typeof httpWorkflow.onParametersFailed.event | typeof httpWorkflow.onControllerError.event) {
140
+ if (event.error instanceof HttpError) {
141
+ setSpanAttributes({ 'error.message': event.error.message });
142
+ this.logger.warn('Request processing error', { 'error.message': event.error.message });
143
+ event.stopImmediatePropagation();
144
+ event.send(
145
+ new JSONResponse(
146
+ {
147
+ error: event.error.message
148
+ },
149
+ event.error.httpCode
150
+ ).disableAutoSerializing()
151
+ );
152
+ }
153
+ }
154
+
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ private decorateErrorWithRequest(error: any, request: HttpRequest) {
157
+ (error as DecoratedError).context = {
158
+ ...(error as DecoratedError).context,
159
+ requestBody: this.getRequestBodyForErrorLogging(request)
160
+ };
161
+ }
162
+
163
+ private getRequestBodyForErrorLogging(request: HttpRequest) {
164
+ if (!this.options.logRequestBodyOnError) return undefined;
165
+ return request.body?.toString().slice(0, 4096);
166
+ }
167
+ }
package/src/index.ts ADDED
@@ -0,0 +1,19 @@
1
+ // servers should *always* use UTC
2
+ process.env.TZ = 'UTC';
3
+ const testDate = new Date();
4
+ if (testDate.getTimezoneOffset() !== 0) {
5
+ throw new Error('Please restart the process with the TZ environment variable set to UTC');
6
+ }
7
+
8
+ export * from './app';
9
+ export { isDevelopment, isTest } from './app/const';
10
+ export * from './auth';
11
+ export * from './database';
12
+ export * from './health';
13
+ export * from './helpers';
14
+ export * from './http';
15
+ export * from './services';
16
+ export * from './srpc';
17
+ export * from './telemetry';
18
+ export * from './testing';
19
+ export * from './types';
@@ -0,0 +1,39 @@
1
+ import { cli } from '@deepkit/app';
2
+ import { InjectorError } from '@deepkit/injector';
3
+ import { DatabaseRegistry } from '@deepkit/orm';
4
+ import { ReflectionClass } from '@deepkit/type';
5
+
6
+ import { getAppModule, getOrCreateInjectorForModule, r } from '../../app/resolver';
7
+ import { getProviderTree } from '../../helpers/framework/injection';
8
+
9
+ @cli.controller('provider:invoke', {
10
+ description: 'Invoke a function in any registered provider'
11
+ })
12
+ export class ProviderInvokeCommand {
13
+ constructor() {}
14
+
15
+ async execute(providerName: string, methodName: string, argsJson?: string) {
16
+ const providers = getProviderTree(getAppModule());
17
+ const provider = providers.find(p => p.name === providerName);
18
+
19
+ if (!provider) {
20
+ throw new InjectorError(`Provider ${providerName} not found.`);
21
+ }
22
+
23
+ const resolved = getOrCreateInjectorForModule(provider.module).get(provider.provide);
24
+ const resolvedType = ReflectionClass.from(resolved);
25
+ if (!resolvedType.hasMethod(methodName)) {
26
+ throw new InjectorError(`Provider ${providerName} does not have method ${methodName}.`);
27
+ }
28
+
29
+ const args = argsJson ? JSON.parse(argsJson) : [];
30
+
31
+ // DK lazily starts the database registry, but we don't have any calls that
32
+ // would cause that. without the registry, the application shutdown hook to
33
+ // disconect from the database is never executed. thus, we'll invoke this manually.
34
+ r(DatabaseRegistry).init();
35
+
36
+ // eslint-disable-next-line prefer-spread, @typescript-eslint/no-explicit-any
37
+ return resolved[methodName].apply(resolved, args as any);
38
+ }
39
+ }
@@ -0,0 +1,63 @@
1
+ import { DatabaseRegistry } from '@deepkit/orm';
2
+
3
+ import { getAppModule, getOrCreateInjectorForModule, r } from '../../app/resolver';
4
+ import { getProviderTree } from '../../helpers/framework/injection';
5
+
6
+ export interface ReplContext {
7
+ /** Class providers (access via $.ClassName) */
8
+ classProvider: Record<string, unknown>;
9
+ /** Instance providers (access via $$.InstanceName) — lazily resolved from DI */
10
+ instanceProvider: Record<string, unknown>;
11
+ }
12
+
13
+ /**
14
+ * Build the REPL context with `$` (class providers) and `$$` (instance providers + entity classes).
15
+ * Also sets `global.$` and `global.$$` for use in eval contexts.
16
+ */
17
+ export function buildReplContext(): ReplContext {
18
+ const databaseRegistry = r(DatabaseRegistry);
19
+ databaseRegistry.init();
20
+
21
+ const providers = getProviderTree(getAppModule());
22
+
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ const classProvider: any = {};
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ const instanceProvider: any = {};
27
+
28
+ for (const provider of providers) {
29
+ if (!(provider.name in classProvider)) {
30
+ Object.defineProperty(classProvider, provider.name, {
31
+ get() {
32
+ return provider.provide;
33
+ }
34
+ });
35
+ }
36
+
37
+ if (!(provider.name in instanceProvider)) {
38
+ Object.defineProperty(instanceProvider, provider.name, {
39
+ get() {
40
+ const injector = getOrCreateInjectorForModule(provider.module);
41
+ return injector.get(provider.provide);
42
+ }
43
+ });
44
+ }
45
+ }
46
+
47
+ for (const database of databaseRegistry.getDatabases()) {
48
+ for (const entity of database.entityRegistry.all()) {
49
+ Object.defineProperty(instanceProvider, entity.type.typeName!, {
50
+ get() {
51
+ return entity.getClassType();
52
+ }
53
+ });
54
+ }
55
+ }
56
+
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ (global as any).$ = classProvider;
59
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+ (global as any).$$ = instanceProvider;
61
+
62
+ return { classProvider, instanceProvider };
63
+ }
@@ -0,0 +1,22 @@
1
+ import { cli } from '@deepkit/app';
2
+ import * as repl from 'repl';
3
+
4
+ import { buildReplContext } from './repl-context';
5
+
6
+ @cli.controller('repl', {
7
+ description: 'Start a REPL'
8
+ })
9
+ export class ReplCommand {
10
+ constructor() {}
11
+
12
+ async execute() {
13
+ buildReplContext();
14
+
15
+ return new Promise<void>(resolve => {
16
+ const replServer = repl.start();
17
+ replServer.on('exit', () => {
18
+ resolve();
19
+ });
20
+ });
21
+ }
22
+ }
@@ -0,0 +1,74 @@
1
+ import { EventDispatcher } from '@deepkit/event';
2
+ import { ApplicationServer, onServerMainBootstrapDone, onServerShutdown } from '@deepkit/framework';
3
+ import { HttpRouterRegistry } from '@deepkit/http';
4
+
5
+ import { r } from '../app/resolver';
6
+ import { globalState } from '../app/state';
7
+ import { HealthcheckController } from '../health/healthcheck.controller';
8
+ import { MetricsController } from '../telemetry/otel/metrics.controller';
9
+
10
+ export abstract class CliServiceCommand {
11
+ private eventDispatcher = r(EventDispatcher);
12
+ private appServer = r(ApplicationServer);
13
+ private routerRegistry = r(HttpRouterRegistry);
14
+ protected shouldRun = true;
15
+ public stop: () => void = () => {};
16
+
17
+ async execute() {
18
+ // note that we're a CLI service to prevent non-CLI side effects
19
+ globalState.isCliService = true;
20
+
21
+ // disable workers
22
+ this.appServer.config.workers = 0;
23
+
24
+ // remove all controllers except health-related ones
25
+ const routes = this.routerRegistry.getRoutes();
26
+ for (let i = 0; i < routes.length; i++) {
27
+ const route = routes[i];
28
+ if (route.action.type === 'controller') {
29
+ if (route.action.controller === HealthcheckController || route.action.controller === MetricsController) {
30
+ continue;
31
+ }
32
+ }
33
+ routes.splice(i, 1);
34
+ i--;
35
+ }
36
+
37
+ // start the application server. tell it to wait for signals, but don't want for it to return,
38
+ // as when listening to stop signals, it won't return until the server shuts down. instead, we
39
+ // can listen to the onServerMainBootstrapDone event to actually wait for the server to start
40
+ const onServerMainBootstrapDonePromise = new Promise<void>(resolve => {
41
+ this.eventDispatcher.listen(onServerMainBootstrapDone, () => resolve());
42
+ });
43
+ this.appServer.start(true);
44
+ await onServerMainBootstrapDonePromise;
45
+
46
+ // prepare stop
47
+ const hasRunService = this.runService !== CliServiceCommand.prototype.runService;
48
+ const stopPromise = new Promise<void>(resolve => {
49
+ const handleStop = () => {
50
+ this.shouldRun = false;
51
+ resolve();
52
+ };
53
+ this.eventDispatcher.listen(onServerShutdown, handleStop);
54
+ this.stop = handleStop;
55
+ });
56
+
57
+ // start our CLI service
58
+ await this.startService();
59
+
60
+ // wait for stop signal
61
+ if (hasRunService) {
62
+ await this.runService();
63
+ } else {
64
+ await stopPromise;
65
+ }
66
+
67
+ // process shutdown
68
+ await this.shutdownService();
69
+ }
70
+
71
+ protected async startService(): Promise<void> {}
72
+ protected async runService(): Promise<void> {}
73
+ protected async shutdownService(): Promise<void> {}
74
+ }
@@ -0,0 +1,6 @@
1
+ export * from './cli';
2
+ export * from './leader';
3
+ export * from './logger';
4
+ export * from './mail';
5
+ export * from './mesh';
6
+ export * from './worker';
@@ -0,0 +1,201 @@
1
+ import { uuid } from '@deepkit/type';
2
+ import { memoize } from 'lodash';
3
+
4
+ import { getAppConfig } from '../app/resolver';
5
+ import { getPackageName } from '../helpers/io/package';
6
+ import { createRedis } from '../helpers/redis/redis';
7
+ import { createLogger } from './logger';
8
+
9
+ const ACQUIRE_SCRIPT = `
10
+ if redis.call("exists", KEYS[1]) == 1 then
11
+ return 0
12
+ end
13
+ redis.call("set", KEYS[1], ARGV[1], "px", ARGV[2])
14
+ return 1
15
+ `;
16
+
17
+ const RENEW_SCRIPT = `
18
+ if redis.call("get", KEYS[1]) ~= ARGV[1] then
19
+ return 0
20
+ end
21
+ redis.call("pexpire", KEYS[1], ARGV[2])
22
+ return 1
23
+ `;
24
+
25
+ const RELEASE_SCRIPT = `
26
+ if redis.call("get", KEYS[1]) ~= ARGV[1] then
27
+ return 0
28
+ end
29
+ redis.call("del", KEYS[1])
30
+ return 1
31
+ `;
32
+
33
+ type LeaderRedisClient = ReturnType<typeof createRedis>['client'] & {
34
+ ACQUIRE: (key: string, value: string, ttl: number) => Promise<number>;
35
+ RENEW: (key: string, value: string, ttl: number) => Promise<number>;
36
+ RELEASE: (key: string, value: string) => Promise<number>;
37
+ };
38
+
39
+ const getRedisClient = memoize((): LeaderRedisClient => {
40
+ const { client } = createRedis('MUTEX');
41
+ client.defineCommand('ACQUIRE', { lua: ACQUIRE_SCRIPT, numberOfKeys: 1 });
42
+ client.defineCommand('RENEW', { lua: RENEW_SCRIPT, numberOfKeys: 1 });
43
+ client.defineCommand('RELEASE', { lua: RELEASE_SCRIPT, numberOfKeys: 1 });
44
+ return client as LeaderRedisClient;
45
+ });
46
+
47
+ type LeaderCallback = () => void | Promise<void>;
48
+
49
+ export interface LeaderServiceOptions {
50
+ ttlMs?: number;
51
+ renewalIntervalMs?: number;
52
+ retryDelayMs?: number;
53
+ }
54
+
55
+ export class LeaderService {
56
+ private lockId = uuid();
57
+ private key: string;
58
+ private _isLeader = false;
59
+ private running = false;
60
+ private renewTimer: ReturnType<typeof setInterval> | null = null;
61
+ private retryTimer: ReturnType<typeof setTimeout> | null = null;
62
+
63
+ private becameLeaderCallback: LeaderCallback | null = null;
64
+ private lostLeaderCallback: LeaderCallback | null = null;
65
+
66
+ private ttlMs: number;
67
+ private renewalIntervalMs: number;
68
+ private retryDelayMs: number;
69
+
70
+ private logger = createLogger(this);
71
+
72
+ constructor(key: string, options?: LeaderServiceOptions) {
73
+ const config = getAppConfig();
74
+ const prefix = config.MUTEX_REDIS_PREFIX ?? config.REDIS_PREFIX ?? getPackageName() ?? 'app';
75
+ this.key = `${prefix}:leader:${key}`;
76
+ this.ttlMs = options?.ttlMs ?? 30000;
77
+ this.renewalIntervalMs = options?.renewalIntervalMs ?? 10000;
78
+ this.retryDelayMs = options?.retryDelayMs ?? 5000;
79
+ }
80
+
81
+ get isLeader(): boolean {
82
+ return this._isLeader;
83
+ }
84
+
85
+ setBecameLeaderCallback(callback: LeaderCallback): void {
86
+ this.becameLeaderCallback = callback;
87
+ }
88
+
89
+ setLostLeaderCallback(callback: LeaderCallback): void {
90
+ this.lostLeaderCallback = callback;
91
+ }
92
+
93
+ start(): void {
94
+ if (this.running) {
95
+ throw new Error('LeaderService is already running');
96
+ }
97
+
98
+ this.running = true;
99
+ this.logger.info('starting leader election', { key: this.key });
100
+ this.tryAcquire();
101
+ }
102
+
103
+ async stop(): Promise<void> {
104
+ this.running = false;
105
+
106
+ if (this.renewTimer) {
107
+ clearInterval(this.renewTimer);
108
+ this.renewTimer = null;
109
+ }
110
+
111
+ if (this.retryTimer) {
112
+ clearTimeout(this.retryTimer);
113
+ this.retryTimer = null;
114
+ }
115
+
116
+ if (this._isLeader) {
117
+ try {
118
+ await getRedisClient().RELEASE(this.key, this.lockId);
119
+ } catch (err) {
120
+ this.logger.warn('failed to release leader lock during stop', { err });
121
+ }
122
+ this._isLeader = false;
123
+ }
124
+ }
125
+
126
+ private async tryAcquire(): Promise<void> {
127
+ if (!this.running) return;
128
+
129
+ try {
130
+ const result = await getRedisClient().ACQUIRE(this.key, this.lockId, this.ttlMs);
131
+
132
+ if (result === 1) {
133
+ // If stop() was called while ACQUIRE was in-flight, release immediately
134
+ if (!this.running) {
135
+ try {
136
+ await getRedisClient().RELEASE(this.key, this.lockId);
137
+ } catch {
138
+ // ignore — lock will expire via TTL
139
+ }
140
+ return;
141
+ }
142
+
143
+ this._isLeader = true;
144
+ this.logger.info('became leader', { key: this.key });
145
+ this.startRenewal();
146
+ try {
147
+ await this.becameLeaderCallback?.();
148
+ } catch (err) {
149
+ this.logger.warn('becameLeader callback error', { err });
150
+ }
151
+ return;
152
+ }
153
+ } catch (err) {
154
+ this.logger.warn('error during leader acquisition', { err });
155
+ }
156
+
157
+ if (this.running) {
158
+ this.retryTimer = setTimeout(() => this.tryAcquire(), this.retryDelayMs);
159
+ }
160
+ }
161
+
162
+ private startRenewal(): void {
163
+ this.renewTimer = setInterval(async () => {
164
+ if (!this.running) return;
165
+
166
+ try {
167
+ const result = await getRedisClient().RENEW(this.key, this.lockId, this.ttlMs);
168
+ if (result === 0) {
169
+ this.handleLostLeadership();
170
+ }
171
+ } catch (err) {
172
+ this.logger.warn('error during leader renewal', { err });
173
+ this.handleLostLeadership();
174
+ }
175
+ }, this.renewalIntervalMs);
176
+ }
177
+
178
+ private handleLostLeadership(): void {
179
+ if (!this._isLeader) return;
180
+
181
+ this._isLeader = false;
182
+ this.logger.info('lost leadership', { key: this.key });
183
+
184
+ if (this.renewTimer) {
185
+ clearInterval(this.renewTimer);
186
+ this.renewTimer = null;
187
+ }
188
+
189
+ Promise.resolve()
190
+ .then(() => this.lostLeaderCallback?.())
191
+ .catch(err => {
192
+ this.logger.warn('lostLeader callback error', { err });
193
+ });
194
+
195
+ this.lockId = uuid();
196
+
197
+ if (this.running) {
198
+ this.retryTimer = setTimeout(() => this.tryAcquire(), this.retryDelayMs);
199
+ }
200
+ }
201
+ }