@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.
- package/database/migrations/001-init-schema.sql +226 -0
- package/database/migrations/002-add-indexes.sql +17 -0
- package/database/migrations/003-add-settings-table.sql +4 -0
- package/database/migrations/004-add-developer-id-index.sql +5 -0
- package/dist/adapters/adapter.interface.d.ts +41 -0
- package/dist/adapters/adapter.interface.d.ts.map +1 -0
- package/dist/adapters/adapter.interface.js +6 -0
- package/dist/adapters/adapter.interface.js.map +1 -0
- package/dist/adapters/adapter.module.d.ts +3 -0
- package/dist/adapters/adapter.module.d.ts.map +1 -0
- package/dist/adapters/adapter.module.js +54 -0
- package/dist/adapters/adapter.module.js.map +1 -0
- package/dist/adapters/adapter.registry.d.ts +19 -0
- package/dist/adapters/adapter.registry.d.ts.map +1 -0
- package/dist/adapters/adapter.registry.js +51 -0
- package/dist/adapters/adapter.registry.js.map +1 -0
- package/dist/adapters/lark/lark-card.builder.d.ts +48 -0
- package/dist/adapters/lark/lark-card.builder.d.ts.map +1 -0
- package/dist/adapters/lark/lark-card.builder.js +259 -0
- package/dist/adapters/lark/lark-card.builder.js.map +1 -0
- package/dist/adapters/lark/lark-message.parser.d.ts +51 -0
- package/dist/adapters/lark/lark-message.parser.d.ts.map +1 -0
- package/dist/adapters/lark/lark-message.parser.js +189 -0
- package/dist/adapters/lark/lark-message.parser.js.map +1 -0
- package/dist/adapters/lark/lark-signature.d.ts +13 -0
- package/dist/adapters/lark/lark-signature.d.ts.map +1 -0
- package/dist/adapters/lark/lark-signature.js +58 -0
- package/dist/adapters/lark/lark-signature.js.map +1 -0
- package/dist/adapters/lark/lark.adapter.d.ts +65 -0
- package/dist/adapters/lark/lark.adapter.d.ts.map +1 -0
- package/dist/adapters/lark/lark.adapter.js +565 -0
- package/dist/adapters/lark/lark.adapter.js.map +1 -0
- package/dist/adapters/lark/lark.controller.d.ts +21 -0
- package/dist/adapters/lark/lark.controller.d.ts.map +1 -0
- package/dist/adapters/lark/lark.controller.js +120 -0
- package/dist/adapters/lark/lark.controller.js.map +1 -0
- package/dist/adapters/slack/slack.adapter.d.ts +19 -0
- package/dist/adapters/slack/slack.adapter.d.ts.map +1 -0
- package/dist/adapters/slack/slack.adapter.js +42 -0
- package/dist/adapters/slack/slack.adapter.js.map +1 -0
- package/dist/app.module.d.ts +5 -0
- package/dist/app.module.d.ts.map +1 -0
- package/dist/app.module.js +48 -0
- package/dist/app.module.js.map +1 -0
- package/dist/auth/auth.controller.d.ts +15 -0
- package/dist/auth/auth.controller.d.ts.map +1 -0
- package/dist/auth/auth.controller.js +67 -0
- package/dist/auth/auth.controller.js.map +1 -0
- package/dist/auth/auth.module.d.ts +3 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/auth.module.js +46 -0
- package/dist/auth/auth.module.js.map +1 -0
- package/dist/auth/auth.service.d.ts +62 -0
- package/dist/auth/auth.service.d.ts.map +1 -0
- package/dist/auth/auth.service.js +307 -0
- package/dist/auth/auth.service.js.map +1 -0
- package/dist/auth/decorators/allow-totp-setup.decorator.d.ts +3 -0
- package/dist/auth/decorators/allow-totp-setup.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/allow-totp-setup.decorator.js +8 -0
- package/dist/auth/decorators/allow-totp-setup.decorator.js.map +1 -0
- package/dist/auth/decorators/project-roles.decorator.d.ts +4 -0
- package/dist/auth/decorators/project-roles.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/project-roles.decorator.js +8 -0
- package/dist/auth/decorators/project-roles.decorator.js.map +1 -0
- package/dist/auth/decorators/roles.decorator.d.ts +4 -0
- package/dist/auth/decorators/roles.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/roles.decorator.js +8 -0
- package/dist/auth/decorators/roles.decorator.js.map +1 -0
- package/dist/auth/extract-user.middleware.d.ts +21 -0
- package/dist/auth/extract-user.middleware.d.ts.map +1 -0
- package/dist/auth/extract-user.middleware.js +57 -0
- package/dist/auth/extract-user.middleware.js.map +1 -0
- package/dist/auth/guards/jwt-auth.guard.d.ts +14 -0
- package/dist/auth/guards/jwt-auth.guard.d.ts.map +1 -0
- package/dist/auth/guards/jwt-auth.guard.js +139 -0
- package/dist/auth/guards/jwt-auth.guard.js.map +1 -0
- package/dist/auth/guards/project-role.guard.d.ts +10 -0
- package/dist/auth/guards/project-role.guard.d.ts.map +1 -0
- package/dist/auth/guards/project-role.guard.js +72 -0
- package/dist/auth/guards/project-role.guard.js.map +1 -0
- package/dist/auth/guards/roles.guard.d.ts +8 -0
- package/dist/auth/guards/roles.guard.d.ts.map +1 -0
- package/dist/auth/guards/roles.guard.js +56 -0
- package/dist/auth/guards/roles.guard.js.map +1 -0
- package/dist/auth/jwt.strategy.d.ts +23 -0
- package/dist/auth/jwt.strategy.d.ts.map +1 -0
- package/dist/auth/jwt.strategy.js +49 -0
- package/dist/auth/jwt.strategy.js.map +1 -0
- package/dist/common/crypto.service.d.ts +31 -0
- package/dist/common/crypto.service.d.ts.map +1 -0
- package/dist/common/crypto.service.js +120 -0
- package/dist/common/crypto.service.js.map +1 -0
- package/dist/common/error-filter.d.ts +6 -0
- package/dist/common/error-filter.d.ts.map +1 -0
- package/dist/common/error-filter.js +78 -0
- package/dist/common/error-filter.js.map +1 -0
- package/dist/common/health.controller.d.ts +13 -0
- package/dist/common/health.controller.d.ts.map +1 -0
- package/dist/common/health.controller.js +75 -0
- package/dist/common/health.controller.js.map +1 -0
- package/dist/common/logger.service.d.ts +11 -0
- package/dist/common/logger.service.d.ts.map +1 -0
- package/dist/common/logger.service.js +48 -0
- package/dist/common/logger.service.js.map +1 -0
- package/dist/common/pagination.d.ts +18 -0
- package/dist/common/pagination.d.ts.map +1 -0
- package/dist/common/pagination.js +39 -0
- package/dist/common/pagination.js.map +1 -0
- package/dist/common/rate-limit.guard.d.ts +48 -0
- package/dist/common/rate-limit.guard.d.ts.map +1 -0
- package/dist/common/rate-limit.guard.js +129 -0
- package/dist/common/rate-limit.guard.js.map +1 -0
- package/dist/common/sensitive-filter.d.ts +7 -0
- package/dist/common/sensitive-filter.d.ts.map +1 -0
- package/dist/common/sensitive-filter.js +20 -0
- package/dist/common/sensitive-filter.js.map +1 -0
- package/dist/database/database.module.d.ts +3 -0
- package/dist/database/database.module.d.ts.map +1 -0
- package/dist/database/database.module.js +22 -0
- package/dist/database/database.module.js.map +1 -0
- package/dist/database/database.service.d.ts +13 -0
- package/dist/database/database.service.d.ts.map +1 -0
- package/dist/database/database.service.js +107 -0
- package/dist/database/database.service.js.map +1 -0
- package/dist/database/migration-runner.d.ts +5 -0
- package/dist/database/migration-runner.d.ts.map +1 -0
- package/dist/database/migration-runner.js +86 -0
- package/dist/database/migration-runner.js.map +1 -0
- package/dist/database/repositories/audit-log.repository.d.ts +29 -0
- package/dist/database/repositories/audit-log.repository.d.ts.map +1 -0
- package/dist/database/repositories/audit-log.repository.js +80 -0
- package/dist/database/repositories/audit-log.repository.js.map +1 -0
- package/dist/database/repositories/bot.repository.d.ts +67 -0
- package/dist/database/repositories/bot.repository.d.ts.map +1 -0
- package/dist/database/repositories/bot.repository.js +133 -0
- package/dist/database/repositories/bot.repository.js.map +1 -0
- package/dist/database/repositories/developer-token.repository.d.ts +40 -0
- package/dist/database/repositories/developer-token.repository.d.ts.map +1 -0
- package/dist/database/repositories/developer-token.repository.js +84 -0
- package/dist/database/repositories/developer-token.repository.js.map +1 -0
- package/dist/database/repositories/developer.repository.d.ts +25 -0
- package/dist/database/repositories/developer.repository.d.ts.map +1 -0
- package/dist/database/repositories/developer.repository.js +139 -0
- package/dist/database/repositories/developer.repository.js.map +1 -0
- package/dist/database/repositories/machine.repository.d.ts +39 -0
- package/dist/database/repositories/machine.repository.d.ts.map +1 -0
- package/dist/database/repositories/machine.repository.js +176 -0
- package/dist/database/repositories/machine.repository.js.map +1 -0
- package/dist/database/repositories/notification.repository.d.ts +19 -0
- package/dist/database/repositories/notification.repository.d.ts.map +1 -0
- package/dist/database/repositories/notification.repository.js +94 -0
- package/dist/database/repositories/notification.repository.js.map +1 -0
- package/dist/database/repositories/project-member.repository.d.ts +30 -0
- package/dist/database/repositories/project-member.repository.d.ts.map +1 -0
- package/dist/database/repositories/project-member.repository.js +75 -0
- package/dist/database/repositories/project-member.repository.js.map +1 -0
- package/dist/database/repositories/project.repository.d.ts +24 -0
- package/dist/database/repositories/project.repository.d.ts.map +1 -0
- package/dist/database/repositories/project.repository.js +154 -0
- package/dist/database/repositories/project.repository.js.map +1 -0
- package/dist/database/repositories/session.repository.d.ts +19 -0
- package/dist/database/repositories/session.repository.d.ts.map +1 -0
- package/dist/database/repositories/session.repository.js +117 -0
- package/dist/database/repositories/session.repository.js.map +1 -0
- package/dist/database/repositories/task.repository.d.ts +37 -0
- package/dist/database/repositories/task.repository.d.ts.map +1 -0
- package/dist/database/repositories/task.repository.js +229 -0
- package/dist/database/repositories/task.repository.js.map +1 -0
- package/dist/database/repositories/worker-token.repository.d.ts +20 -0
- package/dist/database/repositories/worker-token.repository.d.ts.map +1 -0
- package/dist/database/repositories/worker-token.repository.js +94 -0
- package/dist/database/repositories/worker-token.repository.js.map +1 -0
- package/dist/database/repositories/workspace.repository.d.ts +19 -0
- package/dist/database/repositories/workspace.repository.d.ts.map +1 -0
- package/dist/database/repositories/workspace.repository.js +82 -0
- package/dist/database/repositories/workspace.repository.js.map +1 -0
- package/dist/dispatcher/capability.service.d.ts +50 -0
- package/dist/dispatcher/capability.service.d.ts.map +1 -0
- package/dist/dispatcher/capability.service.js +159 -0
- package/dist/dispatcher/capability.service.js.map +1 -0
- package/dist/dispatcher/cleanup.service.d.ts +23 -0
- package/dist/dispatcher/cleanup.service.d.ts.map +1 -0
- package/dist/dispatcher/cleanup.service.js +107 -0
- package/dist/dispatcher/cleanup.service.js.map +1 -0
- package/dist/dispatcher/dedup.service.d.ts +48 -0
- package/dist/dispatcher/dedup.service.d.ts.map +1 -0
- package/dist/dispatcher/dedup.service.js +189 -0
- package/dist/dispatcher/dedup.service.js.map +1 -0
- package/dist/dispatcher/dispatcher.module.d.ts +3 -0
- package/dist/dispatcher/dispatcher.module.d.ts.map +1 -0
- package/dist/dispatcher/dispatcher.module.js +76 -0
- package/dist/dispatcher/dispatcher.module.js.map +1 -0
- package/dist/dispatcher/dispatcher.service.d.ts +134 -0
- package/dist/dispatcher/dispatcher.service.d.ts.map +1 -0
- package/dist/dispatcher/dispatcher.service.js +1034 -0
- package/dist/dispatcher/dispatcher.service.js.map +1 -0
- package/dist/dispatcher/heartbeat.service.d.ts +50 -0
- package/dist/dispatcher/heartbeat.service.d.ts.map +1 -0
- package/dist/dispatcher/heartbeat.service.js +154 -0
- package/dist/dispatcher/heartbeat.service.js.map +1 -0
- package/dist/dispatcher/machine-selector.d.ts +18 -0
- package/dist/dispatcher/machine-selector.d.ts.map +1 -0
- package/dist/dispatcher/machine-selector.js +144 -0
- package/dist/dispatcher/machine-selector.js.map +1 -0
- package/dist/dispatcher/pty-relay.service.d.ts +75 -0
- package/dist/dispatcher/pty-relay.service.d.ts.map +1 -0
- package/dist/dispatcher/pty-relay.service.js +404 -0
- package/dist/dispatcher/pty-relay.service.js.map +1 -0
- package/dist/dispatcher/reconciler.d.ts +39 -0
- package/dist/dispatcher/reconciler.d.ts.map +1 -0
- package/dist/dispatcher/reconciler.js +556 -0
- package/dist/dispatcher/reconciler.js.map +1 -0
- package/dist/dispatcher/scheduler.service.d.ts +50 -0
- package/dist/dispatcher/scheduler.service.d.ts.map +1 -0
- package/dist/dispatcher/scheduler.service.js +287 -0
- package/dist/dispatcher/scheduler.service.js.map +1 -0
- package/dist/dispatcher/state-machine.d.ts +16 -0
- package/dist/dispatcher/state-machine.d.ts.map +1 -0
- package/dist/dispatcher/state-machine.js +77 -0
- package/dist/dispatcher/state-machine.js.map +1 -0
- package/dist/dispatcher/task-log-batcher.d.ts +50 -0
- package/dist/dispatcher/task-log-batcher.d.ts.map +1 -0
- package/dist/dispatcher/task-log-batcher.js +184 -0
- package/dist/dispatcher/task-log-batcher.js.map +1 -0
- package/dist/dispatcher/worker-connection.manager.d.ts +49 -0
- package/dist/dispatcher/worker-connection.manager.d.ts.map +1 -0
- package/dist/dispatcher/worker-connection.manager.js +128 -0
- package/dist/dispatcher/worker-connection.manager.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +85 -0
- package/dist/main.js.map +1 -0
- package/dist/notifier/debouncer.d.ts +39 -0
- package/dist/notifier/debouncer.d.ts.map +1 -0
- package/dist/notifier/debouncer.js +123 -0
- package/dist/notifier/debouncer.js.map +1 -0
- package/dist/notifier/notification-consumer.d.ts +88 -0
- package/dist/notifier/notification-consumer.d.ts.map +1 -0
- package/dist/notifier/notification-consumer.js +186 -0
- package/dist/notifier/notification-consumer.js.map +1 -0
- package/dist/notifier/notifier.module.d.ts +9 -0
- package/dist/notifier/notifier.module.d.ts.map +1 -0
- package/dist/notifier/notifier.module.js +58 -0
- package/dist/notifier/notifier.module.js.map +1 -0
- package/dist/notifier/notifier.service.d.ts +40 -0
- package/dist/notifier/notifier.service.d.ts.map +1 -0
- package/dist/notifier/notifier.service.js +191 -0
- package/dist/notifier/notifier.service.js.map +1 -0
- package/dist/notifier/template.service.d.ts +42 -0
- package/dist/notifier/template.service.d.ts.map +1 -0
- package/dist/notifier/template.service.js +201 -0
- package/dist/notifier/template.service.js.map +1 -0
- package/dist/redis/redis.module.d.ts +3 -0
- package/dist/redis/redis.module.d.ts.map +1 -0
- package/dist/redis/redis.module.js +22 -0
- package/dist/redis/redis.module.js.map +1 -0
- package/dist/redis/redis.service.d.ts +19 -0
- package/dist/redis/redis.service.d.ts.map +1 -0
- package/dist/redis/redis.service.js +69 -0
- package/dist/redis/redis.service.js.map +1 -0
- package/dist/web/admin/admin-audit.controller.d.ts +7 -0
- package/dist/web/admin/admin-audit.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-audit.controller.js +53 -0
- package/dist/web/admin/admin-audit.controller.js.map +1 -0
- package/dist/web/admin/admin-bot.controller.d.ts +79 -0
- package/dist/web/admin/admin-bot.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-bot.controller.js +193 -0
- package/dist/web/admin/admin-bot.controller.js.map +1 -0
- package/dist/web/admin/admin-developer.controller.d.ts +52 -0
- package/dist/web/admin/admin-developer.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-developer.controller.js +160 -0
- package/dist/web/admin/admin-developer.controller.js.map +1 -0
- package/dist/web/admin/admin-machine.controller.d.ts +64 -0
- package/dist/web/admin/admin-machine.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-machine.controller.js +111 -0
- package/dist/web/admin/admin-machine.controller.js.map +1 -0
- package/dist/web/admin/admin-project.controller.d.ts +45 -0
- package/dist/web/admin/admin-project.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-project.controller.js +207 -0
- package/dist/web/admin/admin-project.controller.js.map +1 -0
- package/dist/web/admin/admin-settings.controller.d.ts +18 -0
- package/dist/web/admin/admin-settings.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-settings.controller.js +93 -0
- package/dist/web/admin/admin-settings.controller.js.map +1 -0
- package/dist/web/admin/admin-token.controller.d.ts +45 -0
- package/dist/web/admin/admin-token.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-token.controller.js +182 -0
- package/dist/web/admin/admin-token.controller.js.map +1 -0
- package/dist/web/dashboard.controller.d.ts +16 -0
- package/dist/web/dashboard.controller.d.ts.map +1 -0
- package/dist/web/dashboard.controller.js +78 -0
- package/dist/web/dashboard.controller.js.map +1 -0
- package/dist/web/dashboard.service.d.ts +39 -0
- package/dist/web/dashboard.service.d.ts.map +1 -0
- package/dist/web/dashboard.service.js +234 -0
- package/dist/web/dashboard.service.js.map +1 -0
- package/dist/web/interaction.service.d.ts +42 -0
- package/dist/web/interaction.service.d.ts.map +1 -0
- package/dist/web/interaction.service.js +102 -0
- package/dist/web/interaction.service.js.map +1 -0
- package/dist/web/machine.controller.d.ts +102 -0
- package/dist/web/machine.controller.d.ts.map +1 -0
- package/dist/web/machine.controller.js +121 -0
- package/dist/web/machine.controller.js.map +1 -0
- package/dist/web/notification.controller.d.ts +22 -0
- package/dist/web/notification.controller.d.ts.map +1 -0
- package/dist/web/notification.controller.js +70 -0
- package/dist/web/notification.controller.js.map +1 -0
- package/dist/web/profile.controller.d.ts +70 -0
- package/dist/web/profile.controller.d.ts.map +1 -0
- package/dist/web/profile.controller.js +262 -0
- package/dist/web/profile.controller.js.map +1 -0
- package/dist/web/project.controller.d.ts +8 -0
- package/dist/web/project.controller.d.ts.map +1 -0
- package/dist/web/project.controller.js +54 -0
- package/dist/web/project.controller.js.map +1 -0
- package/dist/web/pty.gateway.d.ts +32 -0
- package/dist/web/pty.gateway.d.ts.map +1 -0
- package/dist/web/pty.gateway.js +358 -0
- package/dist/web/pty.gateway.js.map +1 -0
- package/dist/web/search.service.d.ts +34 -0
- package/dist/web/search.service.d.ts.map +1 -0
- package/dist/web/search.service.js +106 -0
- package/dist/web/search.service.js.map +1 -0
- package/dist/web/task.controller.d.ts +54 -0
- package/dist/web/task.controller.d.ts.map +1 -0
- package/dist/web/task.controller.js +266 -0
- package/dist/web/task.controller.js.map +1 -0
- package/dist/web/web.module.d.ts +3 -0
- package/dist/web/web.module.d.ts.map +1 -0
- package/dist/web/web.module.js +97 -0
- package/dist/web/web.module.js.map +1 -0
- package/dist/web/worker-channel.gateway.d.ts +45 -0
- package/dist/web/worker-channel.gateway.d.ts.map +1 -0
- package/dist/web/worker-channel.gateway.js +283 -0
- package/dist/web/worker-channel.gateway.js.map +1 -0
- package/dist/web/worker.controller.d.ts +14 -0
- package/dist/web/worker.controller.d.ts.map +1 -0
- package/dist/web/worker.controller.js +73 -0
- package/dist/web/worker.controller.js.map +1 -0
- package/dist/web/workspace.controller.d.ts +109 -0
- package/dist/web/workspace.controller.d.ts.map +1 -0
- package/dist/web/workspace.controller.js +386 -0
- package/dist/web/workspace.controller.js.map +1 -0
- 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"}
|