@overlordai/server 1.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 (345) hide show
  1. package/database/migrations/001-init-schema.sql +226 -0
  2. package/database/migrations/002-add-indexes.sql +17 -0
  3. package/database/migrations/003-add-settings-table.sql +4 -0
  4. package/database/migrations/004-add-developer-id-index.sql +5 -0
  5. package/dist/adapters/adapter.interface.d.ts +41 -0
  6. package/dist/adapters/adapter.interface.d.ts.map +1 -0
  7. package/dist/adapters/adapter.interface.js +6 -0
  8. package/dist/adapters/adapter.interface.js.map +1 -0
  9. package/dist/adapters/adapter.module.d.ts +3 -0
  10. package/dist/adapters/adapter.module.d.ts.map +1 -0
  11. package/dist/adapters/adapter.module.js +54 -0
  12. package/dist/adapters/adapter.module.js.map +1 -0
  13. package/dist/adapters/adapter.registry.d.ts +19 -0
  14. package/dist/adapters/adapter.registry.d.ts.map +1 -0
  15. package/dist/adapters/adapter.registry.js +51 -0
  16. package/dist/adapters/adapter.registry.js.map +1 -0
  17. package/dist/adapters/lark/lark-card.builder.d.ts +48 -0
  18. package/dist/adapters/lark/lark-card.builder.d.ts.map +1 -0
  19. package/dist/adapters/lark/lark-card.builder.js +259 -0
  20. package/dist/adapters/lark/lark-card.builder.js.map +1 -0
  21. package/dist/adapters/lark/lark-message.parser.d.ts +51 -0
  22. package/dist/adapters/lark/lark-message.parser.d.ts.map +1 -0
  23. package/dist/adapters/lark/lark-message.parser.js +189 -0
  24. package/dist/adapters/lark/lark-message.parser.js.map +1 -0
  25. package/dist/adapters/lark/lark-signature.d.ts +13 -0
  26. package/dist/adapters/lark/lark-signature.d.ts.map +1 -0
  27. package/dist/adapters/lark/lark-signature.js +58 -0
  28. package/dist/adapters/lark/lark-signature.js.map +1 -0
  29. package/dist/adapters/lark/lark.adapter.d.ts +65 -0
  30. package/dist/adapters/lark/lark.adapter.d.ts.map +1 -0
  31. package/dist/adapters/lark/lark.adapter.js +565 -0
  32. package/dist/adapters/lark/lark.adapter.js.map +1 -0
  33. package/dist/adapters/lark/lark.controller.d.ts +21 -0
  34. package/dist/adapters/lark/lark.controller.d.ts.map +1 -0
  35. package/dist/adapters/lark/lark.controller.js +120 -0
  36. package/dist/adapters/lark/lark.controller.js.map +1 -0
  37. package/dist/adapters/slack/slack.adapter.d.ts +19 -0
  38. package/dist/adapters/slack/slack.adapter.d.ts.map +1 -0
  39. package/dist/adapters/slack/slack.adapter.js +42 -0
  40. package/dist/adapters/slack/slack.adapter.js.map +1 -0
  41. package/dist/app.module.d.ts +5 -0
  42. package/dist/app.module.d.ts.map +1 -0
  43. package/dist/app.module.js +48 -0
  44. package/dist/app.module.js.map +1 -0
  45. package/dist/auth/auth.controller.d.ts +15 -0
  46. package/dist/auth/auth.controller.d.ts.map +1 -0
  47. package/dist/auth/auth.controller.js +67 -0
  48. package/dist/auth/auth.controller.js.map +1 -0
  49. package/dist/auth/auth.module.d.ts +3 -0
  50. package/dist/auth/auth.module.d.ts.map +1 -0
  51. package/dist/auth/auth.module.js +46 -0
  52. package/dist/auth/auth.module.js.map +1 -0
  53. package/dist/auth/auth.service.d.ts +62 -0
  54. package/dist/auth/auth.service.d.ts.map +1 -0
  55. package/dist/auth/auth.service.js +307 -0
  56. package/dist/auth/auth.service.js.map +1 -0
  57. package/dist/auth/decorators/allow-totp-setup.decorator.d.ts +3 -0
  58. package/dist/auth/decorators/allow-totp-setup.decorator.d.ts.map +1 -0
  59. package/dist/auth/decorators/allow-totp-setup.decorator.js +8 -0
  60. package/dist/auth/decorators/allow-totp-setup.decorator.js.map +1 -0
  61. package/dist/auth/decorators/project-roles.decorator.d.ts +4 -0
  62. package/dist/auth/decorators/project-roles.decorator.d.ts.map +1 -0
  63. package/dist/auth/decorators/project-roles.decorator.js +8 -0
  64. package/dist/auth/decorators/project-roles.decorator.js.map +1 -0
  65. package/dist/auth/decorators/roles.decorator.d.ts +4 -0
  66. package/dist/auth/decorators/roles.decorator.d.ts.map +1 -0
  67. package/dist/auth/decorators/roles.decorator.js +8 -0
  68. package/dist/auth/decorators/roles.decorator.js.map +1 -0
  69. package/dist/auth/extract-user.middleware.d.ts +21 -0
  70. package/dist/auth/extract-user.middleware.d.ts.map +1 -0
  71. package/dist/auth/extract-user.middleware.js +57 -0
  72. package/dist/auth/extract-user.middleware.js.map +1 -0
  73. package/dist/auth/guards/jwt-auth.guard.d.ts +14 -0
  74. package/dist/auth/guards/jwt-auth.guard.d.ts.map +1 -0
  75. package/dist/auth/guards/jwt-auth.guard.js +139 -0
  76. package/dist/auth/guards/jwt-auth.guard.js.map +1 -0
  77. package/dist/auth/guards/project-role.guard.d.ts +10 -0
  78. package/dist/auth/guards/project-role.guard.d.ts.map +1 -0
  79. package/dist/auth/guards/project-role.guard.js +72 -0
  80. package/dist/auth/guards/project-role.guard.js.map +1 -0
  81. package/dist/auth/guards/roles.guard.d.ts +8 -0
  82. package/dist/auth/guards/roles.guard.d.ts.map +1 -0
  83. package/dist/auth/guards/roles.guard.js +56 -0
  84. package/dist/auth/guards/roles.guard.js.map +1 -0
  85. package/dist/auth/jwt.strategy.d.ts +23 -0
  86. package/dist/auth/jwt.strategy.d.ts.map +1 -0
  87. package/dist/auth/jwt.strategy.js +49 -0
  88. package/dist/auth/jwt.strategy.js.map +1 -0
  89. package/dist/common/crypto.service.d.ts +31 -0
  90. package/dist/common/crypto.service.d.ts.map +1 -0
  91. package/dist/common/crypto.service.js +120 -0
  92. package/dist/common/crypto.service.js.map +1 -0
  93. package/dist/common/error-filter.d.ts +6 -0
  94. package/dist/common/error-filter.d.ts.map +1 -0
  95. package/dist/common/error-filter.js +78 -0
  96. package/dist/common/error-filter.js.map +1 -0
  97. package/dist/common/health.controller.d.ts +13 -0
  98. package/dist/common/health.controller.d.ts.map +1 -0
  99. package/dist/common/health.controller.js +75 -0
  100. package/dist/common/health.controller.js.map +1 -0
  101. package/dist/common/logger.service.d.ts +11 -0
  102. package/dist/common/logger.service.d.ts.map +1 -0
  103. package/dist/common/logger.service.js +48 -0
  104. package/dist/common/logger.service.js.map +1 -0
  105. package/dist/common/pagination.d.ts +18 -0
  106. package/dist/common/pagination.d.ts.map +1 -0
  107. package/dist/common/pagination.js +39 -0
  108. package/dist/common/pagination.js.map +1 -0
  109. package/dist/common/rate-limit.guard.d.ts +48 -0
  110. package/dist/common/rate-limit.guard.d.ts.map +1 -0
  111. package/dist/common/rate-limit.guard.js +129 -0
  112. package/dist/common/rate-limit.guard.js.map +1 -0
  113. package/dist/common/sensitive-filter.d.ts +7 -0
  114. package/dist/common/sensitive-filter.d.ts.map +1 -0
  115. package/dist/common/sensitive-filter.js +20 -0
  116. package/dist/common/sensitive-filter.js.map +1 -0
  117. package/dist/database/database.module.d.ts +3 -0
  118. package/dist/database/database.module.d.ts.map +1 -0
  119. package/dist/database/database.module.js +22 -0
  120. package/dist/database/database.module.js.map +1 -0
  121. package/dist/database/database.service.d.ts +13 -0
  122. package/dist/database/database.service.d.ts.map +1 -0
  123. package/dist/database/database.service.js +107 -0
  124. package/dist/database/database.service.js.map +1 -0
  125. package/dist/database/migration-runner.d.ts +5 -0
  126. package/dist/database/migration-runner.d.ts.map +1 -0
  127. package/dist/database/migration-runner.js +86 -0
  128. package/dist/database/migration-runner.js.map +1 -0
  129. package/dist/database/repositories/audit-log.repository.d.ts +29 -0
  130. package/dist/database/repositories/audit-log.repository.d.ts.map +1 -0
  131. package/dist/database/repositories/audit-log.repository.js +80 -0
  132. package/dist/database/repositories/audit-log.repository.js.map +1 -0
  133. package/dist/database/repositories/bot.repository.d.ts +67 -0
  134. package/dist/database/repositories/bot.repository.d.ts.map +1 -0
  135. package/dist/database/repositories/bot.repository.js +133 -0
  136. package/dist/database/repositories/bot.repository.js.map +1 -0
  137. package/dist/database/repositories/developer-token.repository.d.ts +40 -0
  138. package/dist/database/repositories/developer-token.repository.d.ts.map +1 -0
  139. package/dist/database/repositories/developer-token.repository.js +84 -0
  140. package/dist/database/repositories/developer-token.repository.js.map +1 -0
  141. package/dist/database/repositories/developer.repository.d.ts +25 -0
  142. package/dist/database/repositories/developer.repository.d.ts.map +1 -0
  143. package/dist/database/repositories/developer.repository.js +139 -0
  144. package/dist/database/repositories/developer.repository.js.map +1 -0
  145. package/dist/database/repositories/machine.repository.d.ts +39 -0
  146. package/dist/database/repositories/machine.repository.d.ts.map +1 -0
  147. package/dist/database/repositories/machine.repository.js +176 -0
  148. package/dist/database/repositories/machine.repository.js.map +1 -0
  149. package/dist/database/repositories/notification.repository.d.ts +19 -0
  150. package/dist/database/repositories/notification.repository.d.ts.map +1 -0
  151. package/dist/database/repositories/notification.repository.js +94 -0
  152. package/dist/database/repositories/notification.repository.js.map +1 -0
  153. package/dist/database/repositories/project-member.repository.d.ts +30 -0
  154. package/dist/database/repositories/project-member.repository.d.ts.map +1 -0
  155. package/dist/database/repositories/project-member.repository.js +75 -0
  156. package/dist/database/repositories/project-member.repository.js.map +1 -0
  157. package/dist/database/repositories/project.repository.d.ts +24 -0
  158. package/dist/database/repositories/project.repository.d.ts.map +1 -0
  159. package/dist/database/repositories/project.repository.js +154 -0
  160. package/dist/database/repositories/project.repository.js.map +1 -0
  161. package/dist/database/repositories/session.repository.d.ts +19 -0
  162. package/dist/database/repositories/session.repository.d.ts.map +1 -0
  163. package/dist/database/repositories/session.repository.js +117 -0
  164. package/dist/database/repositories/session.repository.js.map +1 -0
  165. package/dist/database/repositories/task.repository.d.ts +37 -0
  166. package/dist/database/repositories/task.repository.d.ts.map +1 -0
  167. package/dist/database/repositories/task.repository.js +229 -0
  168. package/dist/database/repositories/task.repository.js.map +1 -0
  169. package/dist/database/repositories/worker-token.repository.d.ts +20 -0
  170. package/dist/database/repositories/worker-token.repository.d.ts.map +1 -0
  171. package/dist/database/repositories/worker-token.repository.js +94 -0
  172. package/dist/database/repositories/worker-token.repository.js.map +1 -0
  173. package/dist/database/repositories/workspace.repository.d.ts +19 -0
  174. package/dist/database/repositories/workspace.repository.d.ts.map +1 -0
  175. package/dist/database/repositories/workspace.repository.js +82 -0
  176. package/dist/database/repositories/workspace.repository.js.map +1 -0
  177. package/dist/dispatcher/capability.service.d.ts +50 -0
  178. package/dist/dispatcher/capability.service.d.ts.map +1 -0
  179. package/dist/dispatcher/capability.service.js +159 -0
  180. package/dist/dispatcher/capability.service.js.map +1 -0
  181. package/dist/dispatcher/cleanup.service.d.ts +23 -0
  182. package/dist/dispatcher/cleanup.service.d.ts.map +1 -0
  183. package/dist/dispatcher/cleanup.service.js +107 -0
  184. package/dist/dispatcher/cleanup.service.js.map +1 -0
  185. package/dist/dispatcher/dedup.service.d.ts +48 -0
  186. package/dist/dispatcher/dedup.service.d.ts.map +1 -0
  187. package/dist/dispatcher/dedup.service.js +189 -0
  188. package/dist/dispatcher/dedup.service.js.map +1 -0
  189. package/dist/dispatcher/dispatcher.module.d.ts +3 -0
  190. package/dist/dispatcher/dispatcher.module.d.ts.map +1 -0
  191. package/dist/dispatcher/dispatcher.module.js +76 -0
  192. package/dist/dispatcher/dispatcher.module.js.map +1 -0
  193. package/dist/dispatcher/dispatcher.service.d.ts +134 -0
  194. package/dist/dispatcher/dispatcher.service.d.ts.map +1 -0
  195. package/dist/dispatcher/dispatcher.service.js +1034 -0
  196. package/dist/dispatcher/dispatcher.service.js.map +1 -0
  197. package/dist/dispatcher/heartbeat.service.d.ts +50 -0
  198. package/dist/dispatcher/heartbeat.service.d.ts.map +1 -0
  199. package/dist/dispatcher/heartbeat.service.js +154 -0
  200. package/dist/dispatcher/heartbeat.service.js.map +1 -0
  201. package/dist/dispatcher/machine-selector.d.ts +18 -0
  202. package/dist/dispatcher/machine-selector.d.ts.map +1 -0
  203. package/dist/dispatcher/machine-selector.js +144 -0
  204. package/dist/dispatcher/machine-selector.js.map +1 -0
  205. package/dist/dispatcher/pty-relay.service.d.ts +75 -0
  206. package/dist/dispatcher/pty-relay.service.d.ts.map +1 -0
  207. package/dist/dispatcher/pty-relay.service.js +404 -0
  208. package/dist/dispatcher/pty-relay.service.js.map +1 -0
  209. package/dist/dispatcher/reconciler.d.ts +39 -0
  210. package/dist/dispatcher/reconciler.d.ts.map +1 -0
  211. package/dist/dispatcher/reconciler.js +556 -0
  212. package/dist/dispatcher/reconciler.js.map +1 -0
  213. package/dist/dispatcher/scheduler.service.d.ts +50 -0
  214. package/dist/dispatcher/scheduler.service.d.ts.map +1 -0
  215. package/dist/dispatcher/scheduler.service.js +287 -0
  216. package/dist/dispatcher/scheduler.service.js.map +1 -0
  217. package/dist/dispatcher/state-machine.d.ts +16 -0
  218. package/dist/dispatcher/state-machine.d.ts.map +1 -0
  219. package/dist/dispatcher/state-machine.js +77 -0
  220. package/dist/dispatcher/state-machine.js.map +1 -0
  221. package/dist/dispatcher/task-log-batcher.d.ts +50 -0
  222. package/dist/dispatcher/task-log-batcher.d.ts.map +1 -0
  223. package/dist/dispatcher/task-log-batcher.js +184 -0
  224. package/dist/dispatcher/task-log-batcher.js.map +1 -0
  225. package/dist/dispatcher/worker-connection.manager.d.ts +49 -0
  226. package/dist/dispatcher/worker-connection.manager.d.ts.map +1 -0
  227. package/dist/dispatcher/worker-connection.manager.js +128 -0
  228. package/dist/dispatcher/worker-connection.manager.js.map +1 -0
  229. package/dist/main.d.ts +2 -0
  230. package/dist/main.d.ts.map +1 -0
  231. package/dist/main.js +85 -0
  232. package/dist/main.js.map +1 -0
  233. package/dist/notifier/debouncer.d.ts +39 -0
  234. package/dist/notifier/debouncer.d.ts.map +1 -0
  235. package/dist/notifier/debouncer.js +123 -0
  236. package/dist/notifier/debouncer.js.map +1 -0
  237. package/dist/notifier/notification-consumer.d.ts +88 -0
  238. package/dist/notifier/notification-consumer.d.ts.map +1 -0
  239. package/dist/notifier/notification-consumer.js +186 -0
  240. package/dist/notifier/notification-consumer.js.map +1 -0
  241. package/dist/notifier/notifier.module.d.ts +9 -0
  242. package/dist/notifier/notifier.module.d.ts.map +1 -0
  243. package/dist/notifier/notifier.module.js +58 -0
  244. package/dist/notifier/notifier.module.js.map +1 -0
  245. package/dist/notifier/notifier.service.d.ts +40 -0
  246. package/dist/notifier/notifier.service.d.ts.map +1 -0
  247. package/dist/notifier/notifier.service.js +191 -0
  248. package/dist/notifier/notifier.service.js.map +1 -0
  249. package/dist/notifier/template.service.d.ts +42 -0
  250. package/dist/notifier/template.service.d.ts.map +1 -0
  251. package/dist/notifier/template.service.js +201 -0
  252. package/dist/notifier/template.service.js.map +1 -0
  253. package/dist/redis/redis.module.d.ts +3 -0
  254. package/dist/redis/redis.module.d.ts.map +1 -0
  255. package/dist/redis/redis.module.js +22 -0
  256. package/dist/redis/redis.module.js.map +1 -0
  257. package/dist/redis/redis.service.d.ts +19 -0
  258. package/dist/redis/redis.service.d.ts.map +1 -0
  259. package/dist/redis/redis.service.js +69 -0
  260. package/dist/redis/redis.service.js.map +1 -0
  261. package/dist/web/admin/admin-audit.controller.d.ts +7 -0
  262. package/dist/web/admin/admin-audit.controller.d.ts.map +1 -0
  263. package/dist/web/admin/admin-audit.controller.js +53 -0
  264. package/dist/web/admin/admin-audit.controller.js.map +1 -0
  265. package/dist/web/admin/admin-bot.controller.d.ts +79 -0
  266. package/dist/web/admin/admin-bot.controller.d.ts.map +1 -0
  267. package/dist/web/admin/admin-bot.controller.js +193 -0
  268. package/dist/web/admin/admin-bot.controller.js.map +1 -0
  269. package/dist/web/admin/admin-developer.controller.d.ts +52 -0
  270. package/dist/web/admin/admin-developer.controller.d.ts.map +1 -0
  271. package/dist/web/admin/admin-developer.controller.js +160 -0
  272. package/dist/web/admin/admin-developer.controller.js.map +1 -0
  273. package/dist/web/admin/admin-machine.controller.d.ts +64 -0
  274. package/dist/web/admin/admin-machine.controller.d.ts.map +1 -0
  275. package/dist/web/admin/admin-machine.controller.js +111 -0
  276. package/dist/web/admin/admin-machine.controller.js.map +1 -0
  277. package/dist/web/admin/admin-project.controller.d.ts +45 -0
  278. package/dist/web/admin/admin-project.controller.d.ts.map +1 -0
  279. package/dist/web/admin/admin-project.controller.js +207 -0
  280. package/dist/web/admin/admin-project.controller.js.map +1 -0
  281. package/dist/web/admin/admin-settings.controller.d.ts +18 -0
  282. package/dist/web/admin/admin-settings.controller.d.ts.map +1 -0
  283. package/dist/web/admin/admin-settings.controller.js +93 -0
  284. package/dist/web/admin/admin-settings.controller.js.map +1 -0
  285. package/dist/web/admin/admin-token.controller.d.ts +45 -0
  286. package/dist/web/admin/admin-token.controller.d.ts.map +1 -0
  287. package/dist/web/admin/admin-token.controller.js +182 -0
  288. package/dist/web/admin/admin-token.controller.js.map +1 -0
  289. package/dist/web/dashboard.controller.d.ts +16 -0
  290. package/dist/web/dashboard.controller.d.ts.map +1 -0
  291. package/dist/web/dashboard.controller.js +78 -0
  292. package/dist/web/dashboard.controller.js.map +1 -0
  293. package/dist/web/dashboard.service.d.ts +39 -0
  294. package/dist/web/dashboard.service.d.ts.map +1 -0
  295. package/dist/web/dashboard.service.js +234 -0
  296. package/dist/web/dashboard.service.js.map +1 -0
  297. package/dist/web/interaction.service.d.ts +42 -0
  298. package/dist/web/interaction.service.d.ts.map +1 -0
  299. package/dist/web/interaction.service.js +102 -0
  300. package/dist/web/interaction.service.js.map +1 -0
  301. package/dist/web/machine.controller.d.ts +102 -0
  302. package/dist/web/machine.controller.d.ts.map +1 -0
  303. package/dist/web/machine.controller.js +121 -0
  304. package/dist/web/machine.controller.js.map +1 -0
  305. package/dist/web/notification.controller.d.ts +22 -0
  306. package/dist/web/notification.controller.d.ts.map +1 -0
  307. package/dist/web/notification.controller.js +70 -0
  308. package/dist/web/notification.controller.js.map +1 -0
  309. package/dist/web/profile.controller.d.ts +70 -0
  310. package/dist/web/profile.controller.d.ts.map +1 -0
  311. package/dist/web/profile.controller.js +262 -0
  312. package/dist/web/profile.controller.js.map +1 -0
  313. package/dist/web/project.controller.d.ts +8 -0
  314. package/dist/web/project.controller.d.ts.map +1 -0
  315. package/dist/web/project.controller.js +54 -0
  316. package/dist/web/project.controller.js.map +1 -0
  317. package/dist/web/pty.gateway.d.ts +32 -0
  318. package/dist/web/pty.gateway.d.ts.map +1 -0
  319. package/dist/web/pty.gateway.js +358 -0
  320. package/dist/web/pty.gateway.js.map +1 -0
  321. package/dist/web/search.service.d.ts +34 -0
  322. package/dist/web/search.service.d.ts.map +1 -0
  323. package/dist/web/search.service.js +106 -0
  324. package/dist/web/search.service.js.map +1 -0
  325. package/dist/web/task.controller.d.ts +54 -0
  326. package/dist/web/task.controller.d.ts.map +1 -0
  327. package/dist/web/task.controller.js +266 -0
  328. package/dist/web/task.controller.js.map +1 -0
  329. package/dist/web/web.module.d.ts +3 -0
  330. package/dist/web/web.module.d.ts.map +1 -0
  331. package/dist/web/web.module.js +97 -0
  332. package/dist/web/web.module.js.map +1 -0
  333. package/dist/web/worker-channel.gateway.d.ts +45 -0
  334. package/dist/web/worker-channel.gateway.d.ts.map +1 -0
  335. package/dist/web/worker-channel.gateway.js +283 -0
  336. package/dist/web/worker-channel.gateway.js.map +1 -0
  337. package/dist/web/worker.controller.d.ts +14 -0
  338. package/dist/web/worker.controller.d.ts.map +1 -0
  339. package/dist/web/worker.controller.js +73 -0
  340. package/dist/web/worker.controller.js.map +1 -0
  341. package/dist/web/workspace.controller.d.ts +109 -0
  342. package/dist/web/workspace.controller.d.ts.map +1 -0
  343. package/dist/web/workspace.controller.js +386 -0
  344. package/dist/web/workspace.controller.js.map +1 -0
  345. package/package.json +61 -0
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LarkCardBuilder = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const protocol_1 = require("@overlordai/protocol");
12
+ /** Status color mapping for Lark card templates. */
13
+ const STATUS_COLORS = {
14
+ [protocol_1.TaskStatus.QUEUED]: 'grey',
15
+ [protocol_1.TaskStatus.ASSIGNED]: 'blue',
16
+ [protocol_1.TaskStatus.RUNNING]: 'blue',
17
+ [protocol_1.TaskStatus.SUSPENDED]: 'orange',
18
+ [protocol_1.TaskStatus.COMPLETED]: 'green',
19
+ [protocol_1.TaskStatus.FAILED]: 'red',
20
+ [protocol_1.TaskStatus.CANCELLED]: 'grey',
21
+ };
22
+ /** Base URL for web detail links (configurable via env). */
23
+ function getWebBaseUrl() {
24
+ return process.env.OVERLORD_WEB_URL || 'http://localhost:3000';
25
+ }
26
+ /**
27
+ * Builds Lark Interactive Message Cards for task notifications.
28
+ *
29
+ * V1 uses hardcoded templates. Card content is returned as AdapterMessage
30
+ * which LarkAdapter converts into Lark-native card JSON.
31
+ */
32
+ let LarkCardBuilder = class LarkCardBuilder {
33
+ /**
34
+ * Truncate a description to a maximum length.
35
+ */
36
+ truncate(text, maxLength = 50) {
37
+ if (text.length <= maxLength)
38
+ return text;
39
+ return text.slice(0, maxLength) + '...';
40
+ }
41
+ /**
42
+ * Build a task status notification card.
43
+ */
44
+ buildTaskCard(task) {
45
+ const color = STATUS_COLORS[task.status] ?? 'grey';
46
+ const webUrl = `${getWebBaseUrl()}/tasks/${task.id}`;
47
+ const fields = [
48
+ { label: 'Task', value: `#${task.id}` },
49
+ { label: 'Description', value: this.truncate(task.description) },
50
+ { label: 'Status', value: `[${color}] ${task.status}` },
51
+ { label: 'Project', value: task.projectKey },
52
+ ];
53
+ if (task.currentStage) {
54
+ fields.push({ label: 'Stage', value: task.currentStage });
55
+ }
56
+ if (task.mrUrl) {
57
+ fields.push({ label: 'MR/PR', value: task.mrUrl });
58
+ }
59
+ if (task.errorMessage) {
60
+ fields.push({ label: 'Error', value: this.truncate(task.errorMessage, 100) });
61
+ }
62
+ const actions = [
63
+ { label: 'View Details', url: webUrl },
64
+ ];
65
+ return {
66
+ type: 'card',
67
+ card: {
68
+ title: `Task #${task.id} — ${task.status}`,
69
+ fields,
70
+ actions,
71
+ },
72
+ };
73
+ }
74
+ /**
75
+ * Build a dedup confirmation card — shown when a similar task already exists.
76
+ */
77
+ buildDedupConfirmCard(existingTaskId, description, confirmKey) {
78
+ return {
79
+ type: 'card',
80
+ card: {
81
+ title: 'Duplicate Task Detected',
82
+ fields: [
83
+ { label: 'Existing Task', value: `#${existingTaskId}` },
84
+ { label: 'Description', value: this.truncate(description) },
85
+ ],
86
+ actions: [
87
+ {
88
+ label: 'Create Anyway',
89
+ value: JSON.stringify({ action: 'confirm', confirmKey }),
90
+ },
91
+ {
92
+ label: 'Cancel',
93
+ value: JSON.stringify({ action: 'cancel', confirmKey }),
94
+ },
95
+ ],
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * Build an interactive stage card — confirm mode.
101
+ * Displays prompt + "Continue" / "Cancel" buttons.
102
+ */
103
+ buildConfirmStageCard(taskId, stageIndex, prompt) {
104
+ return {
105
+ type: 'card',
106
+ card: {
107
+ title: `Task #${taskId} — Confirmation Required`,
108
+ fields: [
109
+ { label: 'Task', value: `#${taskId}` },
110
+ { label: 'Prompt', value: prompt },
111
+ ],
112
+ actions: [
113
+ {
114
+ label: 'Continue',
115
+ value: JSON.stringify({ taskId, stageIndex, result: 'confirm' }),
116
+ },
117
+ {
118
+ label: 'Cancel',
119
+ value: JSON.stringify({ taskId, stageIndex, result: 'cancel' }),
120
+ },
121
+ ],
122
+ confirmMode: 'confirm',
123
+ prompt,
124
+ },
125
+ };
126
+ }
127
+ /**
128
+ * Build an interactive stage card — choice mode.
129
+ * Displays prompt + one button per choice option.
130
+ */
131
+ buildChoiceStageCard(taskId, stageIndex, prompt, choices) {
132
+ const actions = choices.map((choice) => ({
133
+ label: choice.label,
134
+ value: JSON.stringify({ taskId, stageIndex, result: choice.value }),
135
+ }));
136
+ return {
137
+ type: 'card',
138
+ card: {
139
+ title: `Task #${taskId} — Choose an Option`,
140
+ fields: [
141
+ { label: 'Task', value: `#${taskId}` },
142
+ { label: 'Prompt', value: prompt },
143
+ ],
144
+ actions,
145
+ confirmMode: 'choice',
146
+ choices,
147
+ prompt,
148
+ },
149
+ };
150
+ }
151
+ /**
152
+ * Build an interactive stage card — input mode.
153
+ * Displays prompt + instruction to reply to the message.
154
+ */
155
+ buildInputStageCard(taskId, stageIndex, prompt) {
156
+ const webUrl = `${getWebBaseUrl()}/tasks/${taskId}`;
157
+ return {
158
+ type: 'card',
159
+ card: {
160
+ title: `Task #${taskId} — Input Required`,
161
+ fields: [
162
+ { label: 'Task', value: `#${taskId}` },
163
+ { label: 'Prompt', value: prompt },
164
+ {
165
+ label: 'Instructions',
166
+ value: 'Please reply to this message with your input.',
167
+ },
168
+ ],
169
+ actions: [
170
+ { label: 'Enter via Web', url: webUrl },
171
+ ],
172
+ confirmMode: 'input',
173
+ prompt,
174
+ },
175
+ };
176
+ }
177
+ /**
178
+ * Build an "already selected" card to replace an interactive card after a
179
+ * button has been clicked (card action callback response).
180
+ */
181
+ buildSelectedCard(taskId, selectedLabel) {
182
+ return {
183
+ type: 'card',
184
+ card: {
185
+ title: `Task #${taskId} — Selection Confirmed`,
186
+ fields: [
187
+ { label: 'Task', value: `#${taskId}` },
188
+ { label: 'Selected', value: selectedLabel },
189
+ ],
190
+ },
191
+ };
192
+ }
193
+ // ---------------------------------------------------------------------------
194
+ // Lark-native card JSON converters
195
+ // ---------------------------------------------------------------------------
196
+ /**
197
+ * Convert an AdapterMessage into a Lark Interactive Message Card JSON
198
+ * (the `content` field for Lark's send message API).
199
+ */
200
+ toLarkCardJson(msg) {
201
+ if (msg.type === 'text') {
202
+ return JSON.stringify({ text: msg.text ?? '' });
203
+ }
204
+ const card = msg.card;
205
+ if (!card) {
206
+ return JSON.stringify({ text: '' });
207
+ }
208
+ const elements = [];
209
+ // Fields as a div block
210
+ if (card.fields.length > 0) {
211
+ const fieldElements = card.fields.map((f) => ({
212
+ tag: 'div',
213
+ text: {
214
+ tag: 'lark_md',
215
+ content: `**${f.label}**: ${f.value}`,
216
+ },
217
+ }));
218
+ elements.push(...fieldElements);
219
+ }
220
+ // Horizontal rule before actions
221
+ if (card.actions && card.actions.length > 0) {
222
+ elements.push({ tag: 'hr' });
223
+ const actionElements = card.actions.map((a) => {
224
+ if (a.url) {
225
+ return {
226
+ tag: 'button',
227
+ text: { tag: 'plain_text', content: a.label },
228
+ type: 'primary',
229
+ url: a.url,
230
+ };
231
+ }
232
+ return {
233
+ tag: 'button',
234
+ text: { tag: 'plain_text', content: a.label },
235
+ type: 'default',
236
+ value: a.value ? JSON.parse(a.value) : {},
237
+ };
238
+ });
239
+ elements.push({
240
+ tag: 'action',
241
+ actions: actionElements,
242
+ });
243
+ }
244
+ const larkCard = {
245
+ config: { wide_screen_mode: true },
246
+ header: {
247
+ title: { tag: 'plain_text', content: card.title },
248
+ template: 'blue',
249
+ },
250
+ elements,
251
+ };
252
+ return JSON.stringify(larkCard);
253
+ }
254
+ };
255
+ exports.LarkCardBuilder = LarkCardBuilder;
256
+ exports.LarkCardBuilder = LarkCardBuilder = __decorate([
257
+ (0, common_1.Injectable)()
258
+ ], LarkCardBuilder);
259
+ //# sourceMappingURL=lark-card.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-card.builder.js","sourceRoot":"","sources":["../../../src/adapters/lark/lark-card.builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { CommandType } from '@overlordai/protocol';
2
+ /**
3
+ * Parsed command extracted from a Lark @bot message.
4
+ */
5
+ export interface ParsedCommand {
6
+ type: CommandType | 'help';
7
+ args: {
8
+ description?: string;
9
+ project?: string;
10
+ machine?: string;
11
+ taskId?: number;
12
+ };
13
+ }
14
+ /**
15
+ * Parses Lark @bot message text into structured commands.
16
+ *
17
+ * Supported formats:
18
+ * @bot develop "description" --project frontend --on ubuntu-01
19
+ * @bot progress [#42]
20
+ * @bot cancel #42
21
+ * @bot retry #42
22
+ * @bot list
23
+ * @bot workspace #42
24
+ * @bot logs #42
25
+ * @bot confirm #42
26
+ * @bot drain machine-name
27
+ * @bot undrain machine-name
28
+ */
29
+ export declare class LarkMessageParser {
30
+ /**
31
+ * Parse the text portion of a Lark message after stripping the @bot mention.
32
+ * @param text The raw text after the @bot mention has been removed.
33
+ * @returns Parsed command, or a help command if unrecognised.
34
+ */
35
+ parse(text: string): ParsedCommand;
36
+ private parseDevelop;
37
+ private parseWithOptionalTaskId;
38
+ private parseWithRequiredTaskId;
39
+ private parseList;
40
+ private parseMachineCommand;
41
+ /**
42
+ * Extract a task ID from tokens. Recognises `#42` or bare `42`.
43
+ */
44
+ private extractTaskId;
45
+ /**
46
+ * Tokenize input text, respecting single and double-quoted strings.
47
+ * Quotes are stripped from the resulting tokens.
48
+ */
49
+ private tokenize;
50
+ }
51
+ //# sourceMappingURL=lark-message.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-message.parser.d.ts","sourceRoot":"","sources":["../../../src/adapters/lark/lark-message.parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,IAAI,EAAE;QACJ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;;;;;;;;;;;;;GAcG;AACH,qBACa,iBAAiB;IAC5B;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IA0DlC,OAAO,CAAC,YAAY;IA6CpB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAejB"}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LarkMessageParser = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const protocol_1 = require("@overlordai/protocol");
12
+ /**
13
+ * Parses Lark @bot message text into structured commands.
14
+ *
15
+ * Supported formats:
16
+ * @bot develop "description" --project frontend --on ubuntu-01
17
+ * @bot progress [#42]
18
+ * @bot cancel #42
19
+ * @bot retry #42
20
+ * @bot list
21
+ * @bot workspace #42
22
+ * @bot logs #42
23
+ * @bot confirm #42
24
+ * @bot drain machine-name
25
+ * @bot undrain machine-name
26
+ */
27
+ let LarkMessageParser = class LarkMessageParser {
28
+ /**
29
+ * Parse the text portion of a Lark message after stripping the @bot mention.
30
+ * @param text The raw text after the @bot mention has been removed.
31
+ * @returns Parsed command, or a help command if unrecognised.
32
+ */
33
+ parse(text) {
34
+ const trimmed = text.trim();
35
+ if (!trimmed) {
36
+ return { type: 'help', args: {} };
37
+ }
38
+ // Split into tokens, but respect quoted strings
39
+ const tokens = this.tokenize(trimmed);
40
+ if (tokens.length === 0) {
41
+ return { type: 'help', args: {} };
42
+ }
43
+ const commandName = tokens[0].toLowerCase();
44
+ switch (commandName) {
45
+ case 'develop':
46
+ case 'dev':
47
+ return this.parseDevelop(tokens.slice(1));
48
+ case 'progress':
49
+ return this.parseWithOptionalTaskId(protocol_1.CommandType.PROGRESS, tokens.slice(1));
50
+ case 'cancel':
51
+ return this.parseWithRequiredTaskId(protocol_1.CommandType.CANCEL, tokens.slice(1));
52
+ case 'retry':
53
+ return this.parseWithRequiredTaskId(protocol_1.CommandType.RETRY, tokens.slice(1));
54
+ case 'list':
55
+ case 'ls':
56
+ return this.parseList(tokens.slice(1));
57
+ case 'workspace':
58
+ case 'ws':
59
+ return this.parseWithRequiredTaskId(protocol_1.CommandType.WORKSPACE, tokens.slice(1));
60
+ case 'logs':
61
+ case 'log':
62
+ return this.parseWithRequiredTaskId(protocol_1.CommandType.LOGS, tokens.slice(1));
63
+ case 'confirm':
64
+ return this.parseWithRequiredTaskId(protocol_1.CommandType.CONFIRM, tokens.slice(1));
65
+ case 'drain':
66
+ return this.parseMachineCommand(protocol_1.CommandType.DRAIN, tokens.slice(1));
67
+ case 'undrain':
68
+ return this.parseMachineCommand(protocol_1.CommandType.UNDRAIN, tokens.slice(1));
69
+ default:
70
+ return { type: 'help', args: {} };
71
+ }
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // Sub-parsers
75
+ // ---------------------------------------------------------------------------
76
+ parseDevelop(tokens) {
77
+ let description;
78
+ let project;
79
+ let machine;
80
+ let i = 0;
81
+ while (i < tokens.length) {
82
+ const token = tokens[i];
83
+ if (token === '--project' || token === '-p') {
84
+ i++;
85
+ project = tokens[i];
86
+ i++;
87
+ continue;
88
+ }
89
+ if (token === '--on') {
90
+ i++;
91
+ machine = tokens[i];
92
+ i++;
93
+ continue;
94
+ }
95
+ // First non-flag token is the description
96
+ if (description === undefined) {
97
+ description = token;
98
+ }
99
+ i++;
100
+ }
101
+ if (!description) {
102
+ return { type: 'help', args: {} };
103
+ }
104
+ return {
105
+ type: protocol_1.CommandType.DEVELOP,
106
+ args: {
107
+ description: description.trim(),
108
+ ...(project ? { project } : {}),
109
+ ...(machine ? { machine } : {}),
110
+ },
111
+ };
112
+ }
113
+ parseWithOptionalTaskId(type, tokens) {
114
+ const taskId = this.extractTaskId(tokens);
115
+ return {
116
+ type,
117
+ args: taskId !== undefined ? { taskId } : {},
118
+ };
119
+ }
120
+ parseWithRequiredTaskId(type, tokens) {
121
+ const taskId = this.extractTaskId(tokens);
122
+ if (taskId === undefined) {
123
+ return { type: 'help', args: {} };
124
+ }
125
+ return { type, args: { taskId } };
126
+ }
127
+ parseList(tokens) {
128
+ let project;
129
+ let i = 0;
130
+ while (i < tokens.length) {
131
+ const token = tokens[i];
132
+ if (token === '--project' || token === '-p') {
133
+ i++;
134
+ project = tokens[i];
135
+ i++;
136
+ continue;
137
+ }
138
+ i++;
139
+ }
140
+ return {
141
+ type: protocol_1.CommandType.LIST,
142
+ args: project ? { project } : {},
143
+ };
144
+ }
145
+ parseMachineCommand(type, tokens) {
146
+ const machineName = tokens[0];
147
+ if (!machineName) {
148
+ return { type: 'help', args: {} };
149
+ }
150
+ return { type, args: { machine: machineName } };
151
+ }
152
+ // ---------------------------------------------------------------------------
153
+ // Helpers
154
+ // ---------------------------------------------------------------------------
155
+ /**
156
+ * Extract a task ID from tokens. Recognises `#42` or bare `42`.
157
+ */
158
+ extractTaskId(tokens) {
159
+ for (const token of tokens) {
160
+ const match = /^#?(\d+)$/.exec(token);
161
+ if (match) {
162
+ return parseInt(match[1], 10);
163
+ }
164
+ }
165
+ return undefined;
166
+ }
167
+ /**
168
+ * Tokenize input text, respecting single and double-quoted strings.
169
+ * Quotes are stripped from the resulting tokens.
170
+ */
171
+ tokenize(text) {
172
+ const tokens = [];
173
+ const regex = /(?:"([^"]*)")|(?:'([^']*)')|(\S+)/g;
174
+ let match;
175
+ while ((match = regex.exec(text)) !== null) {
176
+ // match[1] = double-quoted content, match[2] = single-quoted, match[3] = unquoted
177
+ const value = match[1] ?? match[2] ?? match[3];
178
+ if (value !== undefined) {
179
+ tokens.push(value);
180
+ }
181
+ }
182
+ return tokens;
183
+ }
184
+ };
185
+ exports.LarkMessageParser = LarkMessageParser;
186
+ exports.LarkMessageParser = LarkMessageParser = __decorate([
187
+ (0, common_1.Injectable)()
188
+ ], LarkMessageParser);
189
+ //# sourceMappingURL=lark-message.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-message.parser.js","sourceRoot":"","sources":["../../../src/adapters/lark/lark-message.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Verify a Lark webhook signature using SHA-256.
3
+ *
4
+ * Lark sends:
5
+ * X-Lark-Request-Timestamp
6
+ * X-Lark-Request-Nonce
7
+ * X-Lark-Signature
8
+ *
9
+ * Verification:
10
+ * sha256(timestamp + nonce + app_secret + rawBody)
11
+ */
12
+ export declare function verifyLarkSignature(timestamp: string, nonce: string, body: string, secret: string, signature: string): boolean;
13
+ //# sourceMappingURL=lark-signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-signature.d.ts","sourceRoot":"","sources":["../../../src/adapters/lark/lark-signature.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAOT"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.verifyLarkSignature = verifyLarkSignature;
37
+ const crypto = __importStar(require("node:crypto"));
38
+ /**
39
+ * Verify a Lark webhook signature using SHA-256.
40
+ *
41
+ * Lark sends:
42
+ * X-Lark-Request-Timestamp
43
+ * X-Lark-Request-Nonce
44
+ * X-Lark-Signature
45
+ *
46
+ * Verification:
47
+ * sha256(timestamp + nonce + app_secret + rawBody)
48
+ */
49
+ function verifyLarkSignature(timestamp, nonce, body, secret, signature) {
50
+ const content = timestamp + nonce + secret + body;
51
+ const hash = crypto.createHash('sha256').update(content).digest('hex');
52
+ const hashBuf = Buffer.from(hash, 'utf-8');
53
+ const sigBuf = Buffer.from(signature, 'utf-8');
54
+ if (hashBuf.length !== sigBuf.length)
55
+ return false;
56
+ return crypto.timingSafeEqual(hashBuf, sigBuf);
57
+ }
58
+ //# sourceMappingURL=lark-signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-signature.js","sourceRoot":"","sources":["../../../src/adapters/lark/lark-signature.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,kDAaC;AA1BD,oDAAsC;AAEtC;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CACjC,SAAiB,EACjB,KAAa,EACb,IAAY,EACZ,MAAc,EACd,SAAiB;IAEjB,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,65 @@
1
+ import type { Request } from 'express';
2
+ import type { Command, DeveloperPublic } from '@overlordai/protocol';
3
+ import { Platform } from '@overlordai/protocol';
4
+ import type { IMessageAdapter, AdapterMessage } from '../adapter.interface';
5
+ import { AdapterRegistry } from '../adapter.registry';
6
+ import { BotRepository } from '../../database/repositories/bot.repository';
7
+ import { DeveloperRepository } from '../../database/repositories/developer.repository';
8
+ import { RedisService } from '../../redis/redis.service';
9
+ import { DispatcherService } from '../../dispatcher/dispatcher.service';
10
+ import { CryptoService } from '../../common/crypto.service';
11
+ import { LarkMessageParser } from './lark-message.parser';
12
+ import { LarkCardBuilder } from './lark-card.builder';
13
+ /**
14
+ * Lark Adapter — handles Lark webhooks, sends/updates messages,
15
+ * resolves users. Supports multiple bots via app_id routing.
16
+ */
17
+ export declare class LarkAdapter implements IMessageAdapter {
18
+ private readonly botRepo;
19
+ private readonly developerRepo;
20
+ private readonly redis;
21
+ private readonly parser;
22
+ private readonly cardBuilder;
23
+ private readonly dispatcher;
24
+ private readonly registry;
25
+ private readonly cryptoService;
26
+ readonly platform = Platform.LARK;
27
+ private readonly logger;
28
+ /** Cache of Lark API clients by app_id. */
29
+ private readonly clients;
30
+ constructor(botRepo: BotRepository, developerRepo: DeveloperRepository, redis: RedisService, parser: LarkMessageParser, cardBuilder: LarkCardBuilder, dispatcher: DispatcherService, registry: AdapterRegistry, cryptoService: CryptoService);
31
+ handleWebhook(req: Request): Promise<Command | null>;
32
+ private handleMessage;
33
+ private handleCardAction;
34
+ private handleInputReply;
35
+ sendMessage(chatId: string, content: AdapterMessage, stageIndex?: number): Promise<string>;
36
+ updateMessage(msgId: string, content: AdapterMessage, appId?: string): Promise<void>;
37
+ resolveUser(platformUid: string): Promise<DeveloperPublic | null>;
38
+ storeInputMsgMapping(msgId: string, taskId: number, stageIndex: number): Promise<void>;
39
+ /**
40
+ * Extract the command text from a message, stripping the @bot mention.
41
+ * Returns null if the message does not contain a @bot mention.
42
+ */
43
+ private extractCommandText;
44
+ /**
45
+ * Get or create a Lark API client for the given app_id.
46
+ */
47
+ private getOrCreateClient;
48
+ /**
49
+ * Resolve an app_id from a bot instance ID (for chat binding lookups).
50
+ */
51
+ private resolveAppIdFromBinding;
52
+ /**
53
+ * Find any available Lark client for operations that don't have a specific app_id context.
54
+ */
55
+ private findClientForMessage;
56
+ /**
57
+ * Send a plain text message (internal helper).
58
+ */
59
+ private sendTextMessage;
60
+ /**
61
+ * Send a help message listing available commands.
62
+ */
63
+ private sendHelpMessage;
64
+ }
65
+ //# sourceMappingURL=lark.adapter.d.ts.map