@archlast/server 0.0.1

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 (811) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -0
  3. package/dist/admin/auth.d.ts +79 -0
  4. package/dist/admin/auth.d.ts.map +1 -0
  5. package/dist/admin/auth.js +487 -0
  6. package/dist/admin/auth.js.map +1 -0
  7. package/dist/admin/schema.d.ts +240 -0
  8. package/dist/admin/schema.d.ts.map +1 -0
  9. package/dist/admin/schema.js +521 -0
  10. package/dist/admin/schema.js.map +1 -0
  11. package/dist/admin/seed.d.ts +9 -0
  12. package/dist/admin/seed.d.ts.map +1 -0
  13. package/dist/admin/seed.js +276 -0
  14. package/dist/admin/seed.js.map +1 -0
  15. package/dist/auth/api-key-resolver.d.ts +12 -0
  16. package/dist/auth/api-key-resolver.d.ts.map +1 -0
  17. package/dist/auth/api-key-resolver.js +24 -0
  18. package/dist/auth/api-key-resolver.js.map +1 -0
  19. package/dist/auth/archlast-auth-adapter.d.ts +22 -0
  20. package/dist/auth/archlast-auth-adapter.d.ts.map +1 -0
  21. package/dist/auth/archlast-auth-adapter.js +32 -0
  22. package/dist/auth/archlast-auth-adapter.js.map +1 -0
  23. package/dist/auth/audit.d.ts +65 -0
  24. package/dist/auth/audit.d.ts.map +1 -0
  25. package/dist/auth/audit.js +138 -0
  26. package/dist/auth/audit.js.map +1 -0
  27. package/dist/auth/better-auth-adapter.d.ts +35 -0
  28. package/dist/auth/better-auth-adapter.d.ts.map +1 -0
  29. package/dist/auth/better-auth-adapter.js +460 -0
  30. package/dist/auth/better-auth-adapter.js.map +1 -0
  31. package/dist/auth/better-auth-admin.d.ts +40 -0
  32. package/dist/auth/better-auth-admin.d.ts.map +1 -0
  33. package/dist/auth/better-auth-admin.js +80 -0
  34. package/dist/auth/better-auth-admin.js.map +1 -0
  35. package/dist/auth/better-auth-api-key-resolver.d.ts +39 -0
  36. package/dist/auth/better-auth-api-key-resolver.d.ts.map +1 -0
  37. package/dist/auth/better-auth-api-key-resolver.js +184 -0
  38. package/dist/auth/better-auth-api-key-resolver.js.map +1 -0
  39. package/dist/auth/better-auth-instance.d.ts +2464 -0
  40. package/dist/auth/better-auth-instance.d.ts.map +1 -0
  41. package/dist/auth/better-auth-instance.js +251 -0
  42. package/dist/auth/better-auth-instance.js.map +1 -0
  43. package/dist/auth/better-auth-seed.d.ts +23 -0
  44. package/dist/auth/better-auth-seed.d.ts.map +1 -0
  45. package/dist/auth/better-auth-seed.js +316 -0
  46. package/dist/auth/better-auth-seed.js.map +1 -0
  47. package/dist/auth/better-auth-session-adapter.d.ts +49 -0
  48. package/dist/auth/better-auth-session-adapter.d.ts.map +1 -0
  49. package/dist/auth/better-auth-session-adapter.js +254 -0
  50. package/dist/auth/better-auth-session-adapter.js.map +1 -0
  51. package/dist/auth/errors.d.ts +18 -0
  52. package/dist/auth/errors.d.ts.map +1 -0
  53. package/dist/auth/errors.js +27 -0
  54. package/dist/auth/errors.js.map +1 -0
  55. package/dist/auth/http/handlers.d.ts +17 -0
  56. package/dist/auth/http/handlers.d.ts.map +1 -0
  57. package/dist/auth/http/handlers.js +19 -0
  58. package/dist/auth/http/handlers.js.map +1 -0
  59. package/dist/auth/interfaces.d.ts +138 -0
  60. package/dist/auth/interfaces.d.ts.map +1 -0
  61. package/dist/auth/interfaces.js +105 -0
  62. package/dist/auth/interfaces.js.map +1 -0
  63. package/dist/auth/mfa/index.d.ts +6 -0
  64. package/dist/auth/mfa/index.d.ts.map +1 -0
  65. package/dist/auth/mfa/index.js +13 -0
  66. package/dist/auth/mfa/index.js.map +1 -0
  67. package/dist/auth/mfa/schema.d.ts +32 -0
  68. package/dist/auth/mfa/schema.d.ts.map +1 -0
  69. package/dist/auth/mfa/schema.js +35 -0
  70. package/dist/auth/mfa/schema.js.map +1 -0
  71. package/dist/auth/mfa/service.d.ts +65 -0
  72. package/dist/auth/mfa/service.d.ts.map +1 -0
  73. package/dist/auth/mfa/service.js +255 -0
  74. package/dist/auth/mfa/service.js.map +1 -0
  75. package/dist/auth/oauth-proxy.d.ts +58 -0
  76. package/dist/auth/oauth-proxy.d.ts.map +1 -0
  77. package/dist/auth/oauth-proxy.js +298 -0
  78. package/dist/auth/oauth-proxy.js.map +1 -0
  79. package/dist/auth/otp/index.d.ts +6 -0
  80. package/dist/auth/otp/index.d.ts.map +1 -0
  81. package/dist/auth/otp/index.js +13 -0
  82. package/dist/auth/otp/index.js.map +1 -0
  83. package/dist/auth/otp/schema.d.ts +32 -0
  84. package/dist/auth/otp/schema.d.ts.map +1 -0
  85. package/dist/auth/otp/schema.js +38 -0
  86. package/dist/auth/otp/schema.js.map +1 -0
  87. package/dist/auth/otp/service.d.ts +59 -0
  88. package/dist/auth/otp/service.d.ts.map +1 -0
  89. package/dist/auth/otp/service.js +183 -0
  90. package/dist/auth/otp/service.js.map +1 -0
  91. package/dist/auth/password-recovery.d.ts +61 -0
  92. package/dist/auth/password-recovery.d.ts.map +1 -0
  93. package/dist/auth/password-recovery.js +173 -0
  94. package/dist/auth/password-recovery.js.map +1 -0
  95. package/dist/auth/resolver.d.ts +29 -0
  96. package/dist/auth/resolver.d.ts.map +1 -0
  97. package/dist/auth/resolver.js +78 -0
  98. package/dist/auth/resolver.js.map +1 -0
  99. package/dist/auth/role-helpers.d.ts +56 -0
  100. package/dist/auth/role-helpers.d.ts.map +1 -0
  101. package/dist/auth/role-helpers.js +103 -0
  102. package/dist/auth/role-helpers.js.map +1 -0
  103. package/dist/auth/session-manager.d.ts +21 -0
  104. package/dist/auth/session-manager.d.ts.map +1 -0
  105. package/dist/auth/session-manager.js +30 -0
  106. package/dist/auth/session-manager.js.map +1 -0
  107. package/dist/auth/session-security.d.ts +14 -0
  108. package/dist/auth/session-security.d.ts.map +1 -0
  109. package/dist/auth/session-security.js +26 -0
  110. package/dist/auth/session-security.js.map +1 -0
  111. package/dist/auth/system/better-auth-schema.d.ts +144 -0
  112. package/dist/auth/system/better-auth-schema.d.ts.map +1 -0
  113. package/dist/auth/system/better-auth-schema.js +250 -0
  114. package/dist/auth/system/better-auth-schema.js.map +1 -0
  115. package/dist/auth/system/constants.d.ts +114 -0
  116. package/dist/auth/system/constants.d.ts.map +1 -0
  117. package/dist/auth/system/constants.js +205 -0
  118. package/dist/auth/system/constants.js.map +1 -0
  119. package/dist/auth/system/cookies.d.ts +83 -0
  120. package/dist/auth/system/cookies.d.ts.map +1 -0
  121. package/dist/auth/system/cookies.js +148 -0
  122. package/dist/auth/system/cookies.js.map +1 -0
  123. package/dist/auth/system/crypto.d.ts +53 -0
  124. package/dist/auth/system/crypto.d.ts.map +1 -0
  125. package/dist/auth/system/crypto.js +188 -0
  126. package/dist/auth/system/crypto.js.map +1 -0
  127. package/dist/auth/system/extended-schema.d.ts +145 -0
  128. package/dist/auth/system/extended-schema.d.ts.map +1 -0
  129. package/dist/auth/system/extended-schema.js +86 -0
  130. package/dist/auth/system/extended-schema.js.map +1 -0
  131. package/dist/auth/system/schema.d.ts +538 -0
  132. package/dist/auth/system/schema.d.ts.map +1 -0
  133. package/dist/auth/system/schema.js +306 -0
  134. package/dist/auth/system/schema.js.map +1 -0
  135. package/dist/cache/client.d.ts +77 -0
  136. package/dist/cache/client.d.ts.map +1 -0
  137. package/dist/cache/client.js +279 -0
  138. package/dist/cache/client.js.map +1 -0
  139. package/dist/cache/index.d.ts +9 -0
  140. package/dist/cache/index.d.ts.map +1 -0
  141. package/dist/cache/index.js +14 -0
  142. package/dist/cache/index.js.map +1 -0
  143. package/dist/cache/layers.d.ts +125 -0
  144. package/dist/cache/layers.d.ts.map +1 -0
  145. package/dist/cache/layers.js +354 -0
  146. package/dist/cache/layers.js.map +1 -0
  147. package/dist/cache/manager.d.ts +101 -0
  148. package/dist/cache/manager.d.ts.map +1 -0
  149. package/dist/cache/manager.js +423 -0
  150. package/dist/cache/manager.js.map +1 -0
  151. package/dist/cache/protocol.d.ts +115 -0
  152. package/dist/cache/protocol.d.ts.map +1 -0
  153. package/dist/cache/protocol.js +36 -0
  154. package/dist/cache/protocol.js.map +1 -0
  155. package/dist/cache/run-sidecar.d.ts +8 -0
  156. package/dist/cache/run-sidecar.d.ts.map +1 -0
  157. package/dist/cache/run-sidecar.js +71 -0
  158. package/dist/cache/run-sidecar.js.map +1 -0
  159. package/dist/cache/sidecar-client.d.ts +90 -0
  160. package/dist/cache/sidecar-client.d.ts.map +1 -0
  161. package/dist/cache/sidecar-client.js +437 -0
  162. package/dist/cache/sidecar-client.js.map +1 -0
  163. package/dist/cache/sidecar-server.d.ts +18 -0
  164. package/dist/cache/sidecar-server.d.ts.map +1 -0
  165. package/dist/cache/sidecar-server.js +90 -0
  166. package/dist/cache/sidecar-server.js.map +1 -0
  167. package/dist/cache/store.d.ts +90 -0
  168. package/dist/cache/store.d.ts.map +1 -0
  169. package/dist/cache/store.js +357 -0
  170. package/dist/cache/store.js.map +1 -0
  171. package/dist/cache/strategies.d.ts +52 -0
  172. package/dist/cache/strategies.d.ts.map +1 -0
  173. package/dist/cache/strategies.js +13 -0
  174. package/dist/cache/strategies.js.map +1 -0
  175. package/dist/cache/utils.d.ts +16 -0
  176. package/dist/cache/utils.d.ts.map +1 -0
  177. package/dist/cache/utils.js +101 -0
  178. package/dist/cache/utils.js.map +1 -0
  179. package/dist/config/index.d.ts +4 -0
  180. package/dist/config/index.d.ts.map +1 -0
  181. package/dist/config/index.js +20 -0
  182. package/dist/config/index.js.map +1 -0
  183. package/dist/config/paths.d.ts +16 -0
  184. package/dist/config/paths.d.ts.map +1 -0
  185. package/dist/config/paths.js +29 -0
  186. package/dist/config/paths.js.map +1 -0
  187. package/dist/config/schema.d.ts +42 -0
  188. package/dist/config/schema.d.ts.map +1 -0
  189. package/dist/config/schema.js +62 -0
  190. package/dist/config/schema.js.map +1 -0
  191. package/dist/config/service.d.ts +56 -0
  192. package/dist/config/service.d.ts.map +1 -0
  193. package/dist/config/service.js +108 -0
  194. package/dist/config/service.js.map +1 -0
  195. package/dist/context.d.ts +48 -0
  196. package/dist/context.d.ts.map +1 -0
  197. package/dist/context.js +6 -0
  198. package/dist/context.js.map +1 -0
  199. package/dist/controllers/admin/admin-tokens.controller.d.ts +159 -0
  200. package/dist/controllers/admin/admin-tokens.controller.d.ts.map +1 -0
  201. package/dist/controllers/admin/admin-tokens.controller.js +138 -0
  202. package/dist/controllers/admin/admin-tokens.controller.js.map +1 -0
  203. package/dist/controllers/admin/api-keys.controller.d.ts +187 -0
  204. package/dist/controllers/admin/api-keys.controller.d.ts.map +1 -0
  205. package/dist/controllers/admin/api-keys.controller.js +124 -0
  206. package/dist/controllers/admin/api-keys.controller.js.map +1 -0
  207. package/dist/controllers/admin/app-users.controller.d.ts +376 -0
  208. package/dist/controllers/admin/app-users.controller.d.ts.map +1 -0
  209. package/dist/controllers/admin/app-users.controller.js +348 -0
  210. package/dist/controllers/admin/app-users.controller.js.map +1 -0
  211. package/dist/controllers/admin/auth.controller.d.ts +285 -0
  212. package/dist/controllers/admin/auth.controller.d.ts.map +1 -0
  213. package/dist/controllers/admin/auth.controller.js +221 -0
  214. package/dist/controllers/admin/auth.controller.js.map +1 -0
  215. package/dist/controllers/admin/backup.controller.d.ts +250 -0
  216. package/dist/controllers/admin/backup.controller.d.ts.map +1 -0
  217. package/dist/controllers/admin/backup.controller.js +316 -0
  218. package/dist/controllers/admin/backup.controller.js.map +1 -0
  219. package/dist/controllers/admin/data.controller.d.ts +250 -0
  220. package/dist/controllers/admin/data.controller.d.ts.map +1 -0
  221. package/dist/controllers/admin/data.controller.js +240 -0
  222. package/dist/controllers/admin/data.controller.js.map +1 -0
  223. package/dist/controllers/admin/provisioning.controller.d.ts +77 -0
  224. package/dist/controllers/admin/provisioning.controller.d.ts.map +1 -0
  225. package/dist/controllers/admin/provisioning.controller.js +141 -0
  226. package/dist/controllers/admin/provisioning.controller.js.map +1 -0
  227. package/dist/controllers/admin/settings.controller.d.ts +153 -0
  228. package/dist/controllers/admin/settings.controller.d.ts.map +1 -0
  229. package/dist/controllers/admin/settings.controller.js +120 -0
  230. package/dist/controllers/admin/settings.controller.js.map +1 -0
  231. package/dist/controllers/admin/setup.controller.d.ts +104 -0
  232. package/dist/controllers/admin/setup.controller.d.ts.map +1 -0
  233. package/dist/controllers/admin/setup.controller.js +113 -0
  234. package/dist/controllers/admin/setup.controller.js.map +1 -0
  235. package/dist/controllers/admin/tenants.controller.d.ts +275 -0
  236. package/dist/controllers/admin/tenants.controller.d.ts.map +1 -0
  237. package/dist/controllers/admin/tenants.controller.js +206 -0
  238. package/dist/controllers/admin/tenants.controller.js.map +1 -0
  239. package/dist/controllers/admin/users.controller.d.ts +253 -0
  240. package/dist/controllers/admin/users.controller.d.ts.map +1 -0
  241. package/dist/controllers/admin/users.controller.js +186 -0
  242. package/dist/controllers/admin/users.controller.js.map +1 -0
  243. package/dist/controllers/auth.controller.d.ts +308 -0
  244. package/dist/controllers/auth.controller.d.ts.map +1 -0
  245. package/dist/controllers/auth.controller.js +305 -0
  246. package/dist/controllers/auth.controller.js.map +1 -0
  247. package/dist/controllers/crud-generator.controller.d.ts +83 -0
  248. package/dist/controllers/crud-generator.controller.d.ts.map +1 -0
  249. package/dist/controllers/crud-generator.controller.js +201 -0
  250. package/dist/controllers/crud-generator.controller.js.map +1 -0
  251. package/dist/controllers/deployment-events.controller.d.ts +74 -0
  252. package/dist/controllers/deployment-events.controller.d.ts.map +1 -0
  253. package/dist/controllers/deployment-events.controller.js +143 -0
  254. package/dist/controllers/deployment-events.controller.js.map +1 -0
  255. package/dist/controllers/index.d.ts +18 -0
  256. package/dist/controllers/index.d.ts.map +1 -0
  257. package/dist/controllers/index.js +42 -0
  258. package/dist/controllers/index.js.map +1 -0
  259. package/dist/controllers/introspection.controller.d.ts +430 -0
  260. package/dist/controllers/introspection.controller.d.ts.map +1 -0
  261. package/dist/controllers/introspection.controller.js +358 -0
  262. package/dist/controllers/introspection.controller.js.map +1 -0
  263. package/dist/controllers/invite.controller.d.ts +218 -0
  264. package/dist/controllers/invite.controller.d.ts.map +1 -0
  265. package/dist/controllers/invite.controller.js +218 -0
  266. package/dist/controllers/invite.controller.js.map +1 -0
  267. package/dist/controllers/mfa.controller.d.ts +211 -0
  268. package/dist/controllers/mfa.controller.d.ts.map +1 -0
  269. package/dist/controllers/mfa.controller.js +155 -0
  270. package/dist/controllers/mfa.controller.js.map +1 -0
  271. package/dist/controllers/otp.controller.d.ts +220 -0
  272. package/dist/controllers/otp.controller.d.ts.map +1 -0
  273. package/dist/controllers/otp.controller.js +223 -0
  274. package/dist/controllers/otp.controller.js.map +1 -0
  275. package/dist/controllers/storage.controller.d.ts +297 -0
  276. package/dist/controllers/storage.controller.d.ts.map +1 -0
  277. package/dist/controllers/storage.controller.js +304 -0
  278. package/dist/controllers/storage.controller.js.map +1 -0
  279. package/dist/controllers/system.controller.d.ts +176 -0
  280. package/dist/controllers/system.controller.d.ts.map +1 -0
  281. package/dist/controllers/system.controller.js +222 -0
  282. package/dist/controllers/system.controller.js.map +1 -0
  283. package/dist/controllers/tenant.controller.d.ts +316 -0
  284. package/dist/controllers/tenant.controller.d.ts.map +1 -0
  285. package/dist/controllers/tenant.controller.js +269 -0
  286. package/dist/controllers/tenant.controller.js.map +1 -0
  287. package/dist/db/cachedclient.d.ts +69 -0
  288. package/dist/db/cachedclient.d.ts.map +1 -0
  289. package/dist/db/cachedclient.js +331 -0
  290. package/dist/db/cachedclient.js.map +1 -0
  291. package/dist/db/distributed-client.d.ts +82 -0
  292. package/dist/db/distributed-client.d.ts.map +1 -0
  293. package/dist/db/distributed-client.js +477 -0
  294. package/dist/db/distributed-client.js.map +1 -0
  295. package/dist/db/factory.d.ts +19 -0
  296. package/dist/db/factory.d.ts.map +1 -0
  297. package/dist/db/factory.js +44 -0
  298. package/dist/db/factory.js.map +1 -0
  299. package/dist/db/interfaces.d.ts +67 -0
  300. package/dist/db/interfaces.d.ts.map +1 -0
  301. package/dist/db/interfaces.js +3 -0
  302. package/dist/db/interfaces.js.map +1 -0
  303. package/dist/db/socket-client.d.ts +122 -0
  304. package/dist/db/socket-client.d.ts.map +1 -0
  305. package/dist/db/socket-client.js +1092 -0
  306. package/dist/db/socket-client.js.map +1 -0
  307. package/dist/db/store-config.d.ts +19 -0
  308. package/dist/db/store-config.d.ts.map +1 -0
  309. package/dist/db/store-config.js +65 -0
  310. package/dist/db/store-config.js.map +1 -0
  311. package/dist/deployment/function-extractor.d.ts +11 -0
  312. package/dist/deployment/function-extractor.d.ts.map +1 -0
  313. package/dist/deployment/function-extractor.js +101 -0
  314. package/dist/deployment/function-extractor.js.map +1 -0
  315. package/dist/deployment/handler.d.ts +174 -0
  316. package/dist/deployment/handler.d.ts.map +1 -0
  317. package/dist/deployment/handler.js +1437 -0
  318. package/dist/deployment/handler.js.map +1 -0
  319. package/dist/deployment/persistence.d.ts +97 -0
  320. package/dist/deployment/persistence.d.ts.map +1 -0
  321. package/dist/deployment/persistence.js +238 -0
  322. package/dist/deployment/persistence.js.map +1 -0
  323. package/dist/deployment/protocol.d.ts +34 -0
  324. package/dist/deployment/protocol.d.ts.map +1 -0
  325. package/dist/deployment/protocol.js +7 -0
  326. package/dist/deployment/protocol.js.map +1 -0
  327. package/dist/di/container.d.ts +58 -0
  328. package/dist/di/container.d.ts.map +1 -0
  329. package/dist/di/container.js +121 -0
  330. package/dist/di/container.js.map +1 -0
  331. package/dist/di/decorators.d.ts +57 -0
  332. package/dist/di/decorators.d.ts.map +1 -0
  333. package/dist/di/decorators.js +80 -0
  334. package/dist/di/decorators.js.map +1 -0
  335. package/dist/di/index.d.ts +10 -0
  336. package/dist/di/index.d.ts.map +1 -0
  337. package/dist/di/index.js +21 -0
  338. package/dist/di/index.js.map +1 -0
  339. package/dist/di/resolver.d.ts +26 -0
  340. package/dist/di/resolver.d.ts.map +1 -0
  341. package/dist/di/resolver.js +32 -0
  342. package/dist/di/resolver.js.map +1 -0
  343. package/dist/docker/compose.d.ts +3 -0
  344. package/dist/docker/compose.d.ts.map +1 -0
  345. package/dist/docker/compose.js +106 -0
  346. package/dist/docker/compose.js.map +1 -0
  347. package/dist/docker/index.d.ts +4 -0
  348. package/dist/docker/index.d.ts.map +1 -0
  349. package/dist/docker/index.js +8 -0
  350. package/dist/docker/index.js.map +1 -0
  351. package/dist/docker/manager.d.ts +14 -0
  352. package/dist/docker/manager.d.ts.map +1 -0
  353. package/dist/docker/manager.js +76 -0
  354. package/dist/docker/manager.js.map +1 -0
  355. package/dist/docker/types.d.ts +18 -0
  356. package/dist/docker/types.d.ts.map +1 -0
  357. package/dist/docker/types.js +3 -0
  358. package/dist/docker/types.js.map +1 -0
  359. package/dist/email/index.d.ts +6 -0
  360. package/dist/email/index.d.ts.map +1 -0
  361. package/dist/email/index.js +25 -0
  362. package/dist/email/index.js.map +1 -0
  363. package/dist/email/service.d.ts +89 -0
  364. package/dist/email/service.d.ts.map +1 -0
  365. package/dist/email/service.js +215 -0
  366. package/dist/email/service.js.map +1 -0
  367. package/dist/email/templates/MagicLinkEmail.d.ts +8 -0
  368. package/dist/email/templates/MagicLinkEmail.d.ts.map +1 -0
  369. package/dist/email/templates/MagicLinkEmail.js +84 -0
  370. package/dist/email/templates/MagicLinkEmail.js.map +1 -0
  371. package/dist/email/templates/OtpEmail.d.ts +8 -0
  372. package/dist/email/templates/OtpEmail.d.ts.map +1 -0
  373. package/dist/email/templates/OtpEmail.js +72 -0
  374. package/dist/email/templates/OtpEmail.js.map +1 -0
  375. package/dist/email/templates/PasswordResetEmail.d.ts +9 -0
  376. package/dist/email/templates/PasswordResetEmail.d.ts.map +1 -0
  377. package/dist/email/templates/PasswordResetEmail.js +103 -0
  378. package/dist/email/templates/PasswordResetEmail.js.map +1 -0
  379. package/dist/email/templates/WelcomeEmail.d.ts +8 -0
  380. package/dist/email/templates/WelcomeEmail.d.ts.map +1 -0
  381. package/dist/email/templates/WelcomeEmail.js +94 -0
  382. package/dist/email/templates/WelcomeEmail.js.map +1 -0
  383. package/dist/email/templates/index.d.ts +9 -0
  384. package/dist/email/templates/index.d.ts.map +1 -0
  385. package/dist/email/templates/index.js +16 -0
  386. package/dist/email/templates/index.js.map +1 -0
  387. package/dist/engine/context.d.ts +9 -0
  388. package/dist/engine/context.d.ts.map +1 -0
  389. package/dist/engine/context.js +9 -0
  390. package/dist/engine/context.js.map +1 -0
  391. package/dist/engine/runner.d.ts +115 -0
  392. package/dist/engine/runner.d.ts.map +1 -0
  393. package/dist/engine/runner.js +617 -0
  394. package/dist/engine/runner.js.map +1 -0
  395. package/dist/functions/built-in/auth-apikey.d.ts +21 -0
  396. package/dist/functions/built-in/auth-apikey.d.ts.map +1 -0
  397. package/dist/functions/built-in/auth-apikey.js +344 -0
  398. package/dist/functions/built-in/auth-apikey.js.map +1 -0
  399. package/dist/functions/built-in/auth-email.d.ts +3 -0
  400. package/dist/functions/built-in/auth-email.d.ts.map +1 -0
  401. package/dist/functions/built-in/auth-email.js +63 -0
  402. package/dist/functions/built-in/auth-email.js.map +1 -0
  403. package/dist/functions/built-in/auth-invite.d.ts +5 -0
  404. package/dist/functions/built-in/auth-invite.d.ts.map +1 -0
  405. package/dist/functions/built-in/auth-invite.js +105 -0
  406. package/dist/functions/built-in/auth-invite.js.map +1 -0
  407. package/dist/functions/built-in/auth-password.d.ts +4 -0
  408. package/dist/functions/built-in/auth-password.d.ts.map +1 -0
  409. package/dist/functions/built-in/auth-password.js +107 -0
  410. package/dist/functions/built-in/auth-password.js.map +1 -0
  411. package/dist/functions/built-in/auth-session.d.ts +18 -0
  412. package/dist/functions/built-in/auth-session.d.ts.map +1 -0
  413. package/dist/functions/built-in/auth-session.js +221 -0
  414. package/dist/functions/built-in/auth-session.js.map +1 -0
  415. package/dist/functions/built-in/auth-signin.d.ts +20 -0
  416. package/dist/functions/built-in/auth-signin.d.ts.map +1 -0
  417. package/dist/functions/built-in/auth-signin.js +198 -0
  418. package/dist/functions/built-in/auth-signin.js.map +1 -0
  419. package/dist/functions/built-in/auth-signout.d.ts +18 -0
  420. package/dist/functions/built-in/auth-signout.d.ts.map +1 -0
  421. package/dist/functions/built-in/auth-signout.js +78 -0
  422. package/dist/functions/built-in/auth-signout.js.map +1 -0
  423. package/dist/functions/built-in/auth-signup.d.ts +21 -0
  424. package/dist/functions/built-in/auth-signup.d.ts.map +1 -0
  425. package/dist/functions/built-in/auth-signup.js +147 -0
  426. package/dist/functions/built-in/auth-signup.js.map +1 -0
  427. package/dist/functions/built-in/auth-tenant.d.ts +3 -0
  428. package/dist/functions/built-in/auth-tenant.d.ts.map +1 -0
  429. package/dist/functions/built-in/auth-tenant.js +86 -0
  430. package/dist/functions/built-in/auth-tenant.js.map +1 -0
  431. package/dist/functions/built-in/index.d.ts +55 -0
  432. package/dist/functions/built-in/index.d.ts.map +1 -0
  433. package/dist/functions/built-in/index.js +181 -0
  434. package/dist/functions/built-in/index.js.map +1 -0
  435. package/dist/functions/built-in/system-cache.d.ts +10 -0
  436. package/dist/functions/built-in/system-cache.d.ts.map +1 -0
  437. package/dist/functions/built-in/system-cache.js +98 -0
  438. package/dist/functions/built-in/system-cache.js.map +1 -0
  439. package/dist/functions/built-in/system-data.d.ts +13 -0
  440. package/dist/functions/built-in/system-data.d.ts.map +1 -0
  441. package/dist/functions/built-in/system-data.js +133 -0
  442. package/dist/functions/built-in/system-data.js.map +1 -0
  443. package/dist/functions/built-in/system-jobs.d.ts +22 -0
  444. package/dist/functions/built-in/system-jobs.d.ts.map +1 -0
  445. package/dist/functions/built-in/system-jobs.js +82 -0
  446. package/dist/functions/built-in/system-jobs.js.map +1 -0
  447. package/dist/functions/built-in/system-notifications.d.ts +41 -0
  448. package/dist/functions/built-in/system-notifications.d.ts.map +1 -0
  449. package/dist/functions/built-in/system-notifications.js +72 -0
  450. package/dist/functions/built-in/system-notifications.js.map +1 -0
  451. package/dist/functions/built-in/system-performance.d.ts +25 -0
  452. package/dist/functions/built-in/system-performance.d.ts.map +1 -0
  453. package/dist/functions/built-in/system-performance.js +83 -0
  454. package/dist/functions/built-in/system-performance.js.map +1 -0
  455. package/dist/functions/built-in-registry.d.ts +101 -0
  456. package/dist/functions/built-in-registry.d.ts.map +1 -0
  457. package/dist/functions/built-in-registry.js +165 -0
  458. package/dist/functions/built-in-registry.js.map +1 -0
  459. package/dist/functions/definition.d.ts +206 -0
  460. package/dist/functions/definition.d.ts.map +1 -0
  461. package/dist/functions/definition.js +178 -0
  462. package/dist/functions/definition.js.map +1 -0
  463. package/dist/functions/types.d.ts +151 -0
  464. package/dist/functions/types.d.ts.map +1 -0
  465. package/dist/functions/types.js +3 -0
  466. package/dist/functions/types.js.map +1 -0
  467. package/dist/http/context-helper.d.ts +60 -0
  468. package/dist/http/context-helper.d.ts.map +1 -0
  469. package/dist/http/context-helper.js +161 -0
  470. package/dist/http/context-helper.js.map +1 -0
  471. package/dist/http/definition.d.ts +76 -0
  472. package/dist/http/definition.d.ts.map +1 -0
  473. package/dist/http/definition.js +46 -0
  474. package/dist/http/definition.js.map +1 -0
  475. package/dist/http/index.d.ts +7 -0
  476. package/dist/http/index.d.ts.map +1 -0
  477. package/dist/http/index.js +12 -0
  478. package/dist/http/index.js.map +1 -0
  479. package/dist/http/plugins/auth.d.ts +71 -0
  480. package/dist/http/plugins/auth.d.ts.map +1 -0
  481. package/dist/http/plugins/auth.js +67 -0
  482. package/dist/http/plugins/auth.js.map +1 -0
  483. package/dist/http/plugins/better-auth.d.ts +67 -0
  484. package/dist/http/plugins/better-auth.d.ts.map +1 -0
  485. package/dist/http/plugins/better-auth.js +48 -0
  486. package/dist/http/plugins/better-auth.js.map +1 -0
  487. package/dist/http/router.d.ts +59 -0
  488. package/dist/http/router.d.ts.map +1 -0
  489. package/dist/http/router.js +371 -0
  490. package/dist/http/router.js.map +1 -0
  491. package/dist/http/server.d.ts +15 -0
  492. package/dist/http/server.d.ts.map +1 -0
  493. package/dist/http/server.js +217 -0
  494. package/dist/http/server.js.map +1 -0
  495. package/dist/http/types.d.ts +142 -0
  496. package/dist/http/types.d.ts.map +1 -0
  497. package/dist/http/types.js +7 -0
  498. package/dist/http/types.js.map +1 -0
  499. package/dist/index.d.mts +2 -0
  500. package/dist/index.d.mts.map +1 -0
  501. package/dist/index.mjs +116 -0
  502. package/dist/index.mjs.map +1 -0
  503. package/dist/ipc/run-sidecar.d.ts +8 -0
  504. package/dist/ipc/run-sidecar.d.ts.map +1 -0
  505. package/dist/ipc/run-sidecar.js +127 -0
  506. package/dist/ipc/run-sidecar.js.map +1 -0
  507. package/dist/ipc/socket-bridge.d.ts +114 -0
  508. package/dist/ipc/socket-bridge.d.ts.map +1 -0
  509. package/dist/ipc/socket-bridge.js +724 -0
  510. package/dist/ipc/socket-bridge.js.map +1 -0
  511. package/dist/jobs/index.d.ts +7 -0
  512. package/dist/jobs/index.d.ts.map +1 -0
  513. package/dist/jobs/index.js +10 -0
  514. package/dist/jobs/index.js.map +1 -0
  515. package/dist/jobs/queue.d.ts +62 -0
  516. package/dist/jobs/queue.d.ts.map +1 -0
  517. package/dist/jobs/queue.js +192 -0
  518. package/dist/jobs/queue.js.map +1 -0
  519. package/dist/jobs/run-scheduler.d.ts +2 -0
  520. package/dist/jobs/run-scheduler.d.ts.map +1 -0
  521. package/dist/jobs/run-scheduler.js +245 -0
  522. package/dist/jobs/run-scheduler.js.map +1 -0
  523. package/dist/jobs/run-worker.d.ts +2 -0
  524. package/dist/jobs/run-worker.d.ts.map +1 -0
  525. package/dist/jobs/run-worker.js +123 -0
  526. package/dist/jobs/run-worker.js.map +1 -0
  527. package/dist/jobs/runtime-loader.d.ts +14 -0
  528. package/dist/jobs/runtime-loader.d.ts.map +1 -0
  529. package/dist/jobs/runtime-loader.js +122 -0
  530. package/dist/jobs/runtime-loader.js.map +1 -0
  531. package/dist/jobs/scheduler-client.d.ts +33 -0
  532. package/dist/jobs/scheduler-client.d.ts.map +1 -0
  533. package/dist/jobs/scheduler-client.js +69 -0
  534. package/dist/jobs/scheduler-client.js.map +1 -0
  535. package/dist/jobs/scheduler.d.ts +73 -0
  536. package/dist/jobs/scheduler.d.ts.map +1 -0
  537. package/dist/jobs/scheduler.js +297 -0
  538. package/dist/jobs/scheduler.js.map +1 -0
  539. package/dist/jobs/worker-thread.d.ts +27 -0
  540. package/dist/jobs/worker-thread.d.ts.map +1 -0
  541. package/dist/jobs/worker-thread.js +173 -0
  542. package/dist/jobs/worker-thread.js.map +1 -0
  543. package/dist/jobs/worker.d.ts +30 -0
  544. package/dist/jobs/worker.d.ts.map +1 -0
  545. package/dist/jobs/worker.js +262 -0
  546. package/dist/jobs/worker.js.map +1 -0
  547. package/dist/jobs/ws-client.d.ts +23 -0
  548. package/dist/jobs/ws-client.d.ts.map +1 -0
  549. package/dist/jobs/ws-client.js +105 -0
  550. package/dist/jobs/ws-client.js.map +1 -0
  551. package/dist/linq/async-enumerable.d.ts +91 -0
  552. package/dist/linq/async-enumerable.d.ts.map +1 -0
  553. package/dist/linq/async-enumerable.js +176 -0
  554. package/dist/linq/async-enumerable.js.map +1 -0
  555. package/dist/linq/enumerable.d.ts +94 -0
  556. package/dist/linq/enumerable.d.ts.map +1 -0
  557. package/dist/linq/enumerable.js +210 -0
  558. package/dist/linq/enumerable.js.map +1 -0
  559. package/dist/linq/index.d.ts +25 -0
  560. package/dist/linq/index.d.ts.map +1 -0
  561. package/dist/linq/index.js +27 -0
  562. package/dist/linq/index.js.map +1 -0
  563. package/dist/linq/interfaces.d.ts +23 -0
  564. package/dist/linq/interfaces.d.ts.map +1 -0
  565. package/dist/linq/interfaces.js +3 -0
  566. package/dist/linq/interfaces.js.map +1 -0
  567. package/dist/logging/logger.d.ts +85 -0
  568. package/dist/logging/logger.d.ts.map +1 -0
  569. package/dist/logging/logger.js +217 -0
  570. package/dist/logging/logger.js.map +1 -0
  571. package/dist/query/builder.d.ts +91 -0
  572. package/dist/query/builder.d.ts.map +1 -0
  573. package/dist/query/builder.js +103 -0
  574. package/dist/query/builder.js.map +1 -0
  575. package/dist/query/types.d.ts +112 -0
  576. package/dist/query/types.d.ts.map +1 -0
  577. package/dist/query/types.js +3 -0
  578. package/dist/query/types.js.map +1 -0
  579. package/dist/reactivity/graph.d.ts +8 -0
  580. package/dist/reactivity/graph.d.ts.map +1 -0
  581. package/dist/reactivity/graph.js +51 -0
  582. package/dist/reactivity/graph.js.map +1 -0
  583. package/dist/repository/db-set.d.ts +220 -0
  584. package/dist/repository/db-set.d.ts.map +1 -0
  585. package/dist/repository/db-set.js +515 -0
  586. package/dist/repository/db-set.js.map +1 -0
  587. package/dist/repository/ef-core.d.ts +177 -0
  588. package/dist/repository/ef-core.d.ts.map +1 -0
  589. package/dist/repository/ef-core.js +404 -0
  590. package/dist/repository/ef-core.js.map +1 -0
  591. package/dist/repository/factory.d.ts +117 -0
  592. package/dist/repository/factory.d.ts.map +1 -0
  593. package/dist/repository/factory.js +183 -0
  594. package/dist/repository/factory.js.map +1 -0
  595. package/dist/repository/interfaces.d.ts +449 -0
  596. package/dist/repository/interfaces.d.ts.map +1 -0
  597. package/dist/repository/interfaces.js +21 -0
  598. package/dist/repository/interfaces.js.map +1 -0
  599. package/dist/repository/provider.d.ts +16 -0
  600. package/dist/repository/provider.d.ts.map +1 -0
  601. package/dist/repository/provider.js +674 -0
  602. package/dist/repository/provider.js.map +1 -0
  603. package/dist/repository/queryable.d.ts +111 -0
  604. package/dist/repository/queryable.d.ts.map +1 -0
  605. package/dist/repository/queryable.js +566 -0
  606. package/dist/repository/queryable.js.map +1 -0
  607. package/dist/rpc/adapter.d.ts +18 -0
  608. package/dist/rpc/adapter.d.ts.map +1 -0
  609. package/dist/rpc/adapter.js +101 -0
  610. package/dist/rpc/adapter.js.map +1 -0
  611. package/dist/rpc/router.d.ts +82 -0
  612. package/dist/rpc/router.d.ts.map +1 -0
  613. package/dist/rpc/router.js +177 -0
  614. package/dist/rpc/router.js.map +1 -0
  615. package/dist/schema/definition.d.ts +51 -0
  616. package/dist/schema/definition.d.ts.map +1 -0
  617. package/dist/schema/definition.js +79 -0
  618. package/dist/schema/definition.js.map +1 -0
  619. package/dist/schema/input-types.d.ts +88 -0
  620. package/dist/schema/input-types.d.ts.map +1 -0
  621. package/dist/schema/input-types.js +81 -0
  622. package/dist/schema/input-types.js.map +1 -0
  623. package/dist/schema/modifiers.d.ts +173 -0
  624. package/dist/schema/modifiers.d.ts.map +1 -0
  625. package/dist/schema/modifiers.js +218 -0
  626. package/dist/schema/modifiers.js.map +1 -0
  627. package/dist/schema/relationship-types.d.ts +109 -0
  628. package/dist/schema/relationship-types.d.ts.map +1 -0
  629. package/dist/schema/relationship-types.js +11 -0
  630. package/dist/schema/relationship-types.js.map +1 -0
  631. package/dist/schema/type-helpers.d.ts +105 -0
  632. package/dist/schema/type-helpers.d.ts.map +1 -0
  633. package/dist/schema/type-helpers.js +215 -0
  634. package/dist/schema/type-helpers.js.map +1 -0
  635. package/dist/schema/types.d.ts +144 -0
  636. package/dist/schema/types.d.ts.map +1 -0
  637. package/dist/schema/types.js +12 -0
  638. package/dist/schema/types.js.map +1 -0
  639. package/dist/schema/validators.d.ts +127 -0
  640. package/dist/schema/validators.d.ts.map +1 -0
  641. package/dist/schema/validators.js +164 -0
  642. package/dist/schema/validators.js.map +1 -0
  643. package/dist/services/admin/app-users.service.d.ts +138 -0
  644. package/dist/services/admin/app-users.service.d.ts.map +1 -0
  645. package/dist/services/admin/app-users.service.js +435 -0
  646. package/dist/services/admin/app-users.service.js.map +1 -0
  647. package/dist/services/admin/auth.service.d.ts +104 -0
  648. package/dist/services/admin/auth.service.d.ts.map +1 -0
  649. package/dist/services/admin/auth.service.js +208 -0
  650. package/dist/services/admin/auth.service.js.map +1 -0
  651. package/dist/services/admin/backup/BackupOrchestrator.d.ts +38 -0
  652. package/dist/services/admin/backup/BackupOrchestrator.d.ts.map +1 -0
  653. package/dist/services/admin/backup/BackupOrchestrator.js +350 -0
  654. package/dist/services/admin/backup/BackupOrchestrator.js.map +1 -0
  655. package/dist/services/admin/backup/DataStreamer.d.ts +11 -0
  656. package/dist/services/admin/backup/DataStreamer.d.ts.map +1 -0
  657. package/dist/services/admin/backup/DataStreamer.js +85 -0
  658. package/dist/services/admin/backup/DataStreamer.js.map +1 -0
  659. package/dist/services/admin/backup/LegacyAdapter.d.ts +28 -0
  660. package/dist/services/admin/backup/LegacyAdapter.d.ts.map +1 -0
  661. package/dist/services/admin/backup/LegacyAdapter.js +35 -0
  662. package/dist/services/admin/backup/LegacyAdapter.js.map +1 -0
  663. package/dist/services/admin/backup/SqliteGenerator.d.ts +15 -0
  664. package/dist/services/admin/backup/SqliteGenerator.d.ts.map +1 -0
  665. package/dist/services/admin/backup/SqliteGenerator.js +152 -0
  666. package/dist/services/admin/backup/SqliteGenerator.js.map +1 -0
  667. package/dist/services/admin/backup/StorageStreamer.d.ts +17 -0
  668. package/dist/services/admin/backup/StorageStreamer.d.ts.map +1 -0
  669. package/dist/services/admin/backup/StorageStreamer.js +117 -0
  670. package/dist/services/admin/backup/StorageStreamer.js.map +1 -0
  671. package/dist/services/admin/backup/ZipComposer.d.ts +17 -0
  672. package/dist/services/admin/backup/ZipComposer.d.ts.map +1 -0
  673. package/dist/services/admin/backup/ZipComposer.js +95 -0
  674. package/dist/services/admin/backup/ZipComposer.js.map +1 -0
  675. package/dist/services/admin/backup/ZipExtractor.d.ts +24 -0
  676. package/dist/services/admin/backup/ZipExtractor.d.ts.map +1 -0
  677. package/dist/services/admin/backup/ZipExtractor.js +135 -0
  678. package/dist/services/admin/backup/ZipExtractor.js.map +1 -0
  679. package/dist/services/admin/backup/index.d.ts +9 -0
  680. package/dist/services/admin/backup/index.d.ts.map +1 -0
  681. package/dist/services/admin/backup/index.js +18 -0
  682. package/dist/services/admin/backup/index.js.map +1 -0
  683. package/dist/services/admin/backup/types.d.ts +48 -0
  684. package/dist/services/admin/backup/types.d.ts.map +1 -0
  685. package/dist/services/admin/backup/types.js +3 -0
  686. package/dist/services/admin/backup/types.js.map +1 -0
  687. package/dist/services/admin/backup.service.d.ts +117 -0
  688. package/dist/services/admin/backup.service.d.ts.map +1 -0
  689. package/dist/services/admin/backup.service.js +709 -0
  690. package/dist/services/admin/backup.service.js.map +1 -0
  691. package/dist/services/admin/data.service.d.ts +109 -0
  692. package/dist/services/admin/data.service.d.ts.map +1 -0
  693. package/dist/services/admin/data.service.js +734 -0
  694. package/dist/services/admin/data.service.js.map +1 -0
  695. package/dist/services/admin/tenants.service.d.ts +99 -0
  696. package/dist/services/admin/tenants.service.d.ts.map +1 -0
  697. package/dist/services/admin/tenants.service.js +173 -0
  698. package/dist/services/admin/tenants.service.js.map +1 -0
  699. package/dist/services/auth.service.d.ts +155 -0
  700. package/dist/services/auth.service.d.ts.map +1 -0
  701. package/dist/services/auth.service.js +401 -0
  702. package/dist/services/auth.service.js.map +1 -0
  703. package/dist/services/introspection.service.d.ts +262 -0
  704. package/dist/services/introspection.service.d.ts.map +1 -0
  705. package/dist/services/introspection.service.js +400 -0
  706. package/dist/services/introspection.service.js.map +1 -0
  707. package/dist/services/invite.service.d.ts +87 -0
  708. package/dist/services/invite.service.d.ts.map +1 -0
  709. package/dist/services/invite.service.js +216 -0
  710. package/dist/services/invite.service.js.map +1 -0
  711. package/dist/services/storage.service.d.ts +79 -0
  712. package/dist/services/storage.service.d.ts.map +1 -0
  713. package/dist/services/storage.service.js +209 -0
  714. package/dist/services/storage.service.js.map +1 -0
  715. package/dist/services/system.service.d.ts +60 -0
  716. package/dist/services/system.service.d.ts.map +1 -0
  717. package/dist/services/system.service.js +176 -0
  718. package/dist/services/system.service.js.map +1 -0
  719. package/dist/services/tenant.service.d.ts +112 -0
  720. package/dist/services/tenant.service.d.ts.map +1 -0
  721. package/dist/services/tenant.service.js +359 -0
  722. package/dist/services/tenant.service.js.map +1 -0
  723. package/dist/settings/index.d.ts +6 -0
  724. package/dist/settings/index.d.ts.map +1 -0
  725. package/dist/settings/index.js +13 -0
  726. package/dist/settings/index.js.map +1 -0
  727. package/dist/settings/schema.d.ts +39 -0
  728. package/dist/settings/schema.d.ts.map +1 -0
  729. package/dist/settings/schema.js +41 -0
  730. package/dist/settings/schema.js.map +1 -0
  731. package/dist/settings/service.d.ts +28 -0
  732. package/dist/settings/service.d.ts.map +1 -0
  733. package/dist/settings/service.js +133 -0
  734. package/dist/settings/service.js.map +1 -0
  735. package/dist/startup/bootstrap.d.ts +13 -0
  736. package/dist/startup/bootstrap.d.ts.map +1 -0
  737. package/dist/startup/bootstrap.js +262 -0
  738. package/dist/startup/bootstrap.js.map +1 -0
  739. package/dist/startup/cluster-manager.d.ts +59 -0
  740. package/dist/startup/cluster-manager.d.ts.map +1 -0
  741. package/dist/startup/cluster-manager.js +238 -0
  742. package/dist/startup/cluster-manager.js.map +1 -0
  743. package/dist/startup/process-manager.d.ts +46 -0
  744. package/dist/startup/process-manager.d.ts.map +1 -0
  745. package/dist/startup/process-manager.js +288 -0
  746. package/dist/startup/process-manager.js.map +1 -0
  747. package/dist/startup/processes.d.mts +15 -0
  748. package/dist/startup/processes.d.mts.map +1 -0
  749. package/dist/startup/processes.mjs +162 -0
  750. package/dist/startup/processes.mjs.map +1 -0
  751. package/dist/startup.js +42 -0
  752. package/dist/storage/fs-backend.d.ts +38 -0
  753. package/dist/storage/fs-backend.d.ts.map +1 -0
  754. package/dist/storage/fs-backend.js +129 -0
  755. package/dist/storage/fs-backend.js.map +1 -0
  756. package/dist/storage/manager.d.ts +88 -0
  757. package/dist/storage/manager.d.ts.map +1 -0
  758. package/dist/storage/manager.js +416 -0
  759. package/dist/storage/manager.js.map +1 -0
  760. package/dist/storage/s3-backend.d.ts +30 -0
  761. package/dist/storage/s3-backend.d.ts.map +1 -0
  762. package/dist/storage/s3-backend.js +65 -0
  763. package/dist/storage/s3-backend.js.map +1 -0
  764. package/dist/storage/types.d.ts +56 -0
  765. package/dist/storage/types.d.ts.map +1 -0
  766. package/dist/storage/types.js +3 -0
  767. package/dist/storage/types.js.map +1 -0
  768. package/dist/utils/http.d.ts +16 -0
  769. package/dist/utils/http.d.ts.map +1 -0
  770. package/dist/utils/http.js +61 -0
  771. package/dist/utils/http.js.map +1 -0
  772. package/dist/utils/introspection-helpers.d.ts +35 -0
  773. package/dist/utils/introspection-helpers.d.ts.map +1 -0
  774. package/dist/utils/introspection-helpers.js +246 -0
  775. package/dist/utils/introspection-helpers.js.map +1 -0
  776. package/dist/webhook/definition.d.ts +79 -0
  777. package/dist/webhook/definition.d.ts.map +1 -0
  778. package/dist/webhook/definition.js +33 -0
  779. package/dist/webhook/definition.js.map +1 -0
  780. package/dist/webhook/guard.d.ts +34 -0
  781. package/dist/webhook/guard.d.ts.map +1 -0
  782. package/dist/webhook/guard.js +86 -0
  783. package/dist/webhook/guard.js.map +1 -0
  784. package/dist/webhook/index.d.ts +9 -0
  785. package/dist/webhook/index.d.ts.map +1 -0
  786. package/dist/webhook/index.js +19 -0
  787. package/dist/webhook/index.js.map +1 -0
  788. package/dist/webhook/verifier.d.ts +24 -0
  789. package/dist/webhook/verifier.d.ts.map +1 -0
  790. package/dist/webhook/verifier.js +107 -0
  791. package/dist/webhook/verifier.js.map +1 -0
  792. package/dist/websocket/server.d.ts +74 -0
  793. package/dist/websocket/server.d.ts.map +1 -0
  794. package/dist/websocket/server.js +693 -0
  795. package/dist/websocket/server.js.map +1 -0
  796. package/dist/websocket/types.d.ts +53 -0
  797. package/dist/websocket/types.d.ts.map +1 -0
  798. package/dist/websocket/types.js +3 -0
  799. package/dist/websocket/types.js.map +1 -0
  800. package/dist/websocket/ws-compat.d.ts +26 -0
  801. package/dist/websocket/ws-compat.d.ts.map +1 -0
  802. package/dist/websocket/ws-compat.js +35 -0
  803. package/dist/websocket/ws-compat.js.map +1 -0
  804. package/docker/README.md +5 -0
  805. package/package.json +210 -0
  806. package/scripts/postinstall.js +31 -0
  807. package/templates/.env.example +55 -0
  808. package/templates/archlast.config.js +36 -0
  809. package/templates/docker-compose.dev.yml +8 -0
  810. package/templates/docker-compose.prod.yml +15 -0
  811. package/templates/docker-compose.yml +33 -0
