@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,146 @@
1
+ import type { BinaryReader, BinaryWriter } from '@bufbuild/protobuf/wire';
2
+ import type { ClassType } from '@deepkit/core';
3
+ import { ScopedLogger } from '@deepkit/logger';
4
+ import WebSocket from 'ws';
5
+
6
+ import type { IByteStreamable } from './SrpcByteStream';
7
+
8
+ export type RequestKeys<T> = {
9
+ [K in keyof T]: K extends `${infer _X}Request` ? K : never;
10
+ }[keyof T];
11
+
12
+ export type ResponseKeys<T> = {
13
+ [K in keyof T]: K extends `${infer _X}Response` ? K : never;
14
+ }[keyof T];
15
+
16
+ /**
17
+ * Extract prefix from Request keys (e.g., 'uEcho' from 'uEchoRequest')
18
+ */
19
+ export type RequestPrefix<K> = K extends `${infer P}Request` ? P : never;
20
+
21
+ /**
22
+ * Extract prefix from Response keys (e.g., 'uEcho' from 'uEchoResponse')
23
+ */
24
+ export type ResponsePrefix<K> = K extends `${infer P}Response` ? P : never;
25
+
26
+ /**
27
+ * Get all valid invoke prefixes where TReq has `${P}Request` and TRes has `${P}Response`.
28
+ * Excludes string index signatures to prevent overly permissive typing.
29
+ */
30
+ export type InvokePrefixes<TReq, TRes> = {
31
+ [K in keyof TReq]: K extends string ? (K extends `${infer P}Request` ? (`${P}Response` extends keyof TRes ? P : never) : never) : never;
32
+ }[keyof TReq];
33
+
34
+ /**
35
+ * Get the request data type for a given prefix (for sending requests).
36
+ */
37
+ export type RequestData<TReq, P extends string> = `${P}Request` extends keyof TReq ? NonNullable<TReq[`${P}Request`]> : never;
38
+
39
+ /**
40
+ * Get the response data type for a given prefix.
41
+ */
42
+ export type ResponseData<TRes, P extends string> = `${P}Response` extends keyof TRes ? NonNullable<TRes[`${P}Response`]> : never;
43
+
44
+ /**
45
+ * Get the request data type for a handler (for receiving requests).
46
+ */
47
+ export type HandlerRequestData<TReq, P extends string> = `${P}Request` extends keyof TReq ? NonNullable<TReq[`${P}Request`]> : never;
48
+
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ export type SrpcMeta = Record<string, any>;
51
+
52
+ export interface BaseMessage {
53
+ // requestId and reply are optional for framework messages (pingPong, byteStreamOperation)
54
+ // but required for actual request/response messages
55
+ requestId?: string;
56
+ reply?: boolean;
57
+ error?: string;
58
+ userError?: boolean;
59
+ trace?: {
60
+ traceId: string;
61
+ spanId: string;
62
+ traceFlags: number;
63
+ };
64
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
65
+ pingPong?: {};
66
+ byteStreamOperation?: {
67
+ streamId: number;
68
+ write?: { chunk: Uint8Array };
69
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
70
+ finish?: {};
71
+ destroy?: { error?: string };
72
+ };
73
+ }
74
+
75
+ /**
76
+ * Interface for ts-proto generated message types with encode/decode functions.
77
+ * This matches the MessageFns interface generated by ts-proto.
78
+ */
79
+ export interface SrpcMessageFns<T> {
80
+ encode(message: T, writer?: BinaryWriter): BinaryWriter;
81
+ decode(input: BinaryReader | Uint8Array, length?: number): T;
82
+ }
83
+
84
+ export type SrpcDisconnectCause = 'disconnect' | 'duplicate' | 'timeout' | 'badArg';
85
+
86
+ export interface IQueuedRequest {
87
+ exp: number;
88
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
+ resolve: (value: any) => void;
90
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
91
+ reject: (err: any) => void;
92
+ }
93
+
94
+ export class SrpcError extends Error {
95
+ constructor(
96
+ public message: string,
97
+ public isUserError?: boolean
98
+ ) {
99
+ super(message);
100
+ }
101
+ }
102
+
103
+ ////////////////////////////////////////
104
+ // SERVER
105
+
106
+ export interface ISrpcServerOptions<TClientOutput extends BaseMessage, TServerOutput extends BaseMessage> {
107
+ logger: ScopedLogger;
108
+ /** ts-proto generated ClientMessage type with encode/decode */
109
+ clientMessage: SrpcMessageFns<TClientOutput>;
110
+ /** ts-proto generated ServerMessage type with encode/decode */
111
+ serverMessage: SrpcMessageFns<TServerOutput>;
112
+ wsPath: string;
113
+ debug?: boolean;
114
+ /** Controls SRPC log output. 'info' (default) logs normally, 'debug' downgrades to debug level, false suppresses all logs. */
115
+ logLevel?: 'info' | 'debug' | false;
116
+ }
117
+
118
+ export interface SrpcStream<T = SrpcMeta> extends IByteStreamable {
119
+ $ws: WebSocket;
120
+ $queue: Map<string, IQueuedRequest>;
121
+ readonly id: string;
122
+ readonly clientStreamId: string;
123
+ readonly address: string;
124
+ readonly clientId: string;
125
+ readonly appVersion: string;
126
+ readonly configureTs: number;
127
+ readonly meta: T;
128
+ readonly connectedAt: number;
129
+ lastPingAt: number;
130
+ }
131
+
132
+ export type SrpcMessageHandlerFn<C, I, O> = (wrappedStream: C, data: I) => Promise<O>;
133
+ export interface ISrpcMessageHandler<C, I, O> {
134
+ handle: SrpcMessageHandlerFn<C, I, O>;
135
+ }
136
+ export type TSrpcMessageHandlerClass<C, I, O> = ClassType<ISrpcMessageHandler<C, I, O>>;
137
+ export type TSrpcMessageHandlerFnOrClass<C, I, O> = SrpcMessageHandlerFn<C, I, O> | TSrpcMessageHandlerClass<C, I, O>;
138
+ export const isSrpcMessageHandlerClass = <C, I, O>(handler: TSrpcMessageHandlerFnOrClass<C, I, O>): handler is TSrpcMessageHandlerClass<C, I, O> => {
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ return typeof handler === 'function' && typeof (handler as any).prototype?.handle === 'function';
141
+ };
142
+
143
+ ////////////////////////////////////////
144
+ // CLIENT
145
+
146
+ // todo
@@ -0,0 +1 @@
1
+ export * from './otel/helpers';
@@ -0,0 +1,297 @@
1
+ // https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-mysql/src/instrumentation.ts
2
+
3
+ /*
4
+ * Copyright The OpenTelemetry Authors
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * https://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ import { Attributes, MeterProvider, UpDownCounter } from '@opentelemetry/api';
20
+ import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
21
+ import { AttributeNames } from '@opentelemetry/instrumentation-mysql/build/src/AttributeNames';
22
+ import { MySQLInstrumentationConfig } from '@opentelemetry/instrumentation-mysql/build/src/types';
23
+ import { getDbQueryText, getDbValues, getSpanName } from '@opentelemetry/instrumentation-mysql/build/src/utils';
24
+ import { ATTR_DB_QUERY_TEXT, ATTR_DB_SYSTEM_NAME, DB_SYSTEM_NAME_VALUE_MARIADB } from '@opentelemetry/semantic-conventions';
25
+ import type * as mariadbTypes from 'mariadb';
26
+
27
+ import { withSpan } from './helpers';
28
+
29
+ export class MariaDBInstrumentation extends InstrumentationBase {
30
+ static readonly COMMON_ATTRIBUTES = {
31
+ [ATTR_DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_MARIADB
32
+ };
33
+ private _connectionsUsage!: UpDownCounter;
34
+
35
+ constructor(config?: MySQLInstrumentationConfig) {
36
+ super('@opentelemetry/instrumentation-mariadb', '0.0.1', config ?? {});
37
+ this._setMetricInstruments();
38
+ }
39
+
40
+ override setMeterProvider(meterProvider: MeterProvider) {
41
+ super.setMeterProvider(meterProvider);
42
+ this._setMetricInstruments();
43
+ }
44
+
45
+ private _setMetricInstruments() {
46
+ this._connectionsUsage = this.meter.createUpDownCounter(
47
+ 'db.client.connections.usage', //TODO:: use semantic convention
48
+ {
49
+ description: 'The number of connections that are currently in state described by the state attribute.',
50
+ unit: '{connection}'
51
+ }
52
+ );
53
+ }
54
+
55
+ protected init() {
56
+ return [
57
+ new InstrumentationNodeModuleDefinition(
58
+ 'mariadb',
59
+ ['3.*'],
60
+ moduleExports => {
61
+ if (isWrapped(moduleExports.createConnection)) {
62
+ this._unwrap(moduleExports, 'createConnection');
63
+ }
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
+ this._wrap(moduleExports, 'createConnection', this._patchCreateConnection() as any);
66
+
67
+ if (isWrapped(moduleExports.createPool)) {
68
+ this._unwrap(moduleExports, 'createPool');
69
+ }
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ this._wrap(moduleExports, 'createPool', this._patchCreatePool() as any);
72
+
73
+ if (isWrapped(moduleExports.createPoolCluster)) {
74
+ this._unwrap(moduleExports, 'createPoolCluster');
75
+ }
76
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+ this._wrap(moduleExports, 'createPoolCluster', this._patchCreatePoolCluster() as any);
78
+
79
+ return moduleExports;
80
+ },
81
+ moduleExports => {
82
+ if (moduleExports === undefined) return;
83
+ this._unwrap(moduleExports, 'createConnection');
84
+ this._unwrap(moduleExports, 'createPool');
85
+ this._unwrap(moduleExports, 'createPoolCluster');
86
+ }
87
+ )
88
+ ];
89
+ }
90
+
91
+ // global export function
92
+ private _patchCreateConnection() {
93
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
94
+ return (originalCreateConnection: Function) => {
95
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
96
+ const thisPlugin = this;
97
+
98
+ return function createConnection(_connectionUri: string | mariadbTypes.ConnectionConfig) {
99
+ // eslint-disable-next-line prefer-rest-params
100
+ const originalResult = originalCreateConnection(...arguments);
101
+
102
+ // This is unwrapped on next call after unpatch
103
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+ thisPlugin._wrap(originalResult, 'query', thisPlugin._patchQuery(originalResult) as any);
105
+
106
+ return originalResult;
107
+ };
108
+ };
109
+ }
110
+
111
+ // global export function
112
+ private _patchCreatePool() {
113
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
114
+ return (originalCreatePool: Function) => {
115
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
116
+ const thisPlugin = this;
117
+ return function createPool(_config: string | mariadbTypes.PoolConfig) {
118
+ // eslint-disable-next-line prefer-rest-params
119
+ const pool = originalCreatePool(...arguments);
120
+
121
+ thisPlugin._wrap(pool, 'query', thisPlugin._patchQuery(pool));
122
+ thisPlugin._wrap(pool, 'getConnection', thisPlugin._patchGetConnection(pool));
123
+ thisPlugin._wrap(pool, 'end', thisPlugin._patchPoolEnd(pool));
124
+ thisPlugin._setPoolcallbacks(pool, thisPlugin, '');
125
+
126
+ return pool;
127
+ };
128
+ };
129
+ }
130
+ private _patchPoolEnd(pool: mariadbTypes.Pool) {
131
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
132
+ return (originalPoolEnd: Function) => {
133
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
134
+ const thisPlugin = this;
135
+ return function end(_callback?: unknown) {
136
+ const nAll = pool.totalConnections();
137
+ const nFree = pool.idleConnections();
138
+ const nUsed = nAll - nFree;
139
+ const poolName = 'unk'; // todo
140
+ thisPlugin._connectionsUsage.add(-nUsed, {
141
+ state: 'used',
142
+ name: poolName
143
+ });
144
+ thisPlugin._connectionsUsage.add(-nFree, {
145
+ state: 'idle',
146
+ name: poolName
147
+ });
148
+ // eslint-disable-next-line prefer-rest-params
149
+ return originalPoolEnd.apply(pool, arguments);
150
+ };
151
+ };
152
+ }
153
+
154
+ // global export function
155
+ private _patchCreatePoolCluster() {
156
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
157
+ return (originalCreatePoolCluster: Function) => {
158
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
159
+ const thisPlugin = this;
160
+ return function createPool(_config: string | mariadbTypes.PoolConfig) {
161
+ // eslint-disable-next-line prefer-rest-params
162
+ const cluster = originalCreatePoolCluster(...arguments);
163
+
164
+ // This is unwrapped on next call after unpatch
165
+ thisPlugin._wrap(cluster, 'getConnection', thisPlugin._patchGetConnection(cluster));
166
+ thisPlugin._wrap(cluster, 'add', thisPlugin._patchAdd(cluster));
167
+
168
+ return cluster;
169
+ };
170
+ };
171
+ }
172
+ private _patchAdd(cluster: mariadbTypes.PoolCluster) {
173
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
174
+ return (originalAdd: Function) => {
175
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
176
+ const thisPlugin = this;
177
+ return function add(id: string, _config: unknown) {
178
+ // Unwrap if unpatch has been called
179
+ if (!thisPlugin['_enabled']) {
180
+ thisPlugin._unwrap(cluster, 'add');
181
+ // eslint-disable-next-line prefer-rest-params
182
+ return originalAdd.apply(cluster, arguments);
183
+ }
184
+ // eslint-disable-next-line prefer-rest-params
185
+ originalAdd.apply(cluster, arguments);
186
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
187
+ const nodes = cluster['_nodes' as keyof mariadbTypes.PoolCluster] as any;
188
+ if (nodes) {
189
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
190
+ const nodeId = typeof id === 'object' ? 'CLUSTER::' + (cluster as any)._lastId : String(id);
191
+
192
+ const pool = nodes[nodeId].pool;
193
+ thisPlugin._setPoolcallbacks(pool, thisPlugin, id);
194
+ }
195
+ };
196
+ };
197
+ }
198
+
199
+ // method on cluster or pool
200
+ private _patchGetConnection(pool: mariadbTypes.Pool | mariadbTypes.PoolCluster) {
201
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
202
+ return (originalGetConnection: Function) => {
203
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
204
+ const thisPlugin = this;
205
+ return async function getConnection() {
206
+ // Unwrap if unpatch has been called
207
+ if (!thisPlugin['_enabled']) {
208
+ thisPlugin._unwrap(pool, 'getConnection');
209
+ // eslint-disable-next-line prefer-rest-params
210
+ return originalGetConnection.apply(pool, arguments);
211
+ }
212
+
213
+ // eslint-disable-next-line prefer-rest-params
214
+ const connection = await originalGetConnection.apply(pool, arguments);
215
+ if (!isWrapped(connection.query)) {
216
+ thisPlugin._wrap(connection, 'query', thisPlugin._patchQuery(connection));
217
+ }
218
+
219
+ return connection;
220
+ };
221
+ };
222
+ }
223
+
224
+ private _patchQuery(connection: mariadbTypes.Connection | mariadbTypes.Pool) {
225
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
226
+ return (originalQuery: Function): mariadbTypes.Connection['query'] => {
227
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
228
+ const thisPlugin = this;
229
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
230
+ return function query(query: string, _valuesOrCallback?: any[]) {
231
+ if (!thisPlugin['_enabled']) {
232
+ thisPlugin._unwrap(connection, 'query');
233
+ // eslint-disable-next-line prefer-rest-params
234
+ return originalQuery.apply(connection, arguments);
235
+ }
236
+
237
+ query = query.trim();
238
+
239
+ const spanName = getSpanName(query);
240
+ const spanAttributes: Attributes = {
241
+ ...MariaDBInstrumentation.COMMON_ATTRIBUTES,
242
+ [ATTR_DB_QUERY_TEXT]: getDbQueryText(query)
243
+ };
244
+
245
+ const instrumentationConfig: MySQLInstrumentationConfig = thisPlugin.getConfig();
246
+ if (instrumentationConfig.enhancedDatabaseReporting) {
247
+ let values;
248
+
249
+ if (Array.isArray(_valuesOrCallback)) {
250
+ values = _valuesOrCallback;
251
+ // eslint-disable-next-line prefer-rest-params
252
+ } else if (arguments[2]) {
253
+ values = [_valuesOrCallback];
254
+ }
255
+
256
+ spanAttributes[AttributeNames.MYSQL_VALUES] = getDbValues(query, values);
257
+ }
258
+
259
+ return withSpan(spanName, spanAttributes, () => originalQuery.apply(connection, [query, _valuesOrCallback]));
260
+ };
261
+ };
262
+ }
263
+
264
+ private _setPoolcallbacks(pool: mariadbTypes.Pool, thisPlugin: MariaDBInstrumentation, id: string) {
265
+ //TODO:: use semantic convention
266
+ const poolName = id || 'unk';
267
+
268
+ pool.on('connection', _connection => {
269
+ thisPlugin._connectionsUsage.add(1, {
270
+ state: 'idle',
271
+ name: poolName
272
+ });
273
+ });
274
+
275
+ pool.on('acquire', _connection => {
276
+ thisPlugin._connectionsUsage.add(-1, {
277
+ state: 'idle',
278
+ name: poolName
279
+ });
280
+ thisPlugin._connectionsUsage.add(1, {
281
+ state: 'used',
282
+ name: poolName
283
+ });
284
+ });
285
+
286
+ pool.on('release', _connection => {
287
+ thisPlugin._connectionsUsage.add(-1, {
288
+ state: 'used',
289
+ name: poolName
290
+ });
291
+ thisPlugin._connectionsUsage.add(1, {
292
+ state: 'idle',
293
+ name: poolName
294
+ });
295
+ });
296
+ }
297
+ }
@@ -0,0 +1,117 @@
1
+ import { Attributes, ROOT_CONTEXT, Span, SpanKind, SpanStatusCode, trace, Tracer } from '@opentelemetry/api';
2
+ import type { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
3
+ import { isNativeError } from 'util/types';
4
+
5
+ export const OtelState = {
6
+ tracer: undefined as Tracer | undefined,
7
+ prometheusExporter: undefined as PrometheusExporter | undefined,
8
+
9
+ get installed() {
10
+ return OtelState.tracer !== undefined;
11
+ }
12
+ };
13
+
14
+ export function isTracingInstalled() {
15
+ return OtelState.installed;
16
+ }
17
+
18
+ export function getTracer() {
19
+ return OtelState.tracer;
20
+ }
21
+
22
+ export function getActiveSpan() {
23
+ return trace.getActiveSpan();
24
+ }
25
+
26
+ export function getTraceContext() {
27
+ return getActiveSpan()?.spanContext();
28
+ }
29
+
30
+ export function disableActiveTrace() {
31
+ const ctx = getTraceContext();
32
+ if (ctx) {
33
+ ctx.traceFlags = 0;
34
+ }
35
+ }
36
+
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ function isError(e: any): e is Error {
39
+ return e instanceof Error || isNativeError(e);
40
+ }
41
+
42
+ async function runInSpan<T>(span: Span, fn: () => Promise<T>): Promise<T> {
43
+ try {
44
+ const result = await fn();
45
+ span.setStatus({ code: SpanStatusCode.OK });
46
+ return result;
47
+ } catch (err) {
48
+ span.setStatus({
49
+ code: SpanStatusCode.ERROR,
50
+ message: isError(err) ? err.message : String(err)
51
+ });
52
+ throw err;
53
+ } finally {
54
+ span.end();
55
+ }
56
+ }
57
+
58
+ type SpanInfo =
59
+ | {
60
+ traceId: string;
61
+ spanId: string;
62
+ traceFlags?: number;
63
+ }
64
+ | { traceparent: string }
65
+ | undefined;
66
+
67
+ export function withRemoteSpan<T>(name: string, spanInfo: SpanInfo, attrs: Attributes | undefined, fn: () => Promise<T>): Promise<T> {
68
+ if (!OtelState.tracer) return fn();
69
+ if (!spanInfo) return withSpan(name, attrs, fn);
70
+
71
+ let traceId: string;
72
+ let spanId: string;
73
+ let traceFlags: number | undefined;
74
+
75
+ if ('traceparent' in spanInfo) {
76
+ const parts = spanInfo.traceparent.split('-');
77
+ traceId = parts[1];
78
+ spanId = parts[2];
79
+ } else {
80
+ traceId = spanInfo.traceId;
81
+ spanId = spanInfo.spanId;
82
+ traceFlags = spanInfo.traceFlags;
83
+ }
84
+
85
+ const parentContext = trace.setSpanContext(ROOT_CONTEXT, {
86
+ traceId,
87
+ spanId,
88
+ traceFlags: traceFlags ?? 1 /* sample by default */,
89
+ isRemote: true
90
+ });
91
+ return OtelState.tracer.startActiveSpan(name, { attributes: attrs, kind: SpanKind.SERVER }, parentContext, span => runInSpan(span, fn));
92
+ }
93
+
94
+ export function withSpan<T>(name: string, fn: () => Promise<T>): Promise<T>;
95
+ export function withSpan<T>(name: string, attrs: Attributes | undefined, fn: () => Promise<T>): Promise<T>;
96
+ export function withSpan<T>(name: string, attrsOrFn: Attributes | (() => T) | undefined, fn?: () => Promise<T>): Promise<T> {
97
+ const resolvedAttrs = typeof attrsOrFn === 'object' ? attrsOrFn : undefined;
98
+ const resolvedFn = fn ?? (attrsOrFn as () => Promise<T>);
99
+
100
+ if (!OtelState.tracer) return resolvedFn();
101
+ return OtelState.tracer.startActiveSpan(name, { attributes: resolvedAttrs }, span => runInSpan(span, resolvedFn));
102
+ }
103
+
104
+ export function withRootSpan<T>(name: string, fn: () => Promise<T>): Promise<T>;
105
+ export function withRootSpan<T>(name: string, attrs: Attributes | undefined, fn: () => Promise<T>): Promise<T>;
106
+ export function withRootSpan<T>(name: string, attrsOrFn: Attributes | (() => T) | undefined, fn?: () => Promise<T>): Promise<T> {
107
+ const resolvedAttrs = typeof attrsOrFn === 'object' ? attrsOrFn : undefined;
108
+ const resolvedFn = fn ?? (attrsOrFn as () => Promise<T>);
109
+
110
+ if (!OtelState.tracer) return resolvedFn();
111
+ return OtelState.tracer.startActiveSpan(name, { attributes: resolvedAttrs }, ROOT_CONTEXT, span => runInSpan(span, resolvedFn));
112
+ }
113
+
114
+ export function setSpanAttributes(attributes: Attributes) {
115
+ if (!OtelState.installed) return;
116
+ getActiveSpan()?.setAttributes(attributes);
117
+ }