@gettersethya/mira 0.1.0-alpha.2 → 0.1.0-alpha.21

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 (371) hide show
  1. package/README.md +174 -0
  2. package/dist/src/app/app.d.ts +45 -26
  3. package/dist/src/app/app.d.ts.map +1 -1
  4. package/dist/src/app/app.js +138 -41
  5. package/dist/src/app/app.js.map +1 -1
  6. package/dist/src/app/builder.d.ts +56 -15
  7. package/dist/src/app/builder.d.ts.map +1 -1
  8. package/dist/src/app/builder.js +56 -4
  9. package/dist/src/app/builder.js.map +1 -1
  10. package/dist/src/app/define-rule.d.ts +70 -0
  11. package/dist/src/app/define-rule.d.ts.map +1 -0
  12. package/dist/src/app/define-rule.js +42 -0
  13. package/dist/src/app/define-rule.js.map +1 -0
  14. package/dist/src/app/index.d.ts +8 -3
  15. package/dist/src/app/index.d.ts.map +1 -1
  16. package/dist/src/app/index.js +3 -0
  17. package/dist/src/app/index.js.map +1 -1
  18. package/dist/src/app/plugin.d.ts +83 -0
  19. package/dist/src/app/plugin.d.ts.map +1 -0
  20. package/dist/src/app/plugin.js +20 -0
  21. package/dist/src/app/plugin.js.map +1 -0
  22. package/dist/src/app/types.d.ts +4 -4
  23. package/dist/src/app/types.d.ts.map +1 -1
  24. package/dist/src/cache/cached-collection.d.ts +7 -5
  25. package/dist/src/cache/cached-collection.d.ts.map +1 -1
  26. package/dist/src/cache/cached-collection.js +8 -5
  27. package/dist/src/cache/cached-collection.js.map +1 -1
  28. package/dist/src/cache/collection-cache.d.ts +1 -1
  29. package/dist/src/cache/collection-cache.d.ts.map +1 -1
  30. package/dist/src/cache/collection-cache.js +1 -1
  31. package/dist/src/cache/collection-cache.js.map +1 -1
  32. package/dist/src/cache/ctx-key.d.ts +15 -0
  33. package/dist/src/cache/ctx-key.d.ts.map +1 -0
  34. package/dist/src/cache/ctx-key.js +37 -0
  35. package/dist/src/cache/ctx-key.js.map +1 -0
  36. package/dist/src/cache/index.d.ts +2 -1
  37. package/dist/src/cache/index.d.ts.map +1 -1
  38. package/dist/src/cache/index.js +2 -1
  39. package/dist/src/cache/index.js.map +1 -1
  40. package/dist/src/collection-service/collection-service.d.ts +7 -5
  41. package/dist/src/collection-service/collection-service.d.ts.map +1 -1
  42. package/dist/src/collection-service/collection-service.js +201 -51
  43. package/dist/src/collection-service/collection-service.js.map +1 -1
  44. package/dist/src/collection-service/context.d.ts +2 -0
  45. package/dist/src/collection-service/context.d.ts.map +1 -1
  46. package/dist/src/collection-service/decode.d.ts +4 -2
  47. package/dist/src/collection-service/decode.d.ts.map +1 -1
  48. package/dist/src/collection-service/decode.js +32 -16
  49. package/dist/src/collection-service/decode.js.map +1 -1
  50. package/dist/src/collection-service/errors.d.ts +1 -1
  51. package/dist/src/collection-service/errors.d.ts.map +1 -1
  52. package/dist/src/collection-service/errors.js +1 -1
  53. package/dist/src/collection-service/errors.js.map +1 -1
  54. package/dist/src/collection-service/index.d.ts +1 -1
  55. package/dist/src/collection-service/index.d.ts.map +1 -1
  56. package/dist/src/collection-service/index.js.map +1 -1
  57. package/dist/src/collection-service/input-schema.d.ts +5 -4
  58. package/dist/src/collection-service/input-schema.d.ts.map +1 -1
  59. package/dist/src/collection-service/input-schema.js +31 -18
  60. package/dist/src/collection-service/input-schema.js.map +1 -1
  61. package/dist/src/collection-service/where.d.ts +14 -2
  62. package/dist/src/collection-service/where.d.ts.map +1 -1
  63. package/dist/src/collection-service/where.js +35 -1
  64. package/dist/src/collection-service/where.js.map +1 -1
  65. package/dist/src/config/config.d.ts +4 -4
  66. package/dist/src/config/config.d.ts.map +1 -1
  67. package/dist/src/config/config.js +34 -5
  68. package/dist/src/config/config.js.map +1 -1
  69. package/dist/src/config/types.d.ts +9 -0
  70. package/dist/src/config/types.d.ts.map +1 -1
  71. package/dist/src/cron/cron-service.d.ts +14 -0
  72. package/dist/src/cron/cron-service.d.ts.map +1 -0
  73. package/dist/src/cron/cron-service.js +135 -0
  74. package/dist/src/cron/cron-service.js.map +1 -0
  75. package/dist/src/cron/index.d.ts +4 -0
  76. package/dist/src/cron/index.d.ts.map +1 -0
  77. package/dist/src/cron/index.js +3 -0
  78. package/dist/src/cron/index.js.map +1 -0
  79. package/dist/src/cron/persistence.d.ts +22 -0
  80. package/dist/src/cron/persistence.d.ts.map +1 -0
  81. package/dist/src/cron/persistence.js +48 -0
  82. package/dist/src/cron/persistence.js.map +1 -0
  83. package/dist/src/cron/types.d.ts +51 -0
  84. package/dist/src/cron/types.d.ts.map +1 -0
  85. package/dist/src/cron/types.js +4 -0
  86. package/dist/src/cron/types.js.map +1 -0
  87. package/dist/src/crypto/crypto.d.ts +3 -2
  88. package/dist/src/crypto/crypto.d.ts.map +1 -1
  89. package/dist/src/crypto/crypto.js +1 -1
  90. package/dist/src/crypto/crypto.js.map +1 -1
  91. package/dist/src/crypto/node.d.ts.map +1 -1
  92. package/dist/src/crypto/node.js.map +1 -1
  93. package/dist/src/databases/sqlite.d.ts.map +1 -1
  94. package/dist/src/databases/sqlite.js +2 -2
  95. package/dist/src/databases/sqlite.js.map +1 -1
  96. package/dist/src/dialect/dialect-sqlite.d.ts +9 -0
  97. package/dist/src/dialect/dialect-sqlite.d.ts.map +1 -0
  98. package/dist/src/dialect/dialect-sqlite.js +109 -0
  99. package/dist/src/dialect/dialect-sqlite.js.map +1 -0
  100. package/dist/src/dialect/dialect.d.ts +26 -0
  101. package/dist/src/dialect/dialect.d.ts.map +1 -0
  102. package/dist/src/dialect/dialect.js +5 -0
  103. package/dist/src/dialect/dialect.js.map +1 -0
  104. package/dist/src/hooks/hook-collection.d.ts +5 -0
  105. package/dist/src/hooks/hook-collection.d.ts.map +1 -0
  106. package/dist/src/hooks/hook-collection.js +77 -0
  107. package/dist/src/hooks/hook-collection.js.map +1 -0
  108. package/dist/src/hooks/hook-service.d.ts +38 -0
  109. package/dist/src/hooks/hook-service.d.ts.map +1 -0
  110. package/dist/src/hooks/hook-service.js +150 -0
  111. package/dist/src/hooks/hook-service.js.map +1 -0
  112. package/dist/src/hooks/index.d.ts +4 -0
  113. package/dist/src/hooks/index.d.ts.map +1 -0
  114. package/dist/src/hooks/index.js +3 -0
  115. package/dist/src/hooks/index.js.map +1 -0
  116. package/dist/src/hooks/types.d.ts +74 -0
  117. package/dist/src/hooks/types.d.ts.map +1 -0
  118. package/dist/src/hooks/types.js +2 -0
  119. package/dist/src/hooks/types.js.map +1 -0
  120. package/dist/src/http/auth-node.d.ts.map +1 -1
  121. package/dist/src/http/auth-node.js +1 -1
  122. package/dist/src/http/auth-node.js.map +1 -1
  123. package/dist/src/http/auth.d.ts +3 -1
  124. package/dist/src/http/auth.d.ts.map +1 -1
  125. package/dist/src/http/auth.js +12 -2
  126. package/dist/src/http/auth.js.map +1 -1
  127. package/dist/src/http/cors.d.ts +94 -0
  128. package/dist/src/http/cors.d.ts.map +1 -0
  129. package/dist/src/http/cors.js +57 -0
  130. package/dist/src/http/cors.js.map +1 -0
  131. package/dist/src/http/errors.d.ts +1 -1
  132. package/dist/src/http/errors.d.ts.map +1 -1
  133. package/dist/src/http/errors.js +7 -7
  134. package/dist/src/http/errors.js.map +1 -1
  135. package/dist/src/http/file-serve.d.ts +4 -4
  136. package/dist/src/http/file-serve.d.ts.map +1 -1
  137. package/dist/src/http/file-serve.js +39 -34
  138. package/dist/src/http/file-serve.js.map +1 -1
  139. package/dist/src/http/file-token.d.ts +4 -3
  140. package/dist/src/http/file-token.d.ts.map +1 -1
  141. package/dist/src/http/file-token.js +19 -17
  142. package/dist/src/http/file-token.js.map +1 -1
  143. package/dist/src/http/files.d.ts +3 -3
  144. package/dist/src/http/files.d.ts.map +1 -1
  145. package/dist/src/http/files.js +5 -5
  146. package/dist/src/http/files.js.map +1 -1
  147. package/dist/src/http/index.d.ts +8 -5
  148. package/dist/src/http/index.d.ts.map +1 -1
  149. package/dist/src/http/index.js +5 -3
  150. package/dist/src/http/index.js.map +1 -1
  151. package/dist/src/http/ip-middleware.d.ts +3 -2
  152. package/dist/src/http/ip-middleware.d.ts.map +1 -1
  153. package/dist/src/http/ip-middleware.js +7 -4
  154. package/dist/src/http/ip-middleware.js.map +1 -1
  155. package/dist/src/http/params.d.ts +3 -3
  156. package/dist/src/http/params.d.ts.map +1 -1
  157. package/dist/src/http/params.js +2 -2
  158. package/dist/src/http/params.js.map +1 -1
  159. package/dist/src/http/port-retry.d.ts +18 -0
  160. package/dist/src/http/port-retry.d.ts.map +1 -0
  161. package/dist/src/http/port-retry.js +43 -0
  162. package/dist/src/http/port-retry.js.map +1 -0
  163. package/dist/src/http/router.d.ts +10 -7
  164. package/dist/src/http/router.d.ts.map +1 -1
  165. package/dist/src/http/router.js +184 -63
  166. package/dist/src/http/router.js.map +1 -1
  167. package/dist/src/http/schema.d.ts +5 -0
  168. package/dist/src/http/schema.d.ts.map +1 -0
  169. package/dist/src/http/schema.js +18 -0
  170. package/dist/src/http/schema.js.map +1 -0
  171. package/dist/src/http/server-factory-node.d.ts.map +1 -1
  172. package/dist/src/http/server-factory-node.js +1 -1
  173. package/dist/src/http/server-factory-node.js.map +1 -1
  174. package/dist/src/http/server-factory.d.ts +3 -3
  175. package/dist/src/http/server-factory.d.ts.map +1 -1
  176. package/dist/src/http/server-factory.js +1 -1
  177. package/dist/src/http/server-factory.js.map +1 -1
  178. package/dist/src/http/telemetry-routes.d.ts +5 -0
  179. package/dist/src/http/telemetry-routes.d.ts.map +1 -0
  180. package/dist/src/http/telemetry-routes.js +220 -0
  181. package/dist/src/http/telemetry-routes.js.map +1 -0
  182. package/dist/src/index.d.ts +18 -1
  183. package/dist/src/index.d.ts.map +1 -1
  184. package/dist/src/index.js +14 -1
  185. package/dist/src/index.js.map +1 -1
  186. package/dist/src/migrator/dialect-sqlite.d.ts.map +1 -1
  187. package/dist/src/migrator/dialect-sqlite.js +7 -1
  188. package/dist/src/migrator/dialect-sqlite.js.map +1 -1
  189. package/dist/src/migrator/index.d.ts +4 -4
  190. package/dist/src/migrator/index.d.ts.map +1 -1
  191. package/dist/src/migrator/index.js +2 -2
  192. package/dist/src/migrator/index.js.map +1 -1
  193. package/dist/src/migrator/migrator.d.ts +8 -8
  194. package/dist/src/migrator/migrator.d.ts.map +1 -1
  195. package/dist/src/migrator/migrator.js +16 -13
  196. package/dist/src/migrator/migrator.js.map +1 -1
  197. package/dist/src/migrator/schema-diff.d.ts +2 -2
  198. package/dist/src/migrator/schema-diff.d.ts.map +1 -1
  199. package/dist/src/migrator/schema-diff.js.map +1 -1
  200. package/dist/src/migrator/types.d.ts +5 -5
  201. package/dist/src/migrator/types.d.ts.map +1 -1
  202. package/dist/src/migrator/types.js +6 -7
  203. package/dist/src/migrator/types.js.map +1 -1
  204. package/dist/src/platforms/node.d.ts +1 -1
  205. package/dist/src/platforms/node.d.ts.map +1 -1
  206. package/dist/src/platforms/node.js +1 -1
  207. package/dist/src/platforms/node.js.map +1 -1
  208. package/dist/src/repository/id.d.ts +1 -1
  209. package/dist/src/repository/id.d.ts.map +1 -1
  210. package/dist/src/repository/id.js +15 -3
  211. package/dist/src/repository/id.js.map +1 -1
  212. package/dist/src/repository/repository.d.ts +3 -2
  213. package/dist/src/repository/repository.d.ts.map +1 -1
  214. package/dist/src/repository/repository.js +11 -7
  215. package/dist/src/repository/repository.js.map +1 -1
  216. package/dist/src/rule/compiler.d.ts.map +1 -1
  217. package/dist/src/rule/compiler.js +2 -0
  218. package/dist/src/rule/compiler.js.map +1 -1
  219. package/dist/src/rule/enforcer.d.ts.map +1 -1
  220. package/dist/src/rule/enforcer.js.map +1 -1
  221. package/dist/src/storage/index.d.ts +1 -1
  222. package/dist/src/storage/index.d.ts.map +1 -1
  223. package/dist/src/storage/index.js +1 -1
  224. package/dist/src/storage/index.js.map +1 -1
  225. package/dist/src/storage/local-preset.d.ts.map +1 -1
  226. package/dist/src/storage/local-preset.js.map +1 -1
  227. package/dist/src/storage/storage.d.ts +2 -2
  228. package/dist/src/storage/storage.d.ts.map +1 -1
  229. package/dist/src/storage/storage.js +8 -26
  230. package/dist/src/storage/storage.js.map +1 -1
  231. package/dist/src/telemetry/collections.d.ts +4 -0
  232. package/dist/src/telemetry/collections.d.ts.map +1 -0
  233. package/dist/src/telemetry/collections.js +19 -0
  234. package/dist/src/telemetry/collections.js.map +1 -0
  235. package/dist/src/telemetry/index.d.ts +17 -3
  236. package/dist/src/telemetry/index.d.ts.map +1 -1
  237. package/dist/src/telemetry/index.js +15 -5
  238. package/dist/src/telemetry/index.js.map +1 -1
  239. package/dist/src/telemetry/logger.d.ts +29 -2
  240. package/dist/src/telemetry/logger.d.ts.map +1 -1
  241. package/dist/src/telemetry/logger.js +52 -15
  242. package/dist/src/telemetry/logger.js.map +1 -1
  243. package/dist/src/telemetry/sqlite-logger.d.ts +36 -0
  244. package/dist/src/telemetry/sqlite-logger.d.ts.map +1 -0
  245. package/dist/src/telemetry/sqlite-logger.js +193 -0
  246. package/dist/src/telemetry/sqlite-logger.js.map +1 -0
  247. package/dist/src/telemetry/telemetry-sql-client.d.ts +11 -0
  248. package/dist/src/telemetry/telemetry-sql-client.d.ts.map +1 -0
  249. package/dist/src/telemetry/telemetry-sql-client.js +8 -0
  250. package/dist/src/telemetry/telemetry-sql-client.js.map +1 -0
  251. package/dist/src/telemetry/tracer.d.ts +16 -1
  252. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  253. package/dist/src/telemetry/tracer.js +87 -70
  254. package/dist/src/telemetry/tracer.js.map +1 -1
  255. package/dist/src/telemetry/types.d.ts +11 -0
  256. package/dist/src/telemetry/types.d.ts.map +1 -0
  257. package/dist/src/telemetry/types.js +2 -0
  258. package/dist/src/telemetry/types.js.map +1 -0
  259. package/dist/src/thumbnail/index.d.ts +2 -2
  260. package/dist/src/thumbnail/index.d.ts.map +1 -1
  261. package/dist/src/thumbnail/index.js +1 -1
  262. package/dist/src/thumbnail/index.js.map +1 -1
  263. package/dist/src/thumbnail/photon.d.ts.map +1 -1
  264. package/dist/src/thumbnail/photon.js +1 -1
  265. package/dist/src/thumbnail/photon.js.map +1 -1
  266. package/dist/src/thumbnail/types.d.ts +1 -1
  267. package/dist/src/thumbnail/types.d.ts.map +1 -1
  268. package/dist/src/thumbnail/types.js +2 -2
  269. package/dist/src/thumbnail/types.js.map +1 -1
  270. package/dist/tests/app/app.test.js +101 -26
  271. package/dist/tests/app/app.test.js.map +1 -1
  272. package/dist/tests/app/builder.test.js +77 -9
  273. package/dist/tests/app/builder.test.js.map +1 -1
  274. package/dist/tests/app/define-rule.test.d.ts +2 -0
  275. package/dist/tests/app/define-rule.test.d.ts.map +1 -0
  276. package/dist/tests/app/define-rule.test.js +147 -0
  277. package/dist/tests/app/define-rule.test.js.map +1 -0
  278. package/dist/tests/cache/cached-collection.test.js +200 -40
  279. package/dist/tests/cache/cached-collection.test.js.map +1 -1
  280. package/dist/tests/cache/collection-cache.test.js +1 -1
  281. package/dist/tests/cache/collection-cache.test.js.map +1 -1
  282. package/dist/tests/collection-service/auth-credentials.test.d.ts +2 -0
  283. package/dist/tests/collection-service/auth-credentials.test.d.ts.map +1 -0
  284. package/dist/tests/collection-service/auth-credentials.test.js +172 -0
  285. package/dist/tests/collection-service/auth-credentials.test.js.map +1 -0
  286. package/dist/tests/collection-service/collection-service.test.js +374 -174
  287. package/dist/tests/collection-service/collection-service.test.js.map +1 -1
  288. package/dist/tests/collection-service/decode.test.d.ts +2 -0
  289. package/dist/tests/collection-service/decode.test.d.ts.map +1 -0
  290. package/dist/tests/collection-service/decode.test.js +37 -0
  291. package/dist/tests/collection-service/decode.test.js.map +1 -0
  292. package/dist/tests/collection-service/input-schema.test.js +162 -95
  293. package/dist/tests/collection-service/input-schema.test.js.map +1 -1
  294. package/dist/tests/config/config.test.js +15 -4
  295. package/dist/tests/config/config.test.js.map +1 -1
  296. package/dist/tests/cron/cron-integration.test.d.ts +2 -0
  297. package/dist/tests/cron/cron-integration.test.d.ts.map +1 -0
  298. package/dist/tests/cron/cron-integration.test.js +109 -0
  299. package/dist/tests/cron/cron-integration.test.js.map +1 -0
  300. package/dist/tests/cron/cron-persistence.test.d.ts +2 -0
  301. package/dist/tests/cron/cron-persistence.test.d.ts.map +1 -0
  302. package/dist/tests/cron/cron-persistence.test.js +123 -0
  303. package/dist/tests/cron/cron-persistence.test.js.map +1 -0
  304. package/dist/tests/cron/cron-service.test.d.ts +2 -0
  305. package/dist/tests/cron/cron-service.test.d.ts.map +1 -0
  306. package/dist/tests/cron/cron-service.test.js +124 -0
  307. package/dist/tests/cron/cron-service.test.js.map +1 -0
  308. package/dist/tests/crypto/crypto.test.js +2 -2
  309. package/dist/tests/crypto/crypto.test.js.map +1 -1
  310. package/dist/tests/hooks/hook-collection.test.d.ts +2 -0
  311. package/dist/tests/hooks/hook-collection.test.d.ts.map +1 -0
  312. package/dist/tests/hooks/hook-collection.test.js +110 -0
  313. package/dist/tests/hooks/hook-collection.test.js.map +1 -0
  314. package/dist/tests/hooks/hook-service.test.d.ts +2 -0
  315. package/dist/tests/hooks/hook-service.test.d.ts.map +1 -0
  316. package/dist/tests/hooks/hook-service.test.js +220 -0
  317. package/dist/tests/hooks/hook-service.test.js.map +1 -0
  318. package/dist/tests/http/cors.test.d.ts +2 -0
  319. package/dist/tests/http/cors.test.d.ts.map +1 -0
  320. package/dist/tests/http/cors.test.js +211 -0
  321. package/dist/tests/http/cors.test.js.map +1 -0
  322. package/dist/tests/http/file-serve.test.js +63 -54
  323. package/dist/tests/http/file-serve.test.js.map +1 -1
  324. package/dist/tests/http/file-token.test.js +69 -51
  325. package/dist/tests/http/file-token.test.js.map +1 -1
  326. package/dist/tests/http/ip-middleware.test.js +13 -13
  327. package/dist/tests/http/ip-middleware.test.js.map +1 -1
  328. package/dist/tests/http/port-retry.test.d.ts +2 -0
  329. package/dist/tests/http/port-retry.test.d.ts.map +1 -0
  330. package/dist/tests/http/port-retry.test.js +52 -0
  331. package/dist/tests/http/port-retry.test.js.map +1 -0
  332. package/dist/tests/http/router.test.js +260 -85
  333. package/dist/tests/http/router.test.js.map +1 -1
  334. package/dist/tests/migrator/dialect-sqlite.test.js +1 -1
  335. package/dist/tests/migrator/dialect-sqlite.test.js.map +1 -1
  336. package/dist/tests/migrator/integration.test.js +6 -6
  337. package/dist/tests/migrator/integration.test.js.map +1 -1
  338. package/dist/tests/migrator/migrator.test.js +5 -5
  339. package/dist/tests/migrator/migrator.test.js.map +1 -1
  340. package/dist/tests/migrator/schema-diff.test.js.map +1 -1
  341. package/dist/tests/repository/repository.test.js +71 -8
  342. package/dist/tests/repository/repository.test.js.map +1 -1
  343. package/dist/tests/rule/compiler.test.js +1 -1
  344. package/dist/tests/rule/compiler.test.js.map +1 -1
  345. package/dist/tests/rule/enforcer.test.js +9 -9
  346. package/dist/tests/rule/enforcer.test.js.map +1 -1
  347. package/dist/tests/storage/storage.test.js +15 -15
  348. package/dist/tests/storage/storage.test.js.map +1 -1
  349. package/dist/tests/telemetry/collections.test.d.ts +2 -0
  350. package/dist/tests/telemetry/collections.test.d.ts.map +1 -0
  351. package/dist/tests/telemetry/collections.test.js +67 -0
  352. package/dist/tests/telemetry/collections.test.js.map +1 -0
  353. package/dist/tests/telemetry/instrumentation.test.js +27 -20
  354. package/dist/tests/telemetry/instrumentation.test.js.map +1 -1
  355. package/dist/tests/telemetry/logger.test.js +38 -6
  356. package/dist/tests/telemetry/logger.test.js.map +1 -1
  357. package/dist/tests/telemetry/sqlite-logger.test.d.ts +2 -0
  358. package/dist/tests/telemetry/sqlite-logger.test.d.ts.map +1 -0
  359. package/dist/tests/telemetry/sqlite-logger.test.js +272 -0
  360. package/dist/tests/telemetry/sqlite-logger.test.js.map +1 -0
  361. package/dist/tests/telemetry/telemetry-routes.test.d.ts +2 -0
  362. package/dist/tests/telemetry/telemetry-routes.test.d.ts.map +1 -0
  363. package/dist/tests/telemetry/telemetry-routes.test.js +154 -0
  364. package/dist/tests/telemetry/telemetry-routes.test.js.map +1 -0
  365. package/dist/tests/telemetry/tracer.test.js +41 -4
  366. package/dist/tests/telemetry/tracer.test.js.map +1 -1
  367. package/dist/tests/thumbnail/photon.test.js +35 -35
  368. package/dist/tests/thumbnail/photon.test.js.map +1 -1
  369. package/dist/tests/thumbnail/thumbnail.test.js +7 -7
  370. package/dist/tests/thumbnail/thumbnail.test.js.map +1 -1
  371. package/package.json +9 -9
