@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 @@
1
+ {"version":3,"file":"lark.adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/lark/lark.adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAe,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAoDtD;;;GAGG;AACH,qBACa,WAAY,YAAW,eAAe;IAQ/C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAdhC,QAAQ,CAAC,QAAQ,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;gBAGvC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,iBAAiB,EAC7B,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,aAAa;IAOzC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YA4E5C,aAAa;YA6Gb,gBAAgB;YAwEhB,gBAAgB;IAoFxB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4E1F,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCpF,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAYjE,oBAAoB,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAYhB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;YACW,eAAe;IA0B7B;;OAEG;YACW,eAAe;CAiB9B"}
@@ -0,0 +1,565 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var LarkAdapter_1;
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.LarkAdapter = void 0;
47
+ const common_1 = require("@nestjs/common");
48
+ const lark = __importStar(require("@larksuiteoapi/node-sdk"));
49
+ const protocol_1 = require("@overlordai/protocol");
50
+ const adapter_registry_1 = require("../adapter.registry");
51
+ const bot_repository_1 = require("../../database/repositories/bot.repository");
52
+ const developer_repository_1 = require("../../database/repositories/developer.repository");
53
+ const redis_service_1 = require("../../redis/redis.service");
54
+ const dispatcher_service_1 = require("../../dispatcher/dispatcher.service");
55
+ const crypto_service_1 = require("../../common/crypto.service");
56
+ const lark_message_parser_1 = require("./lark-message.parser");
57
+ const lark_card_builder_1 = require("./lark-card.builder");
58
+ const lark_signature_1 = require("./lark-signature");
59
+ /**
60
+ * Lark Adapter — handles Lark webhooks, sends/updates messages,
61
+ * resolves users. Supports multiple bots via app_id routing.
62
+ */
63
+ let LarkAdapter = LarkAdapter_1 = class LarkAdapter {
64
+ botRepo;
65
+ developerRepo;
66
+ redis;
67
+ parser;
68
+ cardBuilder;
69
+ dispatcher;
70
+ registry;
71
+ cryptoService;
72
+ platform = protocol_1.Platform.LARK;
73
+ logger = new common_1.Logger(LarkAdapter_1.name);
74
+ /** Cache of Lark API clients by app_id. */
75
+ clients = new Map();
76
+ constructor(botRepo, developerRepo, redis, parser, cardBuilder, dispatcher, registry, cryptoService) {
77
+ this.botRepo = botRepo;
78
+ this.developerRepo = developerRepo;
79
+ this.redis = redis;
80
+ this.parser = parser;
81
+ this.cardBuilder = cardBuilder;
82
+ this.dispatcher = dispatcher;
83
+ this.registry = registry;
84
+ this.cryptoService = cryptoService;
85
+ }
86
+ // ---------------------------------------------------------------------------
87
+ // handleWebhook
88
+ // ---------------------------------------------------------------------------
89
+ async handleWebhook(req) {
90
+ const body = req.body;
91
+ // 1. Handle URL verification challenge
92
+ if (body.type === 'url_verification' && body.challenge) {
93
+ // Controller will detect this and return the challenge directly
94
+ return null;
95
+ }
96
+ const header = body.header;
97
+ if (!header) {
98
+ this.logger.warn('Webhook missing header');
99
+ return null;
100
+ }
101
+ const appId = header.app_id;
102
+ const eventType = header.event_type;
103
+ const eventId = header.event_id;
104
+ // 2. Look up bot instance by app_id
105
+ const botInstance = this.botRepo.findByAppId('lark', appId);
106
+ if (!botInstance) {
107
+ this.logger.warn(`Unknown app_id: ${appId}`);
108
+ return null;
109
+ }
110
+ // Register this app_id in the adapter registry
111
+ this.registry.registerAppId(appId, this);
112
+ // 3. Verify signature — mandatory when webhookToken is configured
113
+ const timestamp = req.headers['x-lark-request-timestamp'] ?? '';
114
+ const nonce = req.headers['x-lark-request-nonce'] ?? '';
115
+ const signature = req.headers['x-lark-signature'] ?? '';
116
+ // NOTE: JSON.stringify(req.body) may not match the original raw bytes sent by Lark
117
+ // (e.g. key ordering, whitespace). For accurate signature verification, configure
118
+ // NestJS to preserve the raw body (e.g. rawBody middleware or @RawBody() decorator)
119
+ // and use req.rawBody here instead.
120
+ const rawBody = req.rawBody
121
+ ?? (typeof req.body === 'string' ? req.body : JSON.stringify(req.body));
122
+ // Decrypt appSecret — stored AES-encrypted in DB
123
+ const decryptedSecret = this.cryptoService.decryptAes(botInstance.appSecret);
124
+ if (botInstance.webhookToken) {
125
+ // When webhookToken is configured, signature verification is mandatory
126
+ if (!signature) {
127
+ this.logger.warn(`Missing signature for app_id: ${appId} (webhookToken configured, signature required)`);
128
+ return null;
129
+ }
130
+ if (!(0, lark_signature_1.verifyLarkSignature)(timestamp, nonce, rawBody, decryptedSecret, signature)) {
131
+ this.logger.warn(`Invalid signature for app_id: ${appId}`);
132
+ return null;
133
+ }
134
+ }
135
+ else if (signature && !(0, lark_signature_1.verifyLarkSignature)(timestamp, nonce, rawBody, decryptedSecret, signature)) {
136
+ // When webhookToken is not configured, still verify if a signature is present
137
+ this.logger.warn(`Invalid signature for app_id: ${appId}`);
138
+ return null;
139
+ }
140
+ // 4. Route by event type (event dedup is handled by the dispatcher's handleCommand)
141
+ if (eventType === 'card.action.trigger') {
142
+ return this.handleCardAction(body, appId);
143
+ }
144
+ if (eventType === 'im.message.receive_v1') {
145
+ return this.handleMessage(body, appId);
146
+ }
147
+ this.logger.debug(`Ignoring event type: ${eventType}`);
148
+ return null;
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ // Handle im.message.receive_v1
152
+ // ---------------------------------------------------------------------------
153
+ async handleMessage(body, appId) {
154
+ const event = body.event;
155
+ const message = event?.message;
156
+ if (!message) {
157
+ this.logger.warn('Message event missing message field');
158
+ return null;
159
+ }
160
+ // Only handle text messages
161
+ if (message.message_type !== 'text') {
162
+ this.logger.debug(`Skipping non-text message type: ${message.message_type}`);
163
+ return null;
164
+ }
165
+ // Parse message content JSON
166
+ let textContent;
167
+ try {
168
+ const parsed = JSON.parse(message.content);
169
+ textContent = parsed.text ?? '';
170
+ }
171
+ catch {
172
+ this.logger.warn('Failed to parse message content JSON');
173
+ return null;
174
+ }
175
+ // Check for @bot mention and extract the command text
176
+ const commandText = this.extractCommandText(textContent, message.mentions, message.chat_type);
177
+ if (commandText === null) {
178
+ // No @bot mention — ignore
179
+ return null;
180
+ }
181
+ // Resolve sender UID early — needed for both input replies and commands
182
+ const senderUid = event?.sender?.sender_id?.open_id ??
183
+ event?.sender?.sender_id?.user_id ??
184
+ '';
185
+ // Check if this is a reply to an input-mode notification (parent_id handling)
186
+ if (message.parent_id) {
187
+ return this.handleInputReply(message, commandText, appId, senderUid || undefined);
188
+ }
189
+ // Parse the command
190
+ const parsed = this.parser.parse(commandText);
191
+ if (parsed.type === 'help') {
192
+ // Send help message
193
+ await this.sendHelpMessage(message.chat_id, appId);
194
+ return null;
195
+ }
196
+ if (!senderUid) {
197
+ this.logger.warn('Message event missing sender ID');
198
+ return null;
199
+ }
200
+ const developer = await this.resolveUser(senderUid);
201
+ if (!developer) {
202
+ this.logger.warn(`Cannot resolve user for platform UID: ${senderUid}`);
203
+ await this.sendTextMessage(message.chat_id, 'Sorry, your Lark account is not linked to an Overlord developer account.', appId);
204
+ return null;
205
+ }
206
+ // Resolve default project from chat binding if not specified
207
+ const chatBinding = this.botRepo.findBindingByChatId(message.chat_id);
208
+ if (!parsed.args.project && chatBinding?.projectKey) {
209
+ parsed.args.project = chatBinding.projectKey;
210
+ }
211
+ // Build Command
212
+ const command = {
213
+ type: parsed.type,
214
+ args: parsed.args,
215
+ platform: protocol_1.Platform.LARK,
216
+ user: {
217
+ id: developer.id,
218
+ name: developer.name,
219
+ platformUid: senderUid,
220
+ },
221
+ chat: {
222
+ id: message.chat_id,
223
+ platformChatId: message.chat_id,
224
+ },
225
+ source: {
226
+ appId,
227
+ chatId: message.chat_id,
228
+ msgId: message.message_id,
229
+ },
230
+ eventId: body.header?.event_id ?? '',
231
+ };
232
+ return command;
233
+ }
234
+ // ---------------------------------------------------------------------------
235
+ // Handle card.action.trigger (interactive stage button callback)
236
+ // ---------------------------------------------------------------------------
237
+ async handleCardAction(body, _appId) {
238
+ const action = body.event?.action;
239
+ if (!action?.value) {
240
+ this.logger.warn('Card action missing value');
241
+ return null;
242
+ }
243
+ const value = action.value;
244
+ // Handle stage confirm actions
245
+ if (value.taskId !== undefined && value.stageIndex !== undefined && value.result !== undefined) {
246
+ // Authorization: resolve the Lark sender and verify they own the task or are an admin
247
+ const senderOpenId = body.event?.sender?.sender_id?.open_id ?? '';
248
+ if (!senderOpenId) {
249
+ this.logger.warn(`Card action for task #${value.taskId} has no sender open_id — rejecting`);
250
+ return null;
251
+ }
252
+ const developer = await this.resolveUser(senderOpenId);
253
+ if (!developer) {
254
+ this.logger.warn(`Card action for task #${value.taskId} from unknown Lark user ${senderOpenId} — rejecting`);
255
+ return null;
256
+ }
257
+ const task = this.dispatcher.getTask(value.taskId);
258
+ if (!task) {
259
+ this.logger.warn(`Card action references non-existent task #${value.taskId}`);
260
+ return null;
261
+ }
262
+ const isOwner = task.createdBy === developer.id || task.developerId === developer.id;
263
+ const isAdmin = developer.role === 'admin';
264
+ if (!isOwner && !isAdmin) {
265
+ this.logger.warn(`Card action for task #${value.taskId} rejected: developer ${developer.id} (${developer.name}) is neither the task owner nor an admin`);
266
+ return null;
267
+ }
268
+ try {
269
+ await this.dispatcher.confirmStage(value.taskId, value.stageIndex, value.result);
270
+ this.logger.log(`Stage confirm forwarded: task #${value.taskId}, stage ${value.stageIndex}, result=${value.result} by developer ${developer.id}`);
271
+ }
272
+ catch (err) {
273
+ this.logger.error(`Failed to confirm stage for task #${value.taskId}: ${err instanceof Error ? err.message : String(err)}`);
274
+ }
275
+ // Card action callbacks don't produce a Command for the dispatcher pipeline
276
+ return null;
277
+ }
278
+ this.logger.debug(`Unhandled card action value: ${JSON.stringify(value)}`);
279
+ return null;
280
+ }
281
+ // ---------------------------------------------------------------------------
282
+ // Handle input-mode reply messages
283
+ // ---------------------------------------------------------------------------
284
+ async handleInputReply(message, text, _appId, senderOpenId) {
285
+ const parentId = message.parent_id;
286
+ if (!parentId)
287
+ return null;
288
+ // Look up if parent_id corresponds to an input-mode notification
289
+ const inputKey = `input_msg:${parentId}`;
290
+ const raw = await this.redis.get(inputKey);
291
+ if (!raw) {
292
+ // Not a reply to an input-mode message — ignore
293
+ return null;
294
+ }
295
+ let inputData;
296
+ try {
297
+ inputData = JSON.parse(raw);
298
+ }
299
+ catch {
300
+ return null;
301
+ }
302
+ // Authorization: verify the sender owns the task or is an admin
303
+ if (!senderOpenId) {
304
+ this.logger.warn(`Input reply for task #${inputData.taskId} has no sender — rejecting`);
305
+ return null;
306
+ }
307
+ const developer = await this.resolveUser(senderOpenId);
308
+ if (!developer) {
309
+ this.logger.warn(`Input reply for task #${inputData.taskId} from unknown Lark user ${senderOpenId} — rejecting`);
310
+ return null;
311
+ }
312
+ const task = this.dispatcher.getTask(inputData.taskId);
313
+ if (!task) {
314
+ this.logger.warn(`Input reply references non-existent task #${inputData.taskId}`);
315
+ return null;
316
+ }
317
+ const isOwner = task.createdBy === developer.id || task.developerId === developer.id;
318
+ const isAdmin = developer.role === 'admin';
319
+ if (!isOwner && !isAdmin) {
320
+ this.logger.warn(`Input reply for task #${inputData.taskId} rejected: developer ${developer.id} (${developer.name}) is neither the task owner nor an admin`);
321
+ return null;
322
+ }
323
+ const replyText = text.trim();
324
+ if (!replyText) {
325
+ this.logger.debug('Empty reply to input-mode message, ignoring');
326
+ return null;
327
+ }
328
+ try {
329
+ await this.dispatcher.confirmStage(inputData.taskId, inputData.stageIndex, replyText);
330
+ this.logger.log(`Input reply forwarded: task #${inputData.taskId}, stage ${inputData.stageIndex} by developer ${developer.id}`);
331
+ }
332
+ catch (err) {
333
+ this.logger.error(`Failed to forward input reply for task #${inputData.taskId}: ${err instanceof Error ? err.message : String(err)}`);
334
+ }
335
+ // Clean up the mapping
336
+ await this.redis.del(inputKey);
337
+ return null;
338
+ }
339
+ // ---------------------------------------------------------------------------
340
+ // sendMessage
341
+ // ---------------------------------------------------------------------------
342
+ async sendMessage(chatId, content, stageIndex) {
343
+ // Determine the app_id from the chat binding
344
+ const binding = this.botRepo.findBindingByChatId(chatId);
345
+ const appId = binding ? this.resolveAppIdFromBinding(binding.botInstanceId) : null;
346
+ if (!appId) {
347
+ this.logger.warn(`No bot bound to chat: ${chatId}`);
348
+ return '';
349
+ }
350
+ const client = this.getOrCreateClient(appId);
351
+ if (!client)
352
+ return '';
353
+ try {
354
+ if (content.type === 'text') {
355
+ const resp = await client.im.message.create({
356
+ data: {
357
+ receive_id: chatId,
358
+ msg_type: 'text',
359
+ content: JSON.stringify({ text: content.text ?? '' }),
360
+ },
361
+ params: { receive_id_type: 'chat_id' },
362
+ });
363
+ return resp?.data?.message_id ?? '';
364
+ }
365
+ // Card message
366
+ const cardJson = this.cardBuilder.toLarkCardJson(content);
367
+ const resp = await client.im.message.create({
368
+ data: {
369
+ receive_id: chatId,
370
+ msg_type: 'interactive',
371
+ content: cardJson,
372
+ },
373
+ params: { receive_id_type: 'chat_id' },
374
+ });
375
+ const msgId = resp?.data?.message_id ?? '';
376
+ // If this is an input-mode card, store the mapping for reply detection
377
+ if (content.card?.confirmMode === 'input' && msgId) {
378
+ const taskIdMatch = content.card.fields.find((f) => f.label === 'Task');
379
+ const taskIdStr = taskIdMatch?.value.replace('#', '') ?? '';
380
+ const taskId = parseInt(taskIdStr, 10);
381
+ if (!isNaN(taskId)) {
382
+ // Use the stageIndex parameter if provided, otherwise try to extract from card fields
383
+ let resolvedStageIndex = stageIndex ?? 0;
384
+ if (stageIndex === undefined) {
385
+ const stageField = content.card.fields.find((f) => f.label === 'Stage');
386
+ if (stageField) {
387
+ const parsed = parseInt(stageField.value, 10);
388
+ if (!isNaN(parsed))
389
+ resolvedStageIndex = parsed;
390
+ }
391
+ }
392
+ await this.redis.setex(`input_msg:${msgId}`, 1800, // 30 minutes TTL
393
+ JSON.stringify({ taskId, stageIndex: resolvedStageIndex }));
394
+ }
395
+ }
396
+ return msgId;
397
+ }
398
+ catch (err) {
399
+ this.logger.error(`Failed to send message to chat ${chatId}: ${err instanceof Error ? err.message : String(err)}`);
400
+ return '';
401
+ }
402
+ }
403
+ // ---------------------------------------------------------------------------
404
+ // updateMessage
405
+ // ---------------------------------------------------------------------------
406
+ async updateMessage(msgId, content, appId) {
407
+ // Look up the correct client by appId, fall back to first available client
408
+ const client = appId ? this.getOrCreateClient(appId) : this.findClientForMessage();
409
+ if (!client) {
410
+ this.logger.warn('No Lark client available for message update');
411
+ return;
412
+ }
413
+ try {
414
+ if (content.type === 'text') {
415
+ await client.im.message.patch({
416
+ path: { message_id: msgId },
417
+ data: {
418
+ msg_type: 'text',
419
+ content: JSON.stringify({ text: content.text ?? '' }),
420
+ },
421
+ });
422
+ return;
423
+ }
424
+ // Card update
425
+ const cardJson = this.cardBuilder.toLarkCardJson(content);
426
+ await client.im.message.patch({
427
+ path: { message_id: msgId },
428
+ data: { msg_type: 'interactive', content: cardJson },
429
+ });
430
+ }
431
+ catch (err) {
432
+ this.logger.error(`Failed to update message ${msgId}: ${err instanceof Error ? err.message : String(err)}`);
433
+ }
434
+ }
435
+ // ---------------------------------------------------------------------------
436
+ // resolveUser
437
+ // ---------------------------------------------------------------------------
438
+ async resolveUser(platformUid) {
439
+ const dev = this.developerRepo.findByPlatformUid('lark', platformUid);
440
+ if (!dev)
441
+ return null;
442
+ // Strip sensitive fields — resolveUser results are used for authorization
443
+ // checks only (id, name, role) and must never leak passwordHash/totpSecret.
444
+ return developer_repository_1.DeveloperRepository.stripSecrets(dev);
445
+ }
446
+ // ---------------------------------------------------------------------------
447
+ // Public helper: Store input message mapping for reply detection
448
+ // ---------------------------------------------------------------------------
449
+ async storeInputMsgMapping(msgId, taskId, stageIndex) {
450
+ await this.redis.setex(`input_msg:${msgId}`, 1800, JSON.stringify({ taskId, stageIndex }));
451
+ }
452
+ // ---------------------------------------------------------------------------
453
+ // Internal helpers
454
+ // ---------------------------------------------------------------------------
455
+ /**
456
+ * Extract the command text from a message, stripping the @bot mention.
457
+ * Returns null if the message does not contain a @bot mention.
458
+ */
459
+ extractCommandText(text, mentions, chatType) {
460
+ if (!mentions || mentions.length === 0) {
461
+ // In P2P (direct) chats, no @mention is needed — treat the full text as the command.
462
+ if (chatType === 'p2p') {
463
+ return text.trim();
464
+ }
465
+ // In group chats, @bot is required. If no mentions, ignore.
466
+ return null;
467
+ }
468
+ // Replace @mention placeholders with empty string to extract the command
469
+ let commandText = text;
470
+ for (const mention of mentions) {
471
+ // Lark uses @_user_1 style placeholders in the text
472
+ commandText = commandText.replace(mention.key, '');
473
+ }
474
+ return commandText.trim();
475
+ }
476
+ /**
477
+ * Get or create a Lark API client for the given app_id.
478
+ */
479
+ getOrCreateClient(appId) {
480
+ const existing = this.clients.get(appId);
481
+ if (existing)
482
+ return existing;
483
+ const botInstance = this.botRepo.findByAppId('lark', appId);
484
+ if (!botInstance)
485
+ return null;
486
+ const decryptedSecret = this.cryptoService.decryptAes(botInstance.appSecret);
487
+ const client = new lark.Client({
488
+ appId: botInstance.appId,
489
+ appSecret: decryptedSecret,
490
+ appType: lark.AppType.SelfBuild,
491
+ });
492
+ this.clients.set(appId, client);
493
+ return client;
494
+ }
495
+ /**
496
+ * Resolve an app_id from a bot instance ID (for chat binding lookups).
497
+ */
498
+ resolveAppIdFromBinding(botInstanceId) {
499
+ const bot = this.botRepo.findById(botInstanceId);
500
+ return bot?.appId ?? null;
501
+ }
502
+ /**
503
+ * Find any available Lark client for operations that don't have a specific app_id context.
504
+ */
505
+ findClientForMessage() {
506
+ // Return the first available client
507
+ const first = this.clients.values().next();
508
+ return first.done ? null : first.value;
509
+ }
510
+ /**
511
+ * Send a plain text message (internal helper).
512
+ */
513
+ async sendTextMessage(chatId, text, appId) {
514
+ const client = this.getOrCreateClient(appId);
515
+ if (!client)
516
+ return '';
517
+ try {
518
+ const resp = await client.im.message.create({
519
+ data: {
520
+ receive_id: chatId,
521
+ msg_type: 'text',
522
+ content: JSON.stringify({ text }),
523
+ },
524
+ params: { receive_id_type: 'chat_id' },
525
+ });
526
+ return resp?.data?.message_id ?? '';
527
+ }
528
+ catch (err) {
529
+ this.logger.error(`Failed to send text message: ${err instanceof Error ? err.message : String(err)}`);
530
+ return '';
531
+ }
532
+ }
533
+ /**
534
+ * Send a help message listing available commands.
535
+ */
536
+ async sendHelpMessage(chatId, appId) {
537
+ const helpText = [
538
+ 'Available commands:',
539
+ ' develop "description" [--project key] [--on machine]',
540
+ ' progress [#taskId]',
541
+ ' cancel #taskId',
542
+ ' retry #taskId',
543
+ ' list [--project key]',
544
+ ' workspace #taskId',
545
+ ' logs #taskId',
546
+ ' confirm #taskId',
547
+ ' drain machine-name',
548
+ ' undrain machine-name',
549
+ ].join('\n');
550
+ await this.sendTextMessage(chatId, helpText, appId);
551
+ }
552
+ };
553
+ exports.LarkAdapter = LarkAdapter;
554
+ exports.LarkAdapter = LarkAdapter = LarkAdapter_1 = __decorate([
555
+ (0, common_1.Injectable)(),
556
+ __metadata("design:paramtypes", [bot_repository_1.BotRepository,
557
+ developer_repository_1.DeveloperRepository,
558
+ redis_service_1.RedisService,
559
+ lark_message_parser_1.LarkMessageParser,
560
+ lark_card_builder_1.LarkCardBuilder,
561
+ dispatcher_service_1.DispatcherService,
562
+ adapter_registry_1.AdapterRegistry,
563
+ crypto_service_1.CryptoService])
564
+ ], LarkAdapter);
565
+ //# sourceMappingURL=lark.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark.adapter.js","sourceRoot":"","sources":["../../../src/adapters/lark/lark.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Request, Response } from 'express';
2
+ import { LarkAdapter } from './lark.adapter';
3
+ import { DispatcherService } from '../../dispatcher/dispatcher.service';
4
+ import { LarkCardBuilder } from './lark-card.builder';
5
+ /**
6
+ * POST /webhook/lark
7
+ *
8
+ * Single endpoint for all Lark webhook events:
9
+ * - URL verification (challenge)
10
+ * - im.message.receive_v1 (messages)
11
+ * - card.action.trigger (button callbacks)
12
+ */
13
+ export declare class LarkController {
14
+ private readonly larkAdapter;
15
+ private readonly dispatcher;
16
+ private readonly cardBuilder;
17
+ private readonly logger;
18
+ constructor(larkAdapter: LarkAdapter, dispatcher: DispatcherService, cardBuilder: LarkCardBuilder);
19
+ handleWebhook(req: Request, res: Response): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=lark.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark.controller.d.ts","sourceRoot":"","sources":["../../../src/adapters/lark/lark.controller.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;;;GAOG;AACH,qBACa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAL9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAGvC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,iBAAiB,EAC7B,WAAW,EAAE,eAAe;IAIzC,aAAa,CACV,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,GACnB,OAAO,CAAC,IAAI,CAAC;CAoFjB"}