@@ -0,0 +1,1437 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeploymentHandler = void 0;
4
+ const persistence_js_1 = require("./persistence.js");
5
+ const logger_js_1 = require("../logging/logger.js");
6
+ const function_extractor_js_1 = require("./function-extractor.js");
7
+ const schema_js_1 = require("../auth/system/schema.js");
8
+ const definition_js_1 = require("../functions/definition.js");
9
+ const deployment_events_controller_js_1 = require("../controllers/deployment-events.controller.js");
10
+ class DeploymentHandler {
11
+ uploadedFunctions = new Map();
12
+ uploadedHttpRoutes = new Map();
13
+ uploadedRpcRoutes = new Map();
14
+ uploadedSchema = null;
15
+ engine;
16
+ db;
17
+ persistence;
18
+ httpRouter = null;
19
+ rpcRouter = null; // Will be initialized as RpcRouter
20
+ deploymentLock = false;
21
+ constructor(engine, db) {
22
+ this.engine = engine;
23
+ this.db = db;
24
+ this.persistence = new persistence_js_1.DeploymentPersistence();
25
+ }
26
+ /**
27
+ * Acquire deployment lock
28
+ */
29
+ async acquireLock() {
30
+ if (this.deploymentLock) {
31
+ return false;
32
+ }
33
+ this.deploymentLock = true;
34
+ return true;
35
+ }
36
+ /**
37
+ * Release deployment lock
38
+ */
39
+ releaseLock() {
40
+ this.deploymentLock = false;
41
+ }
42
+ /**
43
+ * Set the HTTP router for registering user-defined routes
44
+ */
45
+ setHttpRouter(router) {
46
+ this.httpRouter = router;
47
+ }
48
+ async initialize() {
49
+ const state = await this.persistence.load();
50
+ if (state) {
51
+ await this.restoreDeployment(state);
52
+ }
53
+ }
54
+ async restoreDeployment(state) {
55
+ try {
56
+ const { join } = await import("path");
57
+ const fs = await import("fs/promises");
58
+ const deployDir = join(process.cwd(), ".archlast-deploy");
59
+ // Ensure deploy directory exists
60
+ await fs.mkdir(deployDir, { recursive: true });
61
+ // Write all files with directory structure preserved
62
+ for (const file of state.files) {
63
+ const filePath = join(deployDir, file.filePath);
64
+ const fileDir = join(filePath, "..");
65
+ await fs.mkdir(fileDir, { recursive: true });
66
+ // Rewrite imports for files in src/, keep others as-is
67
+ const code = file.filePath.startsWith("src/")
68
+ ? await this.rewriteImports(file.code)
69
+ : file.code;
70
+ await Bun.write(filePath, code);
71
+ }
72
+ // Load schema and functions
73
+ let restoredCount = 0;
74
+ // Check for static tRPC router (Phase 4: prioritize static router over dynamic registry)
75
+ const trpcRouterFile = state.files.find((f) => f.filePath.endsWith("_generated/trpc-router.ts") ||
76
+ f.filePath.endsWith("_generated/trpc-router.js"));
77
+ if (trpcRouterFile) {
78
+ try {
79
+ const routerPath = join(deployDir, trpcRouterFile.filePath);
80
+ const routerMod = await import(routerPath + `?t=${Date.now()}`);
81
+ if (routerMod && routerMod.appRouter) {
82
+ this.rpcRouter = routerMod.appRouter;
83
+ logger_js_1.logger.log({
84
+ timestamp: Date.now(),
85
+ level: "info",
86
+ kind: "deployment",
87
+ message: "[Restore] Loaded static tRPC appRouter from trpc-router.ts",
88
+ });
89
+ }
90
+ }
91
+ catch (err) {
92
+ logger_js_1.logger.log({
93
+ timestamp: Date.now(),
94
+ level: "error",
95
+ kind: "deployment",
96
+ message: "[Restore] Failed to load static tRPC router:",
97
+ context: { err },
98
+ });
99
+ }
100
+ }
101
+ // First, look for DI registration
102
+ const diFile = state.files.find((f) => f.filePath.endsWith("_generated/di.ts") ||
103
+ f.filePath.endsWith("_generated/di.js"));
104
+ if (diFile) {
105
+ try {
106
+ const diPath = join(deployDir, diFile.filePath);
107
+ const diMod = await import(diPath + `?t=${Date.now()}`);
108
+ if (diMod && typeof diMod.registerProviders === "function") {
109
+ const { globalContainer } = await import("../di/container.js");
110
+ diMod.registerProviders(globalContainer);
111
+ logger_js_1.logger.log({
112
+ timestamp: Date.now(),
113
+ level: "info",
114
+ kind: "deployment",
115
+ message: `[Restore] Registered DI providers from ${diFile.filePath}`,
116
+ });
117
+ }
118
+ }
119
+ catch (err) {
120
+ logger_js_1.logger.log({
121
+ timestamp: Date.now(),
122
+ level: "error",
123
+ kind: "deployment",
124
+ message: "[Restore] Failed to register DI providers:",
125
+ context: { err },
126
+ });
127
+ }
128
+ }
129
+ for (const file of state.files) {
130
+ const fullPath = join(deployDir, file.filePath);
131
+ const fileName = file.filePath.split(/[\\/]/).pop() || "unknown.ts";
132
+ const moduleName = fileName.replace(/\.(ts|js)$/, "");
133
+ // Load schema
134
+ if (file.filePath.endsWith("schema.ts")) {
135
+ const mod = await import(fullPath + `?t=${Date.now()}`);
136
+ if (mod.default && mod.default.tables) {
137
+ const mergedSchema = {
138
+ ...mod.default,
139
+ tables: {
140
+ ...(mod.default.tables ?? {}),
141
+ ...schema_js_1.authSchema.tables,
142
+ },
143
+ };
144
+ this.uploadedSchema = mergedSchema;
145
+ await this.db.applySchema(mergedSchema);
146
+ }
147
+ continue;
148
+ }
149
+ // Load functions and routes
150
+ const hasFunctions = /export\s+(?:const|let)\s+\w+\s*=\s*(?:query|mutation|action|http\.\w+|webhook|rpc\.\w+|t\.router)\s*\(/g.test(file.code);
151
+ if (hasFunctions) {
152
+ const mod = await import(fullPath + `?t=${Date.now()}`);
153
+ for (const [key, value] of Object.entries(mod)) {
154
+ // Check for HTTP route definitions
155
+ if ((0, definition_js_1.isHttpDefinition)(value)) {
156
+ const routeKey = `${moduleName}:${key}`;
157
+ this.uploadedHttpRoutes.set(routeKey, value);
158
+ if (this.httpRouter) {
159
+ this.httpRouter.register(value);
160
+ }
161
+ continue;
162
+ }
163
+ // Check for webhook definitions
164
+ if ((0, definition_js_1.isWebhookDefinition)(value)) {
165
+ const routeKey = `${moduleName}:${key}`;
166
+ this.uploadedHttpRoutes.set(routeKey, value);
167
+ if (this.httpRouter) {
168
+ this.httpRouter.register(value);
169
+ }
170
+ continue;
171
+ }
172
+ // Check for RPC definitions
173
+ if ((0, definition_js_1.isRpcDefinition)(value)) {
174
+ const routeKey = `${moduleName}:${key}`;
175
+ this.uploadedRpcRoutes.set(routeKey, value);
176
+ if (this.rpcRouter && typeof this.rpcRouter.register === 'function') {
177
+ this.rpcRouter.register(moduleName, key, value);
178
+ }
179
+ continue;
180
+ }
181
+ // Check for generated appRouter (tRPC static router)
182
+ if (key === "appRouter" && value && typeof value === "object") {
183
+ this.rpcRouter = value;
184
+ logger_js_1.logger.log({
185
+ timestamp: Date.now(),
186
+ level: "info",
187
+ kind: "deployment",
188
+ message: `[Restore] Registered static tRPC router (AppRouter)`,
189
+ });
190
+ continue;
191
+ }
192
+ // Check for query/mutation/action functions
193
+ if (value &&
194
+ typeof value === "object" &&
195
+ "type" in value &&
196
+ "handler" in value) {
197
+ const fnName = `${moduleName}.${key}`;
198
+ this.engine.registerFunction(fnName, value);
199
+ this.uploadedFunctions.set(`${moduleName}:${key}`, {
200
+ name: key,
201
+ type: value.type,
202
+ filePath: fullPath,
203
+ fullName: fnName,
204
+ // Preserve args schema (ZodObject) if provided by query/mutation config.
205
+ args: value.args,
206
+ timestamp: Date.now(),
207
+ });
208
+ restoredCount++;
209
+ }
210
+ }
211
+ }
212
+ }
213
+ // restoredCount can be surfaced via logger if needed
214
+ }
215
+ catch (error) {
216
+ // swallow to avoid noisy console logs during restore
217
+ }
218
+ }
219
+ async handleDeploy(payload) {
220
+ // Acquire deployment lock
221
+ if (!(await this.acquireLock())) {
222
+ return {
223
+ success: false,
224
+ message: "Deployment in progress, please wait",
225
+ functions: 0,
226
+ schema: false,
227
+ };
228
+ }
229
+ try {
230
+ // Validate payload
231
+ if (!payload || !Array.isArray(payload.files)) {
232
+ throw new Error("Invalid payload: 'files' array is missing or invalid");
233
+ }
234
+ const { join } = await import("path");
235
+ const fs = await import("fs/promises");
236
+ const deployDir = join(process.cwd(), ".archlast-deploy");
237
+ // Calculate file hash for diff detection
238
+ const fileHashes = new Map();
239
+ let filesHashStr = "";
240
+ payload.files.sort((a, b) => a.filePath.localeCompare(b.filePath));
241
+ for (const file of payload.files) {
242
+ const hash = this.hashString(file.code);
243
+ fileHashes.set(file.filePath, hash);
244
+ filesHashStr += `${file.filePath}:${hash};`;
245
+ }
246
+ const overallHash = this.hashString(filesHashStr);
247
+ // Load current state and check for changes
248
+ const currentState = await this.persistence.load();
249
+ const hasChanges = this.hasFileChanges(currentState, payload.files);
250
+ let functionCount = 0;
251
+ const schemaFile = payload.files.find((f) => f.filePath.endsWith("schema.ts"));
252
+ const hasSchema = !!schemaFile;
253
+ // Count functions in payload
254
+ for (const file of payload.files) {
255
+ if (file.code.includes("query(") ||
256
+ file.code.includes("mutation(") ||
257
+ file.code.includes("action(")) {
258
+ functionCount++;
259
+ }
260
+ }
261
+ if (!hasChanges && currentState) {
262
+ await this.persistence.saveHistory({ files: payload.files, lastDeployment: payload.timestamp }, {
263
+ timestamp: payload.timestamp,
264
+ functionCount,
265
+ schemaChanged: false, // No changes at all
266
+ hash: overallHash,
267
+ });
268
+ return {
269
+ success: true,
270
+ message: "No changes detected",
271
+ functions: functionCount,
272
+ schema: hasSchema,
273
+ };
274
+ }
275
+ // Clear old registrations before loading new ones
276
+ this.uploadedFunctions.clear();
277
+ this.uploadedHttpRoutes.clear();
278
+ this.uploadedSchema = null;
279
+ if (this.httpRouter) {
280
+ this.httpRouter.clear();
281
+ }
282
+ // Ensure deploy directory exists
283
+ await fs.mkdir(deployDir, { recursive: true });
284
+ // Delete files that are no longer in the incoming payload
285
+ const incomingPaths = new Set(payload.files.map((f) => f.filePath));
286
+ if (currentState && currentState.files.length > 0) {
287
+ const filesToDelete = [];
288
+ for (const file of currentState.files) {
289
+ if (!incomingPaths.has(file.filePath)) {
290
+ filesToDelete.push(file.filePath);
291
+ }
292
+ }
293
+ // Delete stale files
294
+ for (const filePath of filesToDelete) {
295
+ const fullPath = join(deployDir, filePath);
296
+ try {
297
+ await fs.rm(fullPath, { force: true });
298
+ logger_js_1.logger.log({
299
+ timestamp: Date.now(),
300
+ level: "info",
301
+ kind: "deployment",
302
+ message: `Deleted stale file: ${filePath}`,
303
+ });
304
+ }
305
+ catch (err) {
306
+ logger_js_1.logger.log({
307
+ timestamp: Date.now(),
308
+ level: "warn",
309
+ kind: "deployment",
310
+ message: `Failed to delete stale file: ${filePath}`,
311
+ context: { err },
312
+ });
313
+ }
314
+ }
315
+ // Clean up empty directories
316
+ await this.cleanEmptyDirs(deployDir);
317
+ }
318
+ // Write all files with directory structure preserved
319
+ for (const file of payload.files) {
320
+ const filePath = join(deployDir, file.filePath);
321
+ const fileDir = join(filePath, "..");
322
+ await fs.mkdir(fileDir, { recursive: true });
323
+ // Rewrite imports for files in src/, keep others as-is
324
+ const code = file.filePath.startsWith("src/")
325
+ ? await this.rewriteImports(file.code)
326
+ : file.code;
327
+ await Bun.write(filePath, code);
328
+ }
329
+ // Scan and load files that contain functions or schema
330
+ const filesToLoad = [];
331
+ for (const file of payload.files) {
332
+ const fullPath = join(deployDir, file.filePath);
333
+ const fileName = file.filePath.split(/[\\/]/).pop() || "unknown.ts";
334
+ const moduleName = fileName.replace(/\.(ts|js)$/, "");
335
+ // Check if file is schema
336
+ if (file.filePath.endsWith("schema.ts")) {
337
+ filesToLoad.push({ moduleName: "schema", filePath: fullPath, isSchema: true });
338
+ continue;
339
+ }
340
+ // Check if file contains functions or HTTP routes
341
+ const hasFunctions = /export\s+(?:const|let)\s+\w+\s*=\s*(?:query|mutation|action|http\.(?:get|post|put|patch|delete)|webhook|t\.router)\s*\(/g.test(file.code);
342
+ if (hasFunctions) {
343
+ filesToLoad.push({ moduleName, filePath: fullPath, isSchema: false });
344
+ }
345
+ }
346
+ // Load and register functions
347
+ let functionsRegistered = 0;
348
+ let schemaApplied = false;
349
+ // First, look for DI registration
350
+ const diFile = payload.files.find((f) => f.filePath.endsWith("_generated/di.ts") ||
351
+ f.filePath.endsWith("_generated/di.js"));
352
+ if (diFile) {
353
+ try {
354
+ const diPath = join(deployDir, diFile.filePath);
355
+ const diMod = await import(diPath + `?t=${Date.now()}`);
356
+ if (diMod && typeof diMod.registerProviders === "function") {
357
+ const { globalContainer } = await import("../di/container.js");
358
+ diMod.registerProviders(globalContainer);
359
+ logger_js_1.logger.log({
360
+ timestamp: Date.now(),
361
+ level: "info",
362
+ kind: "deployment",
363
+ message: `Registered DI providers from ${diFile.filePath}`,
364
+ });
365
+ }
366
+ }
367
+ catch (err) {
368
+ logger_js_1.logger.log({
369
+ timestamp: Date.now(),
370
+ level: "error",
371
+ kind: "deployment",
372
+ message: "Failed to register DI providers:",
373
+ context: { err },
374
+ });
375
+ }
376
+ }
377
+ // Check for static tRPC router (Phase 4: prioritize static router over dynamic registry)
378
+ const trpcRouterFile = payload.files.find((f) => f.filePath.endsWith("_generated/trpc-router.ts") ||
379
+ f.filePath.endsWith("_generated/trpc-router.js"));
380
+ if (trpcRouterFile) {
381
+ try {
382
+ const routerPath = join(deployDir, trpcRouterFile.filePath);
383
+ const routerMod = await import(routerPath + `?t=${Date.now()}`);
384
+ if (routerMod && routerMod.appRouter) {
385
+ this.rpcRouter = routerMod.appRouter;
386
+ logger_js_1.logger.log({
387
+ timestamp: Date.now(),
388
+ level: "info",
389
+ kind: "deployment",
390
+ message: "Loaded static tRPC appRouter from trpc-router.ts",
391
+ });
392
+ }
393
+ }
394
+ catch (err) {
395
+ logger_js_1.logger.log({
396
+ timestamp: Date.now(),
397
+ level: "error",
398
+ kind: "deployment",
399
+ message: "Failed to load static tRPC router:",
400
+ context: { err },
401
+ });
402
+ }
403
+ }
404
+ for (const { moduleName, filePath, isSchema } of filesToLoad) {
405
+ const mod = await import(filePath + `?t=${Date.now()}`);
406
+ if (isSchema) {
407
+ if (mod.default && mod.default.tables) {
408
+ const mergedSchema = {
409
+ ...mod.default,
410
+ tables: {
411
+ ...(mod.default.tables ?? {}),
412
+ ...schema_js_1.authSchema.tables,
413
+ },
414
+ };
415
+ this.uploadedSchema = mergedSchema;
416
+ await this.db.applySchema(mergedSchema);
417
+ schemaApplied = true;
418
+ }
419
+ }
420
+ else {
421
+ // Register all exported functions, HTTP routes, webhooks, and RPC procedures
422
+ for (const [key, value] of Object.entries(mod)) {
423
+ // Check for HTTP route definitions
424
+ if ((0, definition_js_1.isHttpDefinition)(value)) {
425
+ const routeKey = `${moduleName}:${key}`;
426
+ this.uploadedHttpRoutes.set(routeKey, value);
427
+ if (this.httpRouter) {
428
+ this.httpRouter.register(value);
429
+ logger_js_1.logger.log({
430
+ timestamp: Date.now(),
431
+ level: "info",
432
+ kind: "deployment",
433
+ message: `Registered HTTP route: ${value.method} ${value.path}`,
434
+ });
435
+ }
436
+ continue;
437
+ }
438
+ // Check for webhook definitions
439
+ if ((0, definition_js_1.isWebhookDefinition)(value)) {
440
+ const routeKey = `${moduleName}:${key}`;
441
+ this.uploadedHttpRoutes.set(routeKey, value);
442
+ if (this.httpRouter) {
443
+ this.httpRouter.register(value);
444
+ logger_js_1.logger.log({
445
+ timestamp: Date.now(),
446
+ level: "info",
447
+ kind: "deployment",
448
+ message: `Registered webhook: ${value.method ?? "POST"} ${value.path}`,
449
+ });
450
+ }
451
+ continue;
452
+ }
453
+ // Check for RPC definitions
454
+ if ((0, definition_js_1.isRpcDefinition)(value)) {
455
+ const routeKey = `${moduleName}:${key}`;
456
+ this.uploadedRpcRoutes.set(routeKey, value);
457
+ if (this.rpcRouter && typeof this.rpcRouter.register === 'function') {
458
+ this.rpcRouter.register(moduleName, key, value);
459
+ logger_js_1.logger.log({
460
+ timestamp: Date.now(),
461
+ level: "info",
462
+ kind: "deployment",
463
+ message: `Registered RPC procedure: ${moduleName}.${key} (${value.procedureType})`,
464
+ });
465
+ }
466
+ continue;
467
+ }
468
+ // Check for generated appRouter (tRPC static router)
469
+ if (key === "appRouter" && value && typeof value === "object") {
470
+ this.rpcRouter = value;
471
+ logger_js_1.logger.log({
472
+ timestamp: Date.now(),
473
+ level: "info",
474
+ kind: "deployment",
475
+ message: `Registered static tRPC router (AppRouter)`,
476
+ });
477
+ continue;
478
+ }
479
+ // Check for query/mutation/action functions
480
+ if (value &&
481
+ typeof value === "object" &&
482
+ "type" in value &&
483
+ "handler" in value) {
484
+ const fnName = `${moduleName}.${key}`;
485
+ this.engine.registerFunction(fnName, value);
486
+ this.uploadedFunctions.set(`${moduleName}:${key}`, {
487
+ name: key,
488
+ type: value.type,
489
+ filePath: filePath,
490
+ fullName: fnName,
491
+ // Preserve args schema (ZodObject) if provided by query/mutation config.
492
+ args: value.args,
493
+ timestamp: payload.timestamp,
494
+ });
495
+ functionsRegistered++;
496
+ }
497
+ }
498
+ }
499
+ }
500
+ // Extract function and schema metadata for smart pull
501
+ const metadata = this.extractDeploymentMetadata(payload.files, payload.timestamp);
502
+ // Save deployment state and history with metadata
503
+ const newState = {
504
+ files: payload.files,
505
+ lastDeployment: payload.timestamp,
506
+ functions: metadata.functions,
507
+ schema: metadata.schema,
508
+ };
509
+ await this.persistence.save(newState);
510
+ await this.persistence.saveHistory(newState, {
511
+ timestamp: payload.timestamp,
512
+ functionCount: functionsRegistered,
513
+ schemaChanged: schemaApplied, // Approximation
514
+ hash: overallHash,
515
+ });
516
+ // Broadcast deployment notification
517
+ try {
518
+ const { broadcastNotification } = await import("../functions/built-in/system-notifications.js");
519
+ broadcastNotification({
520
+ title: "Deployment Complete",
521
+ description: `${functionsRegistered} function(s) deployed${schemaApplied ? ", schema updated" : ""}`,
522
+ type: "success",
523
+ data: {
524
+ functionCount: functionsRegistered,
525
+ schemaChanged: schemaApplied,
526
+ timestamp: payload.timestamp,
527
+ },
528
+ });
529
+ }
530
+ catch (err) {
531
+ // Ignore notification errors
532
+ logger_js_1.logger.log({
533
+ timestamp: Date.now(),
534
+ level: "warn",
535
+ kind: "deployment",
536
+ message: "Failed to broadcast deployment notification:",
537
+ context: { err },
538
+ });
539
+ }
540
+ // Emit deployment complete event for reactive CLI
541
+ (0, deployment_events_controller_js_1.emitDeploymentComplete)("full");
542
+ setTimeout(() => {
543
+ logger_js_1.logger.log({
544
+ timestamp: Date.now(),
545
+ level: "info",
546
+ kind: "deployment",
547
+ message: "Restarting server after deployment...",
548
+ });
549
+ process.exit(0);
550
+ }, 200);
551
+ return {
552
+ success: true,
553
+ message: "Deployment successful",
554
+ functions: functionsRegistered,
555
+ schema: schemaApplied,
556
+ };
557
+ }
558
+ catch (error) {
559
+ return {
560
+ success: false,
561
+ message: error instanceof Error ? error.message : "Unknown error",
562
+ functions: 0,
563
+ schema: false,
564
+ };
565
+ }
566
+ finally {
567
+ // Always release the lock
568
+ this.releaseLock();
569
+ }
570
+ }
571
+ async rewriteImports(code) {
572
+ const { join } = await import("path");
573
+ const deployDir = join(process.cwd(), ".archlast-deploy");
574
+ // Don't rewrite imports from _generated/server since we now include that file
575
+ // Only rewrite schema/definition imports
576
+ let rewritten = code.replace(/from\s+["']@archlast\/server\/schema\/definition["']/g, 'from "@archlast/server/schema/definition"');
577
+ // Rewrite relative module imports to absolute paths within .archlast-deploy
578
+ // e.g., from '../modules/tasks/task.helper' -> from 'F:/path/.archlast-deploy/modules/tasks/task.helper'
579
+ rewritten = rewritten.replace(/from\s+["']\.\.\/((modules|src)\/[^"']+)["']/g, (match, modulePath) => {
580
+ const absolutePath = join(deployDir, modulePath).replace(/\\/g, "/");
581
+ return `from "${absolutePath}"`;
582
+ });
583
+ return rewritten;
584
+ }
585
+ hasFileChanges(currentState, incomingFiles) {
586
+ if (!currentState)
587
+ return true;
588
+ // Create maps for comparison
589
+ const currentMap = new Map(currentState.files.map((f) => [f.filePath, f.code.trim()]));
590
+ const incomingMap = new Map(incomingFiles.map((f) => [f.filePath, f.code.trim()]));
591
+ // Check if file count changed
592
+ if (currentMap.size !== incomingMap.size)
593
+ return true;
594
+ // Check if any file content changed
595
+ for (const [path, code] of incomingMap) {
596
+ const currentCode = currentMap.get(path);
597
+ if (!currentCode || currentCode !== code) {
598
+ return true;
599
+ }
600
+ }
601
+ return false;
602
+ }
603
+ hashString(str) {
604
+ let hash = 0;
605
+ for (let i = 0; i < str.length; i++) {
606
+ const char = str.charCodeAt(i);
607
+ hash = (hash << 5) - hash + char;
608
+ hash = hash & hash;
609
+ }
610
+ return Math.abs(hash).toString(36);
611
+ }
612
+ /**
613
+ * Recursively clean up empty directories
614
+ */
615
+ async cleanEmptyDirs(dirPath) {
616
+ try {
617
+ const { readdir } = await import("fs/promises");
618
+ const { join } = await import("path");
619
+ const entries = await readdir(dirPath, { withFileTypes: true });
620
+ for (const entry of entries) {
621
+ const fullPath = join(dirPath, entry.name);
622
+ if (entry.isDirectory()) {
623
+ await this.cleanEmptyDirs(fullPath);
624
+ // Check if directory is now empty
625
+ const remainingEntries = await readdir(fullPath);
626
+ if (remainingEntries.length === 0) {
627
+ const { rmdir } = await import("fs/promises");
628
+ await rmdir(fullPath);
629
+ logger_js_1.logger.log({
630
+ timestamp: Date.now(),
631
+ level: "info",
632
+ kind: "deployment",
633
+ message: `Removed empty directory: ${fullPath}`,
634
+ });
635
+ }
636
+ }
637
+ }
638
+ }
639
+ catch (error) {
640
+ // Ignore errors during cleanup
641
+ logger_js_1.logger.log({
642
+ timestamp: Date.now(),
643
+ level: "warn",
644
+ kind: "deployment",
645
+ message: "Failed to clean empty directories",
646
+ context: { error },
647
+ });
648
+ }
649
+ }
650
+ getFunction(filePath, name) {
651
+ return this.uploadedFunctions.get(`${filePath}:${name}`);
652
+ }
653
+ getSchema() {
654
+ return this.uploadedSchema;
655
+ }
656
+ listFunctions() {
657
+ return Array.from(this.uploadedFunctions.values()).map((f) => ({
658
+ // IMPORTANT: For the dashboard registry, return the fully-qualified runtime name
659
+ // (e.g. "tasks.list") so the UI can call it over WS without guessing module prefixes.
660
+ name: f.fullName,
661
+ fullName: f.fullName,
662
+ type: f.type,
663
+ filePath: f.filePath,
664
+ // Best-effort: attach the Zod args object (when present) so the dashboard can scaffold JSON args.
665
+ // This is derived from the exported FunctionDefinition object loaded during deploy.
666
+ args: f.args,
667
+ }));
668
+ }
669
+ /**
670
+ * List all registered HTTP routes and webhooks with detailed metadata
671
+ */
672
+ listHttpRoutes() {
673
+ return Array.from(this.uploadedHttpRoutes.entries()).map(([key, route]) => {
674
+ const [moduleName, exportName] = key.split(":");
675
+ return {
676
+ path: route.path,
677
+ method: route.type === "webhook" ? (route.method ?? "POST") : route.method,
678
+ type: route.type,
679
+ auth: route.auth,
680
+ exportName,
681
+ moduleName,
682
+ permissions: route.type === "http" ? (route.permissions ?? undefined) : undefined,
683
+ };
684
+ });
685
+ }
686
+ /**
687
+ * List all registered RPC procedures with detailed metadata
688
+ */
689
+ listRpcRoutes() {
690
+ return Array.from(this.uploadedRpcRoutes.entries()).map(([key, route]) => {
691
+ const [moduleName, exportName] = key.split(":");
692
+ return {
693
+ name: exportName,
694
+ namespace: moduleName,
695
+ fullName: `${moduleName}.${exportName}`,
696
+ procedureType: route.procedureType,
697
+ auth: route.auth,
698
+ exportName,
699
+ moduleName,
700
+ permissions: route.permissions,
701
+ };
702
+ });
703
+ }
704
+ // --- New Deployment History Methods ---
705
+ async listDeployments() {
706
+ return this.persistence.listHistory();
707
+ }
708
+ async getDeployment(id) {
709
+ return this.persistence.getHistory(id);
710
+ }
711
+ /**
712
+ * Get manifest of current deployment (file paths and hashes)
713
+ */
714
+ getManifest() {
715
+ const currentState = this.persistence.loadSync();
716
+ if (!currentState) {
717
+ return {};
718
+ }
719
+ const manifest = {};
720
+ for (const file of currentState.files) {
721
+ manifest[file.filePath] = this.hashString(file.code.trim());
722
+ }
723
+ return manifest;
724
+ }
725
+ async getDeploymentDiff(id, baseId) {
726
+ const target = await this.persistence.getHistory(id);
727
+ if (!target)
728
+ return null;
729
+ let base = null;
730
+ if (baseId) {
731
+ base = await this.persistence.getHistory(baseId);
732
+ }
733
+ else {
734
+ // If no base specified, try to find the one immediately before 'id'
735
+ // This is naive and assumes listHistory is ordered.
736
+ const history = await this.persistence.listHistory();
737
+ const idx = history.findIndex((d) => d.id === id);
738
+ if (idx !== -1 && idx < history.length - 1) {
739
+ base = await this.persistence.getHistory(history[idx + 1].id);
740
+ }
741
+ }
742
+ if (!base) {
743
+ // First deployment: everything is added
744
+ return target.files.map((f) => ({
745
+ filePath: f.filePath,
746
+ status: "added",
747
+ chunks: [], // Lightweight diff
748
+ }));
749
+ }
750
+ const baseMap = new Map(base.files.map((f) => [f.filePath, f.code]));
751
+ const targetMap = new Map(target.files.map((f) => [f.filePath, f.code]));
752
+ const diffs = [];
753
+ // Check for added/changed
754
+ for (const [path, code] of targetMap) {
755
+ if (!baseMap.has(path)) {
756
+ diffs.push({ filePath: path, status: "added" });
757
+ }
758
+ else if (baseMap.get(path) !== code) {
759
+ diffs.push({ filePath: path, status: "modified" });
760
+ }
761
+ }
762
+ // Check for removed
763
+ for (const [path] of baseMap) {
764
+ if (!targetMap.has(path)) {
765
+ diffs.push({ filePath: path, status: "removed" });
766
+ }
767
+ }
768
+ return diffs;
769
+ }
770
+ /**
771
+ * Handle delta deployment - only process changed files
772
+ * @returns Deployment result with deployment type indicator
773
+ */
774
+ async handleDeltaDeploy(payload) {
775
+ // Acquire deployment lock
776
+ if (!(await this.acquireLock())) {
777
+ return {
778
+ success: false,
779
+ message: "Deployment in progress, please wait",
780
+ functions: 0,
781
+ schema: false,
782
+ deploymentType: "delta",
783
+ };
784
+ }
785
+ try {
786
+ // Validate payload
787
+ if (!payload || !payload.changes) {
788
+ throw new Error("Invalid delta payload: 'changes' object is missing");
789
+ }
790
+ const { added, modified, removed } = payload.changes;
791
+ const hasChanges = added.length > 0 || modified.length > 0 || removed.length > 0;
792
+ if (!hasChanges) {
793
+ return {
794
+ success: true,
795
+ message: "No changes to apply",
796
+ functions: 0,
797
+ schema: false,
798
+ deploymentType: "delta",
799
+ };
800
+ }
801
+ const currentState = await this.persistence.load();
802
+ if (!currentState) {
803
+ // No existing state - fall back to full deployment
804
+ logger_js_1.logger.log({
805
+ timestamp: Date.now(),
806
+ level: "info",
807
+ kind: "deployment",
808
+ message: "No existing state, falling back to full deployment",
809
+ });
810
+ return this.fallbackToFullDeploy(payload);
811
+ }
812
+ // Verify integrity if manifest hash provided
813
+ if (payload.manifestHash) {
814
+ const expectedHash = payload.manifestHash;
815
+ const computedHash = this.computeExpectedHash(currentState, payload.changes);
816
+ if (expectedHash !== computedHash) {
817
+ logger_js_1.logger.log({
818
+ timestamp: Date.now(),
819
+ level: "warn",
820
+ kind: "deployment",
821
+ message: "Manifest hash mismatch, falling back to full deployment",
822
+ context: { expected: expectedHash, computed: computedHash },
823
+ });
824
+ return this.fallbackToFullDeploy(payload);
825
+ }
826
+ }
827
+ const { join } = await import("path");
828
+ const fs = await import("fs/promises");
829
+ const deployDir = join(process.cwd(), ".archlast-deploy");
830
+ // Track affected modules for reloading
831
+ const affectedModules = new Set();
832
+ const schemaChanged = this.checkSchemaChanged(payload.changes);
833
+ const diChanged = this.checkDIChanged(payload.changes);
834
+ const trpcRouterChanged = this.checkTrpcRouterChanged(payload.changes);
835
+ // Apply removals first
836
+ for (const filePath of removed) {
837
+ const fullPath = join(deployDir, filePath);
838
+ try {
839
+ await fs.rm(fullPath, { force: true });
840
+ affectedModules.add(this.getModuleName(filePath));
841
+ // Unregister functions from this file
842
+ await this.unregisterFunctionsFromFile(filePath);
843
+ logger_js_1.logger.log({
844
+ timestamp: Date.now(),
845
+ level: "info",
846
+ kind: "deployment",
847
+ message: `[Delta] Removed file: ${filePath}`,
848
+ });
849
+ }
850
+ catch (err) {
851
+ logger_js_1.logger.log({
852
+ timestamp: Date.now(),
853
+ level: "warn",
854
+ kind: "deployment",
855
+ message: `[Delta] Failed to remove file: ${filePath}`,
856
+ context: { err },
857
+ });
858
+ }
859
+ }
860
+ // Apply additions and modifications
861
+ const allChanges = [...added, ...modified];
862
+ for (const file of allChanges) {
863
+ const filePath = join(deployDir, file.filePath);
864
+ const fileDir = join(filePath, "..");
865
+ await fs.mkdir(fileDir, { recursive: true });
866
+ // Rewrite imports for files in src/
867
+ const code = file.filePath.startsWith("src/")
868
+ ? await this.rewriteImports(file.code)
869
+ : file.code;
870
+ await Bun.write(filePath, code);
871
+ affectedModules.add(this.getModuleName(file.filePath));
872
+ logger_js_1.logger.log({
873
+ timestamp: Date.now(),
874
+ level: "info",
875
+ kind: "deployment",
876
+ message: `[Delta] ${added.includes(file) ? "Added" : "Modified"}: ${file.filePath}`,
877
+ });
878
+ }
879
+ // Update state in memory
880
+ const newState = this.applyDeltaToState(currentState, payload.changes);
881
+ // Incremental reload of affected modules
882
+ let functionsRegistered = 0;
883
+ // Reload DI if changed
884
+ if (diChanged) {
885
+ const diFile = newState.files.find((f) => f.filePath.endsWith("_generated/di.ts") ||
886
+ f.filePath.endsWith("_generated/di.js"));
887
+ if (diFile) {
888
+ try {
889
+ const diPath = join(deployDir, diFile.filePath);
890
+ const diMod = await import(diPath + `?t=${Date.now()}`);
891
+ if (diMod && typeof diMod.registerProviders === "function") {
892
+ const { globalContainer } = await import("../di/container.js");
893
+ diMod.registerProviders(globalContainer);
894
+ logger_js_1.logger.log({
895
+ timestamp: Date.now(),
896
+ level: "info",
897
+ kind: "deployment",
898
+ message: "[Delta] Re-registered DI providers",
899
+ });
900
+ }
901
+ }
902
+ catch (err) {
903
+ logger_js_1.logger.log({
904
+ timestamp: Date.now(),
905
+ level: "error",
906
+ kind: "deployment",
907
+ message: "[Delta] Failed to re-register DI providers",
908
+ context: { err },
909
+ });
910
+ }
911
+ }
912
+ }
913
+ // Reload tRPC router if changed
914
+ if (trpcRouterChanged) {
915
+ const trpcRouterFile = newState.files.find((f) => f.filePath.endsWith("_generated/trpc-router.ts") ||
916
+ f.filePath.endsWith("_generated/trpc-router.js"));
917
+ if (trpcRouterFile) {
918
+ try {
919
+ const routerPath = join(deployDir, trpcRouterFile.filePath);
920
+ const routerMod = await import(routerPath + `?t=${Date.now()}`);
921
+ if (routerMod && routerMod.appRouter) {
922
+ this.rpcRouter = routerMod.appRouter;
923
+ logger_js_1.logger.log({
924
+ timestamp: Date.now(),
925
+ level: "info",
926
+ kind: "deployment",
927
+ message: "[Delta] Reloaded static tRPC appRouter from trpc-router.ts",
928
+ });
929
+ }
930
+ }
931
+ catch (err) {
932
+ logger_js_1.logger.log({
933
+ timestamp: Date.now(),
934
+ level: "error",
935
+ kind: "deployment",
936
+ message: "[Delta] Failed to reload tRPC router",
937
+ context: { err },
938
+ });
939
+ }
940
+ }
941
+ }
942
+ // Reload schema if changed
943
+ if (schemaChanged) {
944
+ const schemaFile = newState.files.find((f) => f.filePath.endsWith("schema.ts"));
945
+ if (schemaFile) {
946
+ try {
947
+ const schemaPath = join(deployDir, schemaFile.filePath);
948
+ const mod = await import(schemaPath + `?t=${Date.now()}`);
949
+ if (mod.default && mod.default.tables) {
950
+ const mergedSchema = {
951
+ ...mod.default,
952
+ tables: {
953
+ ...(mod.default.tables ?? {}),
954
+ ...schema_js_1.authSchema.tables,
955
+ },
956
+ };
957
+ this.uploadedSchema = mergedSchema;
958
+ await this.db.applySchema(mergedSchema);
959
+ logger_js_1.logger.log({
960
+ timestamp: Date.now(),
961
+ level: "info",
962
+ kind: "deployment",
963
+ message: "[Delta] Schema reloaded",
964
+ });
965
+ }
966
+ }
967
+ catch (err) {
968
+ logger_js_1.logger.log({
969
+ timestamp: Date.now(),
970
+ level: "error",
971
+ kind: "deployment",
972
+ message: "[Delta] Failed to reload schema",
973
+ context: { err },
974
+ });
975
+ }
976
+ }
977
+ }
978
+ // Reload affected modules
979
+ for (const moduleName of affectedModules) {
980
+ const files = newState.files.filter((f) => this.getModuleName(f.filePath) === moduleName);
981
+ for (const file of files) {
982
+ if (file.filePath.endsWith("schema.ts") ||
983
+ file.filePath.includes("_generated/")) {
984
+ continue; // Already handled
985
+ }
986
+ const fullPath = join(deployDir, file.filePath);
987
+ const hasFunctions = /export\s+(?:const|let)\s+\w+\s*=\s*(?:query|mutation|action|http\.(?:get|post|put|patch|delete)|webhook|rpc\.(?:query|mutation))\s*\(/g.test(file.code);
988
+ if (hasFunctions) {
989
+ try {
990
+ const mod = await import(fullPath + `?t=${Date.now()}`);
991
+ // Unregister old functions from this module
992
+ await this.unregisterFunctionsFromFile(file.filePath);
993
+ // Register new functions
994
+ for (const [key, value] of Object.entries(mod)) {
995
+ if ((0, definition_js_1.isHttpDefinition)(value) || (0, definition_js_1.isWebhookDefinition)(value)) {
996
+ const routeKey = `${moduleName}:${key}`;
997
+ this.uploadedHttpRoutes.set(routeKey, value);
998
+ if (this.httpRouter) {
999
+ this.httpRouter.register(value);
1000
+ }
1001
+ continue;
1002
+ }
1003
+ if ((0, definition_js_1.isRpcDefinition)(value)) {
1004
+ const routeKey = `${moduleName}:${key}`;
1005
+ this.uploadedRpcRoutes.set(routeKey, value);
1006
+ if (this.rpcRouter) {
1007
+ this.rpcRouter.register(moduleName, key, value);
1008
+ }
1009
+ continue;
1010
+ }
1011
+ if (value &&
1012
+ typeof value === "object" &&
1013
+ "type" in value &&
1014
+ "handler" in value) {
1015
+ const fnName = `${moduleName}.${key}`;
1016
+ this.engine.registerFunction(fnName, value);
1017
+ this.uploadedFunctions.set(`${moduleName}:${key}`, {
1018
+ name: key,
1019
+ type: value.type,
1020
+ filePath: fullPath,
1021
+ fullName: fnName,
1022
+ args: value.args,
1023
+ timestamp: payload.timestamp,
1024
+ });
1025
+ functionsRegistered++;
1026
+ }
1027
+ }
1028
+ }
1029
+ catch (err) {
1030
+ logger_js_1.logger.log({
1031
+ timestamp: Date.now(),
1032
+ level: "error",
1033
+ kind: "deployment",
1034
+ message: `[Delta] Failed to reload module: ${moduleName}`,
1035
+ context: { err },
1036
+ });
1037
+ }
1038
+ }
1039
+ }
1040
+ }
1041
+ // Clean up empty directories
1042
+ await this.cleanEmptyDirs(deployDir);
1043
+ // Save updated state
1044
+ await this.persistence.save(newState);
1045
+ await this.persistence.saveHistory({ ...newState, lastDeployment: payload.timestamp }, {
1046
+ timestamp: payload.timestamp,
1047
+ functionCount: functionsRegistered,
1048
+ schemaChanged,
1049
+ hash: this.hashString(JSON.stringify(newState)),
1050
+ });
1051
+ // Broadcast notification
1052
+ try {
1053
+ const { broadcastNotification } = await import("../functions/built-in/system-notifications.js");
1054
+ broadcastNotification({
1055
+ title: "Delta Deployment Complete",
1056
+ description: `${functionsRegistered} function(s) updated${schemaChanged ? ", schema updated" : ""}`,
1057
+ type: "success",
1058
+ data: {
1059
+ functionCount: functionsRegistered,
1060
+ schemaChanged,
1061
+ added: added.length,
1062
+ modified: modified.length,
1063
+ removed: removed.length,
1064
+ timestamp: payload.timestamp,
1065
+ },
1066
+ });
1067
+ }
1068
+ catch (err) {
1069
+ // Ignore notification errors
1070
+ }
1071
+ // Emit deployment complete event for reactive CLI
1072
+ (0, deployment_events_controller_js_1.emitDeploymentComplete)("delta");
1073
+ setTimeout(() => {
1074
+ logger_js_1.logger.log({
1075
+ timestamp: Date.now(),
1076
+ level: "info",
1077
+ kind: "deployment",
1078
+ message: "Restarting server after delta deployment...",
1079
+ });
1080
+ process.exit(0);
1081
+ }, 200);
1082
+ return {
1083
+ success: true,
1084
+ message: `Delta deployment successful: ${added.length} added, ${modified.length} modified, ${removed.length} removed`,
1085
+ functions: functionsRegistered,
1086
+ schema: schemaChanged,
1087
+ deploymentType: "delta",
1088
+ };
1089
+ }
1090
+ catch (error) {
1091
+ logger_js_1.logger.log({
1092
+ timestamp: Date.now(),
1093
+ level: "error",
1094
+ kind: "deployment",
1095
+ message: "Delta deployment failed",
1096
+ context: { error },
1097
+ });
1098
+ return {
1099
+ success: false,
1100
+ message: error instanceof Error ? error.message : "Unknown error",
1101
+ functions: 0,
1102
+ schema: false,
1103
+ deploymentType: "delta",
1104
+ };
1105
+ }
1106
+ finally {
1107
+ // Always release the lock
1108
+ this.releaseLock();
1109
+ }
1110
+ }
1111
+ /**
1112
+ * Apply delta changes to deployment state
1113
+ */
1114
+ applyDeltaToState(currentState, changes) {
1115
+ const fileMap = new Map(currentState.files.map((f) => [f.filePath, f]));
1116
+ // Remove files
1117
+ for (const filePath of changes.removed) {
1118
+ fileMap.delete(filePath);
1119
+ }
1120
+ // Add or update files
1121
+ const allChanges = [...changes.added, ...changes.modified];
1122
+ for (const file of allChanges) {
1123
+ fileMap.set(file.filePath, { filePath: file.filePath, code: file.code });
1124
+ }
1125
+ return {
1126
+ files: Array.from(fileMap.values()),
1127
+ lastDeployment: Date.now(),
1128
+ };
1129
+ }
1130
+ /**
1131
+ * Check if schema file changed
1132
+ */
1133
+ checkSchemaChanged(changes) {
1134
+ const allFiles = [...changes.added, ...changes.modified];
1135
+ return allFiles.some((f) => f.filePath.endsWith("schema.ts"));
1136
+ }
1137
+ /**
1138
+ * Check if DI file changed
1139
+ */
1140
+ checkDIChanged(changes) {
1141
+ const allFiles = [...changes.added, ...changes.modified];
1142
+ return allFiles.some((f) => f.filePath.endsWith("_generated/di.ts") || f.filePath.endsWith("_generated/di.js"));
1143
+ }
1144
+ /**
1145
+ * Check if tRPC router file changed
1146
+ */
1147
+ checkTrpcRouterChanged(changes) {
1148
+ const allFiles = [...changes.added, ...changes.modified];
1149
+ return allFiles.some((f) => f.filePath.endsWith("_generated/trpc-router.ts") ||
1150
+ f.filePath.endsWith("_generated/trpc-router.js"));
1151
+ }
1152
+ /**
1153
+ * Get module name from file path
1154
+ */
1155
+ getModuleName(filePath) {
1156
+ const parts = filePath.split(/[\\/]/);
1157
+ const fileName = parts[parts.length - 1];
1158
+ return fileName.replace(/\.(ts|js)$/, "");
1159
+ }
1160
+ /**
1161
+ * Unregister functions from a specific file
1162
+ */
1163
+ async unregisterFunctionsFromFile(filePath) {
1164
+ const moduleName = this.getModuleName(filePath);
1165
+ // Find and remove functions registered from this file
1166
+ for (const [key, value] of this.uploadedFunctions.entries()) {
1167
+ if (value.filePath.endsWith(filePath)) {
1168
+ this.engine.unregisterFunction(value.fullName);
1169
+ this.uploadedFunctions.delete(key);
1170
+ logger_js_1.logger.log({
1171
+ timestamp: Date.now(),
1172
+ level: "info",
1173
+ kind: "deployment",
1174
+ message: `[Delta] Unregistered function: ${value.fullName}`,
1175
+ });
1176
+ }
1177
+ }
1178
+ // Remove HTTP routes from this module
1179
+ const routesToRemove = [];
1180
+ for (const [key] of this.uploadedHttpRoutes.entries()) {
1181
+ if (key.startsWith(`${moduleName}:`)) {
1182
+ routesToRemove.push(key);
1183
+ }
1184
+ }
1185
+ for (const key of routesToRemove) {
1186
+ const value = this.uploadedHttpRoutes.get(key);
1187
+ if (value) {
1188
+ // Remove from our tracking
1189
+ this.uploadedHttpRoutes.delete(key);
1190
+ // Note: HttpRouter doesn't support unregister, so we need to clear and reload all routes
1191
+ // This will be handled by the caller via a full route reload if needed
1192
+ logger_js_1.logger.log({
1193
+ timestamp: Date.now(),
1194
+ level: "info",
1195
+ kind: "deployment",
1196
+ message: `[Delta] Removed route from tracking: ${value.path}`,
1197
+ });
1198
+ }
1199
+ }
1200
+ // Remove RPC routes from this module
1201
+ const rpcRoutesToRemove = [];
1202
+ for (const [key] of this.uploadedRpcRoutes.entries()) {
1203
+ if (key.startsWith(`${moduleName}:`)) {
1204
+ rpcRoutesToRemove.push(key);
1205
+ }
1206
+ }
1207
+ for (const key of rpcRoutesToRemove) {
1208
+ const value = this.uploadedRpcRoutes.get(key);
1209
+ if (value && this.rpcRouter) {
1210
+ this.rpcRouter.unregister(moduleName, key.split(":")[1]);
1211
+ this.uploadedRpcRoutes.delete(key);
1212
+ logger_js_1.logger.log({
1213
+ timestamp: Date.now(),
1214
+ level: "info",
1215
+ kind: "deployment",
1216
+ message: `[Delta] Unregistered RPC procedure: ${moduleName}.${key.split(":")[1]}`,
1217
+ });
1218
+ }
1219
+ }
1220
+ }
1221
+ /**
1222
+ * Compute expected hash after applying delta
1223
+ */
1224
+ computeExpectedHash(currentState, changes) {
1225
+ const newState = this.applyDeltaToState(currentState, changes);
1226
+ const filesHashStr = newState.files
1227
+ .sort((a, b) => a.filePath.localeCompare(b.filePath))
1228
+ .map((f) => `${f.filePath}:${this.hashString(f.code.trim())}`)
1229
+ .join(";");
1230
+ return this.hashString(filesHashStr);
1231
+ }
1232
+ /**
1233
+ * Fall back to full deployment when delta is not possible
1234
+ */
1235
+ async fallbackToFullDeploy(deltaPayload) {
1236
+ // Reconstruct full payload from current state + delta
1237
+ const currentState = await this.persistence.load();
1238
+ const fullPayload = {
1239
+ timestamp: deltaPayload.timestamp,
1240
+ files: [],
1241
+ };
1242
+ if (currentState) {
1243
+ // Start with existing files
1244
+ fullPayload.files = [...currentState.files];
1245
+ }
1246
+ // Apply delta to reconstruct full state
1247
+ const fileMap = new Map(fullPayload.files.map((f) => [f.filePath, f]));
1248
+ // Remove deleted files
1249
+ for (const filePath of deltaPayload.changes.removed) {
1250
+ fileMap.delete(filePath);
1251
+ }
1252
+ // Add/update files
1253
+ for (const file of [...deltaPayload.changes.added, ...deltaPayload.changes.modified]) {
1254
+ fileMap.set(file.filePath, { filePath: file.filePath, code: file.code });
1255
+ }
1256
+ fullPayload.files = Array.from(fileMap.values());
1257
+ // Delegate to existing full deploy handler
1258
+ const result = await this.handleDeploy(fullPayload);
1259
+ return {
1260
+ ...result,
1261
+ deploymentType: "full",
1262
+ };
1263
+ }
1264
+ /**
1265
+ * Get schema source code from current deployment
1266
+ */
1267
+ getSchemaSource() {
1268
+ const currentState = this.persistence.loadSync();
1269
+ if (!currentState)
1270
+ return null;
1271
+ const schemaFile = currentState.files.find((f) => f.filePath === "src/schema.ts");
1272
+ if (!schemaFile)
1273
+ return null;
1274
+ return {
1275
+ source: schemaFile.code,
1276
+ filePath: schemaFile.filePath,
1277
+ };
1278
+ }
1279
+ /**
1280
+ * Update schema with validation and hot reload
1281
+ */
1282
+ async updateSchema(source) {
1283
+ try {
1284
+ const currentState = this.persistence.loadSync();
1285
+ if (!currentState) {
1286
+ return {
1287
+ success: false,
1288
+ errors: [{ line: 0, column: 0, message: "No deployment found" }],
1289
+ };
1290
+ }
1291
+ const schemaFile = currentState.files.find((f) => f.filePath === "src/schema.ts");
1292
+ if (!schemaFile) {
1293
+ return {
1294
+ success: false,
1295
+ errors: [
1296
+ { line: 0, column: 0, message: "Schema file not found in deployment" },
1297
+ ],
1298
+ };
1299
+ }
1300
+ const { join } = await import("path");
1301
+ const fs = await import("fs/promises");
1302
+ const deployDir = join(process.cwd(), ".archlast-deploy");
1303
+ const schemaPath = join(deployDir, "src/schema.ts");
1304
+ const rewrittenSource = await this.rewriteImports(source);
1305
+ await Bun.write(schemaPath, rewrittenSource);
1306
+ const errors = [];
1307
+ try {
1308
+ const mod = await import(schemaPath + `?t=${Date.now()}`);
1309
+ if (!mod.default || !mod.default.tables) {
1310
+ errors.push({
1311
+ line: 0,
1312
+ column: 0,
1313
+ message: "Schema must export default with tables",
1314
+ });
1315
+ }
1316
+ else {
1317
+ const tables = mod.default.tables;
1318
+ for (const [tableName, tableDef] of Object.entries(tables)) {
1319
+ if (!tableDef || typeof tableDef !== "object") {
1320
+ errors.push({
1321
+ line: 0,
1322
+ column: 0,
1323
+ message: `Table "${tableName}" is not a valid table definition`,
1324
+ });
1325
+ continue;
1326
+ }
1327
+ if (!tableDef.schema ||
1328
+ typeof tableDef.schema !== "object") {
1329
+ errors.push({
1330
+ line: 0,
1331
+ column: 0,
1332
+ message: `Table "${tableName}" missing schema definition`,
1333
+ });
1334
+ }
1335
+ }
1336
+ }
1337
+ }
1338
+ catch (parseError) {
1339
+ const errorStr = String(parseError);
1340
+ const lineMatch = errorStr.match(/:(\d+):(\d+)/);
1341
+ if (lineMatch) {
1342
+ errors.push({
1343
+ line: parseInt(lineMatch[1], 10),
1344
+ column: parseInt(lineMatch[2], 10),
1345
+ message: errorStr.split("\n").pop() || "Parse error",
1346
+ });
1347
+ }
1348
+ else {
1349
+ errors.push({ line: 0, column: 0, message: errorStr });
1350
+ }
1351
+ }
1352
+ if (errors.length > 0) {
1353
+ return { success: false, errors };
1354
+ }
1355
+ const newState = {
1356
+ ...currentState,
1357
+ files: currentState.files.map((f) => f.filePath === "src/schema.ts" ? { ...f, code: source } : f),
1358
+ };
1359
+ await this.persistence.save(newState);
1360
+ const mod = await import(schemaPath + `?t=${Date.now()}`);
1361
+ if (mod.default && mod.default.tables) {
1362
+ const mergedSchema = {
1363
+ ...mod.default,
1364
+ tables: {
1365
+ ...(mod.default.tables ?? {}),
1366
+ ...schema_js_1.authSchema.tables,
1367
+ },
1368
+ };
1369
+ this.uploadedSchema = mergedSchema;
1370
+ await this.db.applySchema(mergedSchema);
1371
+ }
1372
+ return { success: true };
1373
+ }
1374
+ catch (error) {
1375
+ return {
1376
+ success: false,
1377
+ errors: [
1378
+ {
1379
+ line: 0,
1380
+ column: 0,
1381
+ message: error instanceof Error ? error.message : String(error),
1382
+ },
1383
+ ],
1384
+ };
1385
+ }
1386
+ }
1387
+ /**
1388
+ * Get deployment files for CLI pull
1389
+ */
1390
+ getDeploymentFiles(filePaths) {
1391
+ const currentState = this.persistence.loadSync();
1392
+ if (!currentState)
1393
+ return [];
1394
+ const filesToReturn = filePaths
1395
+ ? currentState.files.filter((f) => filePaths.includes(f.filePath))
1396
+ : currentState.files;
1397
+ return filesToReturn.map((f) => ({
1398
+ filePath: f.filePath,
1399
+ code: f.code,
1400
+ }));
1401
+ }
1402
+ /**
1403
+ * Get pull metadata for smart diff detection
1404
+ * @param localHashes Optional map of local file hashes from CLI
1405
+ * @returns Pull metadata with change information
1406
+ */
1407
+ getPullMetadata(localHashes) {
1408
+ return this.persistence.computePullMetadata(localHashes);
1409
+ }
1410
+ /**
1411
+ * Extract function and schema metadata from deployment files
1412
+ * @param files Deployment files
1413
+ * @param timestamp Deployment timestamp
1414
+ * @returns Object containing functions and schema metadata
1415
+ */
1416
+ extractDeploymentMetadata(files, timestamp) {
1417
+ const functions = [];
1418
+ let schema = null;
1419
+ for (const file of files) {
1420
+ // Extract functions from source files
1421
+ if (file.filePath.startsWith("src/") &&
1422
+ (file.code.includes("query(") ||
1423
+ file.code.includes("mutation(") ||
1424
+ file.code.includes("action("))) {
1425
+ const fileFunctions = (0, function_extractor_js_1.extractFunctionsFromSource)(file.code, file.filePath, timestamp);
1426
+ functions.push(...fileFunctions);
1427
+ }
1428
+ // Extract schema metadata
1429
+ if (file.filePath.endsWith("schema.ts")) {
1430
+ schema = (0, function_extractor_js_1.extractSchemaMetadata)(file.code, file.filePath, timestamp);
1431
+ }
1432
+ }
1433
+ return { functions, schema };
1434
+ }
1435
+ }
1436
+ exports.DeploymentHandler = DeploymentHandler;
1437
+ //# sourceMappingURL=handler.js.map