@@ -1,4 +1,31 @@
1
- import { Layer, Logger } from "effect";
2
- export declare function makeStructuredLogger(): Logger.Logger<unknown, void>;
1
+ import type { Layer } from "effect";
2
+ import { Logger } from "effect";
3
+ import type { ConsolePrintOptions } from "./types.js";
4
+ export interface LogLine {
5
+ level: string;
6
+ message: string;
7
+ timestamp: string;
8
+ traceId?: string;
9
+ spanId?: string;
10
+ }
11
+ /**
12
+ * Renders a structured log line for human-readable console output.
13
+ * Used when `pretty: true` is passed to a console telemetry factory.
14
+ */
15
+ export declare function formatPrettyLog(line: LogLine): string;
16
+ /**
17
+ * Creates a structured JSON logger. When `options.pretty` is `true`, each log
18
+ * line is printed with Chalk coloring instead of as a raw JSON line.
19
+ *
20
+ * @param options - Console print options (`pretty`, default `false`)
21
+ */
22
+ export declare function makeStructuredLogger(options?: ConsolePrintOptions): Logger.Logger<unknown, void>;
23
+ /**
24
+ * Creates the console logger layer.
25
+ *
26
+ * @param options - Console print options (`pretty`, default `false`)
27
+ */
28
+ export declare const makeConsoleLoggerLayer: (options?: ConsolePrintOptions) => Layer.Layer<never>;
29
+ /** Console logger layer using raw JSON output (`pretty: false`). */
3
30
  export declare const ConsoleLoggerLayer: Layer.Layer<never>;
4
31
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/telemetry/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,EAAE,MAAM,EAA0B,MAAM,QAAQ,CAAA;AAY5F,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAuBnE;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CACY,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/telemetry/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAYrD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAgBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOrD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAkBpG;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,UAAS,mBAAwB,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAC7C,CAAA;AAE/C,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAA4B,CAAA"}
@@ -1,27 +1,64 @@
1
- import { Context, FiberRef, FiberRefs, Logger, Option, Schema, Tracer } from "effect";
1
+ import chalk from "chalk";
2
+ import { Logger, Schema } from "effect";
2
3
  const LogLineSchema = Schema.Struct({
3
4
  level: Schema.String,
4
5
  message: Schema.String,
5
6
  timestamp: Schema.String,
6
- traceId: Schema.optionalWith(Schema.String, { exact: true }),
7
- spanId: Schema.optionalWith(Schema.String, { exact: true }),
7
+ traceId: Schema.optionalKey(Schema.String),
8
+ spanId: Schema.optionalKey(Schema.String)
8
9
  });
9
- const encodeLogLine = Schema.encodeSync(Schema.parseJson(LogLineSchema));
10
- export function makeStructuredLogger() {
11
- return Logger.make(({ logLevel, message, date, context }) => {
12
- const ctx = FiberRefs.getOrDefault(context, FiberRef.currentContext);
13
- const spanOption = Context.getOption(ctx, Tracer.ParentSpan);
10
+ const encodeLogLine = Schema.encodeSync(Schema.fromJsonString(LogLineSchema));
11
+ const LEVEL_COLORS = {
12
+ TRACE: (text) => chalk.gray(text),
13
+ DEBUG: (text) => chalk.magenta(text),
14
+ INFO: (text) => chalk.cyan(text),
15
+ WARN: (text) => chalk.yellow(text),
16
+ ERROR: (text) => chalk.red(text),
17
+ FATAL: (text) => chalk.bgRedBright.white(text)
18
+ };
19
+ function formatLevel(level) {
20
+ const paint = LEVEL_COLORS[level] ?? ((text) => chalk.white(text));
21
+ return paint(level.padEnd(5));
22
+ }
23
+ /**
24
+ * Renders a structured log line for human-readable console output.
25
+ * Used when `pretty: true` is passed to a console telemetry factory.
26
+ */
27
+ export function formatPrettyLog(line) {
28
+ const time = chalk.dim(line.timestamp.slice(11, 23));
29
+ const ids = line.traceId !== undefined
30
+ ? chalk.dim(` ${line.traceId.slice(0, 8)}/${(line.spanId ?? "").slice(0, 8)}`)
31
+ : "";
32
+ return `${time} ${formatLevel(line.level)} ${line.message}${ids}`;
33
+ }
34
+ /**
35
+ * Creates a structured JSON logger. When `options.pretty` is `true`, each log
36
+ * line is printed with Chalk coloring instead of as a raw JSON line.
37
+ *
38
+ * @param options - Console print options (`pretty`, default `false`)
39
+ */
40
+ export function makeStructuredLogger(options = {}) {
41
+ const pretty = options.pretty ?? false;
42
+ return Logger.make(({ date, fiber, logLevel, message }) => {
43
+ const span = fiber.cache.span;
14
44
  const line = {
15
- level: logLevel.label,
45
+ level: logLevel.toUpperCase(),
16
46
  message: String(Array.isArray(message) ? message.join(" ") : message),
17
- timestamp: date.toISOString(),
47
+ timestamp: date.toISOString()
18
48
  };
19
- if (Option.isSome(spanOption)) {
20
- line.traceId = spanOption.value.traceId;
21
- line.spanId = spanOption.value.spanId;
49
+ if (span !== undefined) {
50
+ line.traceId = span.traceId;
51
+ line.spanId = span.spanId;
22
52
  }
23
- console.log(encodeLogLine(line));
53
+ console.log(pretty ? formatPrettyLog(line) : encodeLogLine(line));
24
54
  });
25
55
  }
26
- export const ConsoleLoggerLayer = Logger.replace(Logger.defaultLogger, makeStructuredLogger());
56
+ /**
57
+ * Creates the console logger layer.
58
+ *
59
+ * @param options - Console print options (`pretty`, default `false`)
60
+ */
61
+ export const makeConsoleLoggerLayer = (options = {}) => Logger.layer([makeStructuredLogger(options)]);
62
+ /** Console logger layer using raw JSON output (`pretty: false`). */
63
+ export const ConsoleLoggerLayer = makeConsoleLoggerLayer();
27
64
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/telemetry/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE5F,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;CAC5D,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;AAExE,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;QACpE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAE5D,MAAM,IAAI,GAMN;YACF,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACrE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;SAC9B,CAAA;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAA;YACvC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAA;QACvC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAC7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/telemetry/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { Layer } from "effect";
2
+ import { SqlClient } from "effect/sql";
3
+ import { AppConfig } from "../config/index.js";
4
+ import type { CronDef } from "../cron/types.js";
5
+ import { CryptoService } from "../crypto/index.js";
6
+ import { TelemetrySqlClient } from "./telemetry-sql-client.js";
7
+ export interface SqliteLoggerConfig {
8
+ /** Path to the SQLite log database. Defaults to `"mira-logs.db"`. */
9
+ readonly dbPath?: string;
10
+ /** Also print each log entry and span to stdout. Defaults to `false`. */
11
+ readonly logConsole?: boolean;
12
+ /**
13
+ * When `logConsole` is enabled, print with Chalk coloring instead of raw JSON.
14
+ * Defaults to `false`.
15
+ */
16
+ readonly pretty?: boolean;
17
+ }
18
+ export declare const logCleanupCronDef: CronDef<TelemetrySqlClient | AppConfig>;
19
+ /**
20
+ * Creates a telemetry layer using the given `SqlClient.SqlClient` from context.
21
+ * The caller is responsible for providing a SqlClient layer and a CryptoService layer.
22
+ * Exported for testing — production code should use `makeSqliteTelemetryLayer`.
23
+ */
24
+ export declare function makeSqliteTelemetryLayerForClient(config?: Pick<SqliteLoggerConfig, "logConsole" | "pretty">): Layer.Layer<never, never, SqlClient.SqlClient | CryptoService>;
25
+ /**
26
+ * Creates a telemetry layer that writes structured log entries and span traces to
27
+ * a dedicated SQLite database, separate from the main application database to
28
+ * avoid contention on the primary connection.
29
+ *
30
+ * @param config.dbPath Path to the log database file (default: `"mira-logs.db"`)
31
+ * @param config.logConsole Also print each log entry and span to stdout
32
+ * @param config.pretty When `logConsole` is enabled, print with Chalk coloring
33
+ * instead of raw JSON (default: `false`)
34
+ */
35
+ export declare function makeSqliteTelemetryLayer(config?: SqliteLoggerConfig): Layer.Layer<never, never, never>;
36
+ //# sourceMappingURL=sqlite-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-logger.d.ts","sourceRoot":"","sources":["../../../src/telemetry/sqlite-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,EAA2C,MAAM,QAAQ,CAAA;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAA;AAMlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAI9D,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAqKD,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAarE,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,QAAQ,CAAM,GAC7D,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,GAAG,aAAa,CAAC,CA0DhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,kBAAuB,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAsB1G"}
@@ -0,0 +1,193 @@
1
+ import { SqliteClient } from "@effect/sql-sqlite-node";
2
+ import { Effect, Layer, Logger, Queue, Schedule, Schema, Tracer } from "effect";
3
+ import { SqlClient } from "effect/sql";
4
+ import { AppConfig } from "../config/index.js";
5
+ import { CryptoService, NodeCryptoLayer } from "../crypto/index.js";
6
+ import { Dialect, Migrator, MigratorLive, sqliteDialect } from "../migrator/index.js";
7
+ import { LogsCollection, SpansCollection } from "./collections.js";
8
+ import { formatPrettyLog } from "./logger.js";
9
+ import { TelemetrySqlClient } from "./telemetry-sql-client.js";
10
+ import { formatPrettySpan, makeConsoleTracer } from "./tracer.js";
11
+ const LogLineSchema = Schema.Struct({
12
+ level: Schema.String,
13
+ message: Schema.String,
14
+ created: Schema.String,
15
+ traceId: Schema.optionalKey(Schema.String),
16
+ spanId: Schema.optionalKey(Schema.String)
17
+ });
18
+ const encodeLogLine = Schema.encodeSync(Schema.fromJsonString(LogLineSchema));
19
+ const SpanAttributeValueSchema = Schema.Union([Schema.String, Schema.Number, Schema.Boolean]);
20
+ const SpanLineSchema = Schema.Struct({
21
+ span: Schema.String,
22
+ traceId: Schema.String,
23
+ spanId: Schema.String,
24
+ kind: Schema.String,
25
+ durationMs: Schema.Number,
26
+ status: Schema.Literals(["ok", "error"]),
27
+ attributes: Schema.optionalKey(Schema.Record(Schema.String, SpanAttributeValueSchema)),
28
+ parentSpanId: Schema.optionalKey(Schema.String),
29
+ error: Schema.optionalKey(Schema.String)
30
+ });
31
+ const encodeSpanLine = Schema.encodeEffect(Schema.fromJsonString(SpanLineSchema));
32
+ const encodeAttributes = Schema.encodeEffect(Schema.fromJsonString(Schema.Record(Schema.String, SpanAttributeValueSchema)));
33
+ function makeSqliteLogger(sql, logConsole, pretty, randomBytesSync) {
34
+ const sqlLayer = Layer.succeed(SqlClient.SqlClient, sql);
35
+ return Logger.make(({ date, fiber, logLevel, message }) => {
36
+ const span = fiber.cache.span;
37
+ const id = Buffer.from(randomBytesSync(16)).toString("base64url");
38
+ const created = date.toISOString();
39
+ const dbRow = {
40
+ id,
41
+ level: logLevel.toUpperCase(),
42
+ message: String(Array.isArray(message) ? message.join(" ") : message),
43
+ created,
44
+ updated: created
45
+ };
46
+ if (span !== undefined) {
47
+ dbRow.traceId = span.traceId;
48
+ dbRow.spanId = span.spanId;
49
+ }
50
+ Effect.runPromise(sql `INSERT INTO ${sql("logs")} ${sql.insert(dbRow)}`.pipe(Effect.provide(sqlLayer), Effect.orDie)).catch(() => { });
51
+ if (logConsole) {
52
+ if (pretty) {
53
+ const prettyLine = {
54
+ level: dbRow.level,
55
+ message: dbRow.message,
56
+ timestamp: dbRow.created
57
+ };
58
+ if (dbRow.traceId !== undefined)
59
+ prettyLine.traceId = dbRow.traceId;
60
+ if (dbRow.spanId !== undefined)
61
+ prettyLine.spanId = dbRow.spanId;
62
+ console.log(formatPrettyLog(prettyLine));
63
+ }
64
+ else {
65
+ const consoleLine = {
66
+ level: dbRow.level,
67
+ message: dbRow.message,
68
+ created: dbRow.created
69
+ };
70
+ if (dbRow.traceId !== undefined)
71
+ consoleLine.traceId = dbRow.traceId;
72
+ if (dbRow.spanId !== undefined)
73
+ consoleLine.spanId = dbRow.spanId;
74
+ console.log(encodeLogLine(consoleLine));
75
+ }
76
+ }
77
+ });
78
+ }
79
+ function writeSpanToDb(sql, span, logConsole, pretty, randomBytesSync) {
80
+ const sqlLayer = Layer.succeed(SqlClient.SqlClient, sql);
81
+ return Effect.gen(function* () {
82
+ const attributesJson = yield* encodeAttributes(span.attributes).pipe(Effect.orDie);
83
+ const id = Buffer.from(randomBytesSync(16)).toString("base64url");
84
+ const created = new Date().toISOString();
85
+ const row = {
86
+ id,
87
+ name: span.name,
88
+ traceId: span.traceId,
89
+ spanId: span.spanId,
90
+ parentSpanId: span.parentSpanId ?? null,
91
+ kind: span.kind,
92
+ durationMs: span.durationMs,
93
+ status: span.status,
94
+ error: span.error ?? null,
95
+ attributes: attributesJson,
96
+ created,
97
+ updated: created
98
+ };
99
+ yield* sql `INSERT INTO ${sql("spans")} ${sql.insert(row)}`.pipe(Effect.provide(sqlLayer), Effect.orDie);
100
+ if (logConsole) {
101
+ if (pretty) {
102
+ yield* Effect.sync(() => console.log(formatPrettySpan(span)));
103
+ }
104
+ else {
105
+ const line = {
106
+ span: span.name,
107
+ traceId: span.traceId,
108
+ spanId: span.spanId,
109
+ kind: span.kind,
110
+ durationMs: span.durationMs,
111
+ status: span.status
112
+ };
113
+ if (Object.keys(span.attributes).length > 0)
114
+ line.attributes = span.attributes;
115
+ if (span.parentSpanId !== undefined)
116
+ line.parentSpanId = span.parentSpanId;
117
+ if (span.error !== undefined)
118
+ line.error = span.error;
119
+ yield* encodeSpanLine(line).pipe(Effect.orDie, Effect.flatMap((encoded) => Effect.sync(() => console.log(`[trace] ${encoded}`))));
120
+ }
121
+ }
122
+ });
123
+ }
124
+ export const logCleanupCronDef = {
125
+ name: "mira:log-cleanup",
126
+ description: "Delete logs and spans older than logRetentionDays days",
127
+ schedule: Schedule.cron("0 0 * * *"),
128
+ handler: () => Effect.gen(function* () {
129
+ const sql = yield* TelemetrySqlClient;
130
+ const config = yield* AppConfig;
131
+ const cutoff = new Date(Date.now() - config.logRetentionDays * 24 * 60 * 60 * 1000).toISOString();
132
+ yield* sql `DELETE FROM ${sql("logs")} WHERE created < ${cutoff}`;
133
+ yield* sql `DELETE FROM ${sql("spans")} WHERE created < ${cutoff}`;
134
+ yield* Effect.logInfo(`[mira:log-cleanup] deleted logs and spans older than ${cutoff}`);
135
+ })
136
+ };
137
+ /**
138
+ * Creates a telemetry layer using the given `SqlClient.SqlClient` from context.
139
+ * The caller is responsible for providing a SqlClient layer and a CryptoService layer.
140
+ * Exported for testing — production code should use `makeSqliteTelemetryLayer`.
141
+ */
142
+ export function makeSqliteTelemetryLayerForClient(config = {}) {
143
+ const logConsole = config.logConsole ?? false;
144
+ const pretty = config.pretty ?? false;
145
+ return Layer.unwrap(Effect.gen(function* () {
146
+ const sql = yield* SqlClient.SqlClient;
147
+ const cryptoSvc = yield* CryptoService;
148
+ const randomBytesSync = (size) => cryptoSvc.randomBytesSync(size);
149
+ yield* Effect.gen(function* () {
150
+ const migrator = yield* Migrator;
151
+ yield* migrator.migrate([
152
+ { name: "logs", schema: LogsCollection.schema },
153
+ { name: "spans", schema: SpansCollection.schema }
154
+ ]);
155
+ }).pipe(Effect.provide(Layer.mergeAll(MigratorLive.pipe(Layer.provide(
156
+ //
157
+ Layer.succeed(Dialect, sqliteDialect)))).pipe(Layer.provideMerge(
158
+ //
159
+ Layer.succeed(SqlClient.SqlClient, sql)))), Effect.orDie);
160
+ const logger = makeSqliteLogger(sql, logConsole, pretty, randomBytesSync);
161
+ const queue = yield* Queue.unbounded();
162
+ // Registered first → runs last (LIFO): drain items still in queue at shutdown.
163
+ yield* Effect.addFinalizer(() => Queue.clear(queue).pipe(Effect.flatMap(Effect.forEach((span) => writeSpanToDb(sql, span, logConsole, pretty, randomBytesSync))), Effect.asVoid));
164
+ // Registered second → runs first (LIFO): stop the consumer fiber.
165
+ yield* Effect.forkScoped(Effect.forever(Queue.take(queue).pipe(Effect.flatMap((span) => writeSpanToDb(sql, span, logConsole, pretty, randomBytesSync)))));
166
+ const tracer = makeConsoleTracer(queue, randomBytesSync);
167
+ return Layer.merge(Logger.layer([logger]), Layer.succeed(Tracer.Tracer, tracer));
168
+ }));
169
+ }
170
+ /**
171
+ * Creates a telemetry layer that writes structured log entries and span traces to
172
+ * a dedicated SQLite database, separate from the main application database to
173
+ * avoid contention on the primary connection.
174
+ *
175
+ * @param config.dbPath Path to the log database file (default: `"mira-logs.db"`)
176
+ * @param config.logConsole Also print each log entry and span to stdout
177
+ * @param config.pretty When `logConsole` is enabled, print with Chalk coloring
178
+ * instead of raw JSON (default: `false`)
179
+ */
180
+ export function makeSqliteTelemetryLayer(config = {}) {
181
+ const ownSqlLayer = SqliteClient.layer({ filename: config.dbPath ?? "mira-logs.db" });
182
+ const logConsole = config.logConsole ?? false;
183
+ const pretty = config.pretty ?? false;
184
+ // The logger/tracer layer requires SqlClient.SqlClient and CryptoService.
185
+ const loggerLayer = makeSqliteTelemetryLayerForClient({ logConsole, pretty });
186
+ // TelemetrySqlClient provides the same dedicated SqlClient to API routes.
187
+ const telemetryClientLayer = Layer.effect(TelemetrySqlClient, Effect.gen(function* () {
188
+ const sql = yield* SqlClient.SqlClient;
189
+ return sql;
190
+ }));
191
+ return Layer.merge(loggerLayer, telemetryClientLayer).pipe(Layer.provide(ownSqlLayer), Layer.provide(NodeCryptoLayer), Layer.orDie);
192
+ }
193
+ //# sourceMappingURL=sqlite-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-logger.js","sourceRoot":"","sources":["../../../src/telemetry/sqlite-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Context } from "effect";
2
+ import type { SqlClient } from "effect/sql";
3
+ declare const TelemetrySqlClient_base: Context.ServiceClass<TelemetrySqlClient, "TelemetrySqlClient", SqlClient.SqlClient>;
4
+ /**
5
+ * Tag for the dedicated SQLite SqlClient used by the telemetry system.
6
+ * Separate from the main app SqlClient to avoid contention.
7
+ */
8
+ export declare class TelemetrySqlClient extends TelemetrySqlClient_base {
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=telemetry-sql-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-sql-client.d.ts","sourceRoot":"","sources":["../../../src/telemetry/telemetry-sql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;;AAE3C;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,uBAGf;CAAG"}
@@ -0,0 +1,8 @@
1
+ import { Context } from "effect";
2
+ /**
3
+ * Tag for the dedicated SQLite SqlClient used by the telemetry system.
4
+ * Separate from the main app SqlClient to avoid contention.
5
+ */
6
+ export class TelemetrySqlClient extends Context.Service()("TelemetrySqlClient") {
7
+ }
8
+ //# sourceMappingURL=telemetry-sql-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-sql-client.js","sourceRoot":"","sources":["../../../src/telemetry/telemetry-sql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAGhC;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,OAAO,CAAC,OAAO,EAGpD,CAAC,oBAAoB,CAAC;CAAG"}
@@ -1,5 +1,6 @@
1
1
  import { Layer, Queue, Tracer } from "effect";
2
2
  import { CryptoService } from "../crypto/index.js";
3
+ import type { ConsolePrintOptions } from "./types.js";
3
4
  export interface CompletedSpan {
4
5
  readonly name: string;
5
6
  readonly traceId: string;
@@ -11,6 +12,20 @@ export interface CompletedSpan {
11
12
  readonly error: string | undefined;
12
13
  readonly attributes: Record<string, string | number | boolean>;
13
14
  }
14
- export declare function makeConsoleTracer(queue: Queue.Queue<CompletedSpan>, randomBytesSync: (size: number) => Uint8Array): Tracer.Tracer;
15
+ /**
16
+ * Renders a completed span for human-readable console output.
17
+ * Used when `pretty: true` is passed to a console telemetry factory.
18
+ */
19
+ export declare function formatPrettySpan(span: CompletedSpan): string;
20
+ export declare function makeConsoleTracer(queue: Queue.Queue<CompletedSpan>, _randomBytesSync: (size: number) => Uint8Array): Tracer.Tracer;
21
+ /**
22
+ * Creates the console tracer layer that drains completed spans to stdout.
23
+ * When `options.pretty` is `true`, spans are printed with Chalk coloring
24
+ * instead of as raw JSON lines.
25
+ *
26
+ * @param options - Console print options (`pretty`, default `false`)
27
+ */
28
+ export declare const makeConsoleTracerLayer: (options?: ConsolePrintOptions) => Layer.Layer<never, never, CryptoService>;
29
+ /** Console tracer layer using raw JSON output (`pretty: false`). */
15
30
  export declare const ConsoleTracerLayer: Layer.Layer<never, never, CryptoService>;
16
31
  //# sourceMappingURL=tracer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAU,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;CAC/D;AAgDD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EACjC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAC5C,MAAM,CAAC,MAAM,CAiEf;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAkBvE,CAAA"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/telemetry/tracer.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,EAAU,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;CAC/D;AAuBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAe5D;AAqED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EACjC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAC7C,MAAM,CAAC,MAAM,CAcf;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAS,mBAAwB,KAChC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAqBvC,CAAA;AAEH,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAA4B,CAAA"}