@overlordai/server 1.0.53 → 1.0.55
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 +73 -9
- package/dist/adapters/adapter.interface.d.ts +1 -4
- package/dist/adapters/adapter.interface.d.ts.map +1 -1
- package/dist/adapters/adapter.interface.js.map +1 -1
- package/dist/adapters/adapter.module.d.ts.map +1 -1
- package/dist/adapters/adapter.module.js +8 -7
- package/dist/adapters/adapter.module.js.map +1 -1
- package/dist/adapters/lark/lark-card.builder.d.ts +1 -25
- package/dist/adapters/lark/lark-card.builder.d.ts.map +1 -1
- package/dist/adapters/lark/lark-card.builder.js +6 -110
- package/dist/adapters/lark/lark-card.builder.js.map +1 -1
- package/dist/adapters/lark/lark-message.parser.d.ts +4 -4
- package/dist/adapters/lark/lark-message.parser.d.ts.map +1 -1
- package/dist/adapters/lark/lark-message.parser.js +20 -13
- package/dist/adapters/lark/lark-message.parser.js.map +1 -1
- package/dist/adapters/lark/lark-signature.d.ts.map +1 -1
- package/dist/adapters/lark/lark-signature.js +6 -0
- package/dist/adapters/lark/lark-signature.js.map +1 -1
- package/dist/adapters/lark/lark.adapter.d.ts +14 -9
- package/dist/adapters/lark/lark.adapter.d.ts.map +1 -1
- package/dist/adapters/lark/lark.adapter.js +99 -177
- package/dist/adapters/lark/lark.adapter.js.map +1 -1
- package/dist/adapters/lark/lark.controller.d.ts +10 -1
- package/dist/adapters/lark/lark.controller.d.ts.map +1 -1
- package/dist/adapters/lark/lark.controller.js +48 -14
- package/dist/adapters/lark/lark.controller.js.map +1 -1
- package/dist/adapters/slack/slack-block.builder.d.ts +8 -0
- package/dist/adapters/slack/slack-block.builder.d.ts.map +1 -0
- package/dist/adapters/slack/slack-block.builder.js +117 -0
- package/dist/adapters/slack/slack-block.builder.js.map +1 -0
- package/dist/adapters/slack/slack-message.parser.d.ts +15 -0
- package/dist/adapters/slack/slack-message.parser.d.ts.map +1 -0
- package/dist/adapters/slack/slack-message.parser.js +158 -0
- package/dist/adapters/slack/slack-message.parser.js.map +1 -0
- package/dist/adapters/slack/slack-signature.d.ts +7 -0
- package/dist/adapters/slack/slack-signature.d.ts.map +1 -0
- package/dist/adapters/slack/slack-signature.js +59 -0
- package/dist/adapters/slack/slack-signature.js.map +1 -0
- package/dist/adapters/slack/slack.adapter.d.ts +67 -13
- package/dist/adapters/slack/slack.adapter.d.ts.map +1 -1
- package/dist/adapters/slack/slack.adapter.js +468 -19
- package/dist/adapters/slack/slack.adapter.js.map +1 -1
- package/dist/adapters/slack/slack.controller.d.ts +20 -0
- package/dist/adapters/slack/slack.controller.d.ts.map +1 -0
- package/dist/adapters/slack/slack.controller.js +257 -0
- package/dist/adapters/slack/slack.controller.js.map +1 -0
- package/dist/app.module.d.ts.map +1 -1
- package/dist/app.module.js +4 -0
- package/dist/app.module.js.map +1 -1
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.controller.js +1 -0
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.module.d.ts.map +1 -1
- package/dist/auth/auth.module.js +4 -5
- package/dist/auth/auth.module.js.map +1 -1
- package/dist/auth/auth.service.d.ts +9 -2
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +50 -79
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/authenticated-request.d.ts +10 -0
- package/dist/auth/authenticated-request.d.ts.map +1 -0
- package/dist/auth/authenticated-request.js +3 -0
- package/dist/auth/authenticated-request.js.map +1 -0
- package/dist/auth/extract-user.middleware.d.ts.map +1 -1
- package/dist/auth/extract-user.middleware.js +2 -1
- package/dist/auth/extract-user.middleware.js.map +1 -1
- package/dist/auth/guards/jwt-auth.guard.d.ts.map +1 -1
- package/dist/auth/guards/jwt-auth.guard.js +5 -2
- package/dist/auth/guards/jwt-auth.guard.js.map +1 -1
- package/dist/auth/guards/project-role.guard.d.ts.map +1 -1
- package/dist/auth/guards/project-role.guard.js +6 -8
- package/dist/auth/guards/project-role.guard.js.map +1 -1
- package/dist/auth/jwt.strategy.d.ts +6 -3
- package/dist/auth/jwt.strategy.d.ts.map +1 -1
- package/dist/auth/jwt.strategy.js +15 -5
- package/dist/auth/jwt.strategy.js.map +1 -1
- package/dist/common/command-parser.d.ts +29 -0
- package/dist/common/command-parser.d.ts.map +1 -0
- package/dist/common/command-parser.js +133 -0
- package/dist/common/command-parser.js.map +1 -0
- package/dist/common/config.d.ts +17 -0
- package/dist/common/config.d.ts.map +1 -0
- package/dist/common/config.js +47 -0
- package/dist/common/config.js.map +1 -0
- package/dist/common/crypto.service.d.ts +4 -1
- package/dist/common/crypto.service.d.ts.map +1 -1
- package/dist/common/crypto.service.js +14 -7
- package/dist/common/crypto.service.js.map +1 -1
- package/dist/common/error-filter.d.ts +1 -0
- package/dist/common/error-filter.d.ts.map +1 -1
- package/dist/common/error-filter.js +6 -2
- package/dist/common/error-filter.js.map +1 -1
- package/dist/common/git-utils.d.ts +9 -0
- package/dist/common/git-utils.d.ts.map +1 -0
- package/dist/common/git-utils.js +41 -0
- package/dist/common/git-utils.js.map +1 -0
- package/dist/common/health.controller.d.ts.map +1 -1
- package/dist/common/health.controller.js +3 -5
- package/dist/common/health.controller.js.map +1 -1
- package/dist/common/machine-utils.d.ts +32 -0
- package/dist/common/machine-utils.d.ts.map +1 -0
- package/dist/common/machine-utils.js +12 -0
- package/dist/common/machine-utils.js.map +1 -0
- package/dist/common/pagination.d.ts +12 -5
- package/dist/common/pagination.d.ts.map +1 -1
- package/dist/common/pagination.js +27 -17
- package/dist/common/pagination.js.map +1 -1
- package/dist/common/project-validation.d.ts +7 -0
- package/dist/common/project-validation.d.ts.map +1 -0
- package/dist/common/project-validation.js +86 -0
- package/dist/common/project-validation.js.map +1 -0
- package/dist/common/rate-limit.guard.d.ts +4 -3
- package/dist/common/rate-limit.guard.d.ts.map +1 -1
- package/dist/common/rate-limit.guard.js +14 -5
- package/dist/common/rate-limit.guard.js.map +1 -1
- package/dist/common/sql-utils.d.ts +6 -0
- package/dist/common/sql-utils.d.ts.map +1 -0
- package/dist/common/sql-utils.js +11 -0
- package/dist/common/sql-utils.js.map +1 -0
- package/dist/common/string-utils.d.ts +6 -0
- package/dist/common/string-utils.d.ts.map +1 -0
- package/dist/common/string-utils.js +15 -0
- package/dist/common/string-utils.js.map +1 -0
- package/dist/common/worker-utils.d.ts +31 -0
- package/dist/common/worker-utils.d.ts.map +1 -0
- package/dist/common/worker-utils.js +12 -0
- package/dist/common/worker-utils.js.map +1 -0
- package/dist/database/base.repository.d.ts +56 -0
- package/dist/database/base.repository.d.ts.map +1 -0
- package/dist/database/base.repository.js +82 -0
- package/dist/database/base.repository.js.map +1 -0
- package/dist/database/database.service.d.ts.map +1 -1
- package/dist/database/database.service.js +9 -1
- package/dist/database/database.service.js.map +1 -1
- package/dist/database/migration-runner.d.ts.map +1 -1
- package/dist/database/migration-runner.js +2 -1
- package/dist/database/migration-runner.js.map +1 -1
- package/dist/database/repositories/audit-log.repository.d.ts.map +1 -1
- package/dist/database/repositories/audit-log.repository.js +16 -18
- package/dist/database/repositories/audit-log.repository.js.map +1 -1
- package/dist/database/repositories/bot.repository.d.ts +18 -32
- package/dist/database/repositories/bot.repository.d.ts.map +1 -1
- package/dist/database/repositories/bot.repository.js +42 -21
- package/dist/database/repositories/bot.repository.js.map +1 -1
- package/dist/database/repositories/developer-token.repository.d.ts +7 -17
- package/dist/database/repositories/developer-token.repository.d.ts.map +1 -1
- package/dist/database/repositories/developer-token.repository.js +24 -15
- package/dist/database/repositories/developer-token.repository.js.map +1 -1
- package/dist/database/repositories/developer.repository.d.ts +5 -1
- package/dist/database/repositories/developer.repository.d.ts.map +1 -1
- package/dist/database/repositories/developer.repository.js +60 -49
- package/dist/database/repositories/developer.repository.js.map +1 -1
- package/dist/database/repositories/machine.repository.d.ts.map +1 -1
- package/dist/database/repositories/machine.repository.js +2 -7
- package/dist/database/repositories/machine.repository.js.map +1 -1
- package/dist/database/repositories/notification.repository.d.ts +1 -0
- package/dist/database/repositories/notification.repository.d.ts.map +1 -1
- package/dist/database/repositories/notification.repository.js +25 -20
- package/dist/database/repositories/notification.repository.js.map +1 -1
- package/dist/database/repositories/project-member.repository.d.ts +7 -16
- package/dist/database/repositories/project-member.repository.d.ts.map +1 -1
- package/dist/database/repositories/project-member.repository.js +34 -24
- package/dist/database/repositories/project-member.repository.js.map +1 -1
- package/dist/database/repositories/project.repository.d.ts +2 -1
- package/dist/database/repositories/project.repository.d.ts.map +1 -1
- package/dist/database/repositories/project.repository.js +70 -71
- package/dist/database/repositories/project.repository.js.map +1 -1
- package/dist/database/repositories/session.repository.d.ts.map +1 -1
- package/dist/database/repositories/session.repository.js +22 -25
- package/dist/database/repositories/session.repository.js.map +1 -1
- package/dist/database/repositories/task.repository.d.ts +31 -7
- package/dist/database/repositories/task.repository.d.ts.map +1 -1
- package/dist/database/repositories/task.repository.js +134 -86
- package/dist/database/repositories/task.repository.js.map +1 -1
- package/dist/database/repositories/worker-token.repository.d.ts.map +1 -1
- package/dist/database/repositories/worker-token.repository.js +18 -16
- package/dist/database/repositories/worker-token.repository.js.map +1 -1
- package/dist/database/repositories/worker.repository.d.ts +50 -0
- package/dist/database/repositories/worker.repository.d.ts.map +1 -0
- package/dist/database/repositories/worker.repository.js +215 -0
- package/dist/database/repositories/worker.repository.js.map +1 -0
- package/dist/database/repositories/workspace.repository.d.ts +3 -2
- package/dist/database/repositories/workspace.repository.d.ts.map +1 -1
- package/dist/database/repositories/workspace.repository.js +29 -21
- package/dist/database/repositories/workspace.repository.js.map +1 -1
- package/dist/database/repository.module.d.ts +3 -0
- package/dist/database/repository.module.d.ts.map +1 -0
- package/dist/database/repository.module.js +45 -0
- package/dist/database/repository.module.js.map +1 -0
- package/dist/dispatcher/capability.service.d.ts +19 -14
- package/dist/dispatcher/capability.service.d.ts.map +1 -1
- package/dist/dispatcher/capability.service.js +77 -69
- package/dist/dispatcher/capability.service.js.map +1 -1
- package/dist/dispatcher/cleanup.service.d.ts +1 -1
- package/dist/dispatcher/cleanup.service.d.ts.map +1 -1
- package/dist/dispatcher/cleanup.service.js +13 -13
- package/dist/dispatcher/cleanup.service.js.map +1 -1
- package/dist/dispatcher/dedup.service.d.ts +17 -3
- package/dist/dispatcher/dedup.service.d.ts.map +1 -1
- package/dist/dispatcher/dedup.service.js +76 -82
- package/dist/dispatcher/dedup.service.js.map +1 -1
- package/dist/dispatcher/dispatcher.module.d.ts.map +1 -1
- package/dist/dispatcher/dispatcher.module.js +11 -18
- package/dist/dispatcher/dispatcher.module.js.map +1 -1
- package/dist/dispatcher/dispatcher.service.d.ts +14 -116
- package/dist/dispatcher/dispatcher.service.d.ts.map +1 -1
- package/dist/dispatcher/dispatcher.service.js +62 -940
- package/dist/dispatcher/dispatcher.service.js.map +1 -1
- package/dist/dispatcher/dispatcher.types.d.ts +33 -0
- package/dist/dispatcher/dispatcher.types.d.ts.map +1 -0
- package/dist/dispatcher/dispatcher.types.js +3 -0
- package/dist/dispatcher/dispatcher.types.js.map +1 -0
- package/dist/dispatcher/heartbeat.service.d.ts +17 -10
- package/dist/dispatcher/heartbeat.service.d.ts.map +1 -1
- package/dist/dispatcher/heartbeat.service.js +47 -51
- package/dist/dispatcher/heartbeat.service.js.map +1 -1
- package/dist/dispatcher/pty-relay.service.d.ts.map +1 -1
- package/dist/dispatcher/pty-relay.service.js +7 -15
- package/dist/dispatcher/pty-relay.service.js.map +1 -1
- package/dist/dispatcher/reconciler.d.ts +18 -8
- package/dist/dispatcher/reconciler.d.ts.map +1 -1
- package/dist/dispatcher/reconciler.js +219 -130
- package/dist/dispatcher/reconciler.js.map +1 -1
- package/dist/dispatcher/scheduler.service.d.ts +15 -9
- package/dist/dispatcher/scheduler.service.d.ts.map +1 -1
- package/dist/dispatcher/scheduler.service.js +95 -53
- package/dist/dispatcher/scheduler.service.js.map +1 -1
- package/dist/dispatcher/state-machine.d.ts.map +1 -1
- package/dist/dispatcher/state-machine.js +1 -5
- package/dist/dispatcher/state-machine.js.map +1 -1
- package/dist/dispatcher/task-creation.service.d.ts +30 -0
- package/dist/dispatcher/task-creation.service.d.ts.map +1 -0
- package/dist/dispatcher/task-creation.service.js +242 -0
- package/dist/dispatcher/task-creation.service.js.map +1 -0
- package/dist/dispatcher/task-lifecycle.service.d.ts +63 -0
- package/dist/dispatcher/task-lifecycle.service.d.ts.map +1 -0
- package/dist/dispatcher/task-lifecycle.service.js +584 -0
- package/dist/dispatcher/task-lifecycle.service.js.map +1 -0
- package/dist/dispatcher/task-log-batcher.d.ts.map +1 -1
- package/dist/dispatcher/task-log-batcher.js +4 -11
- package/dist/dispatcher/task-log-batcher.js.map +1 -1
- package/dist/dispatcher/worker-auth.service.d.ts +29 -0
- package/dist/dispatcher/worker-auth.service.d.ts.map +1 -0
- package/dist/dispatcher/worker-auth.service.js +296 -0
- package/dist/dispatcher/worker-auth.service.js.map +1 -0
- package/dist/dispatcher/worker-connection.manager.d.ts +15 -15
- package/dist/dispatcher/worker-connection.manager.d.ts.map +1 -1
- package/dist/dispatcher/worker-connection.manager.js +35 -43
- package/dist/dispatcher/worker-connection.manager.js.map +1 -1
- package/dist/dispatcher/worker-selector.d.ts +18 -0
- package/dist/dispatcher/worker-selector.d.ts.map +1 -0
- package/dist/dispatcher/worker-selector.js +150 -0
- package/dist/dispatcher/worker-selector.js.map +1 -0
- package/dist/events/event-types.d.ts +31 -0
- package/dist/events/event-types.d.ts.map +1 -0
- package/dist/events/event-types.js +16 -0
- package/dist/events/event-types.js.map +1 -0
- package/dist/events/events.module.d.ts +7 -0
- package/dist/events/events.module.d.ts.map +1 -0
- package/dist/events/events.module.js +26 -0
- package/dist/events/events.module.js.map +1 -0
- package/dist/main.js +22 -0
- package/dist/main.js.map +1 -1
- package/dist/notifier/debouncer.d.ts +1 -1
- package/dist/notifier/debouncer.d.ts.map +1 -1
- package/dist/notifier/debouncer.js +2 -1
- package/dist/notifier/debouncer.js.map +1 -1
- package/dist/notifier/notification-consumer.d.ts +1 -1
- package/dist/notifier/notification-consumer.d.ts.map +1 -1
- package/dist/notifier/notification-consumer.js +5 -5
- package/dist/notifier/notification-consumer.js.map +1 -1
- package/dist/notifier/notifier.module.d.ts.map +1 -1
- package/dist/notifier/notifier.module.js +0 -6
- package/dist/notifier/notifier.module.js.map +1 -1
- package/dist/notifier/notifier.service.d.ts +1 -1
- package/dist/notifier/notifier.service.d.ts.map +1 -1
- package/dist/notifier/notifier.service.js +7 -9
- package/dist/notifier/notifier.service.js.map +1 -1
- package/dist/notifier/template.service.d.ts +1 -1
- package/dist/notifier/template.service.d.ts.map +1 -1
- package/dist/notifier/template.service.js +6 -10
- package/dist/notifier/template.service.js.map +1 -1
- package/dist/redis/redis.service.d.ts.map +1 -1
- package/dist/redis/redis.service.js +2 -2
- package/dist/redis/redis.service.js.map +1 -1
- package/dist/web/admin/admin-audit.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-audit.controller.js +2 -1
- package/dist/web/admin/admin-audit.controller.js.map +1 -1
- package/dist/web/admin/admin-bot.controller.d.ts +11 -48
- package/dist/web/admin/admin-bot.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-bot.controller.js +50 -18
- package/dist/web/admin/admin-bot.controller.js.map +1 -1
- package/dist/web/admin/admin-developer.controller.d.ts +14 -27
- package/dist/web/admin/admin-developer.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-developer.controller.js +62 -28
- package/dist/web/admin/admin-developer.controller.js.map +1 -1
- package/dist/web/admin/admin-machine.controller.d.ts +1 -8
- package/dist/web/admin/admin-machine.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-machine.controller.js +3 -6
- package/dist/web/admin/admin-machine.controller.js.map +1 -1
- package/dist/web/admin/admin-project.controller.d.ts +9 -30
- package/dist/web/admin/admin-project.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-project.controller.js +15 -60
- package/dist/web/admin/admin-project.controller.js.map +1 -1
- package/dist/web/admin/admin-settings.controller.d.ts +7 -10
- package/dist/web/admin/admin-settings.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-settings.controller.js +14 -6
- package/dist/web/admin/admin-settings.controller.js.map +1 -1
- package/dist/web/admin/admin-token.controller.d.ts +6 -13
- package/dist/web/admin/admin-token.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-token.controller.js +15 -27
- package/dist/web/admin/admin-token.controller.js.map +1 -1
- package/dist/web/admin/admin-worker.controller.d.ts +26 -0
- package/dist/web/admin/admin-worker.controller.d.ts.map +1 -0
- package/dist/web/admin/admin-worker.controller.js +184 -0
- package/dist/web/admin/admin-worker.controller.js.map +1 -0
- package/dist/web/dashboard.controller.d.ts +6 -12
- package/dist/web/dashboard.controller.d.ts.map +1 -1
- package/dist/web/dashboard.controller.js +30 -18
- package/dist/web/dashboard.controller.js.map +1 -1
- package/dist/web/dashboard.service.d.ts +21 -12
- package/dist/web/dashboard.service.d.ts.map +1 -1
- package/dist/web/dashboard.service.js +169 -119
- package/dist/web/dashboard.service.js.map +1 -1
- package/dist/web/event.gateway.d.ts +32 -0
- package/dist/web/event.gateway.d.ts.map +1 -0
- package/dist/web/event.gateway.js +168 -0
- package/dist/web/event.gateway.js.map +1 -0
- package/dist/web/frame-handlers/frame-handler.interface.d.ts +24 -0
- package/dist/web/frame-handlers/frame-handler.interface.d.ts.map +1 -0
- package/dist/web/frame-handlers/frame-handler.interface.js +3 -0
- package/dist/web/frame-handlers/frame-handler.interface.js.map +1 -0
- package/dist/web/frame-handlers/frame-handler.registry.d.ts +16 -0
- package/dist/web/frame-handlers/frame-handler.registry.d.ts.map +1 -0
- package/dist/web/frame-handlers/frame-handler.registry.js +39 -0
- package/dist/web/frame-handlers/frame-handler.registry.js.map +1 -0
- package/dist/web/frame-handlers/heartbeat.handler.d.ts +13 -0
- package/dist/web/frame-handlers/heartbeat.handler.d.ts.map +1 -0
- package/dist/web/frame-handlers/heartbeat.handler.js +35 -0
- package/dist/web/frame-handlers/heartbeat.handler.js.map +1 -0
- package/dist/web/frame-handlers/index.d.ts +7 -0
- package/dist/web/frame-handlers/index.d.ts.map +1 -0
- package/dist/web/frame-handlers/index.js +14 -0
- package/dist/web/frame-handlers/index.js.map +1 -0
- package/dist/web/frame-handlers/progress.handler.d.ts +25 -0
- package/dist/web/frame-handlers/progress.handler.d.ts.map +1 -0
- package/dist/web/frame-handlers/progress.handler.js +69 -0
- package/dist/web/frame-handlers/progress.handler.js.map +1 -0
- package/dist/web/frame-handlers/stage-confirm.handler.d.ts +15 -0
- package/dist/web/frame-handlers/stage-confirm.handler.d.ts.map +1 -0
- package/dist/web/frame-handlers/stage-confirm.handler.js +39 -0
- package/dist/web/frame-handlers/stage-confirm.handler.js.map +1 -0
- package/dist/web/frame-handlers/tunnel.handler.d.ts +10 -0
- package/dist/web/frame-handlers/tunnel.handler.d.ts.map +1 -0
- package/dist/web/frame-handlers/tunnel.handler.js +31 -0
- package/dist/web/frame-handlers/tunnel.handler.js.map +1 -0
- package/dist/web/interaction.service.d.ts +0 -4
- package/dist/web/interaction.service.d.ts.map +1 -1
- package/dist/web/interaction.service.js +0 -10
- package/dist/web/interaction.service.js.map +1 -1
- package/dist/web/machine.controller.d.ts +1 -8
- package/dist/web/machine.controller.d.ts.map +1 -1
- package/dist/web/machine.controller.js +6 -9
- package/dist/web/machine.controller.js.map +1 -1
- package/dist/web/notification.controller.d.ts +1 -8
- package/dist/web/notification.controller.d.ts.map +1 -1
- package/dist/web/notification.controller.js +3 -2
- package/dist/web/notification.controller.js.map +1 -1
- package/dist/web/profile.controller.d.ts +19 -10
- package/dist/web/profile.controller.d.ts.map +1 -1
- package/dist/web/profile.controller.js +100 -13
- package/dist/web/profile.controller.js.map +1 -1
- package/dist/web/project-member.service.d.ts +16 -0
- package/dist/web/project-member.service.d.ts.map +1 -0
- package/dist/web/project-member.service.js +90 -0
- package/dist/web/project-member.service.js.map +1 -0
- package/dist/web/project.controller.d.ts +43 -26
- package/dist/web/project.controller.d.ts.map +1 -1
- package/dist/web/project.controller.js +73 -46
- package/dist/web/project.controller.js.map +1 -1
- package/dist/web/pty.gateway.d.ts +9 -3
- package/dist/web/pty.gateway.d.ts.map +1 -1
- package/dist/web/pty.gateway.js +46 -18
- package/dist/web/pty.gateway.js.map +1 -1
- package/dist/web/search.service.d.ts +9 -2
- package/dist/web/search.service.d.ts.map +1 -1
- package/dist/web/search.service.js +53 -26
- package/dist/web/search.service.js.map +1 -1
- package/dist/web/task.controller.d.ts +15 -24
- package/dist/web/task.controller.d.ts.map +1 -1
- package/dist/web/task.controller.js +70 -53
- package/dist/web/task.controller.js.map +1 -1
- package/dist/web/tunnel.service.d.ts +74 -0
- package/dist/web/tunnel.service.d.ts.map +1 -0
- package/dist/web/tunnel.service.js +250 -0
- package/dist/web/tunnel.service.js.map +1 -0
- package/dist/web/web-event.service.d.ts +25 -0
- package/dist/web/web-event.service.d.ts.map +1 -0
- package/dist/web/web-event.service.js +116 -0
- package/dist/web/web-event.service.js.map +1 -0
- package/dist/web/web.module.d.ts.map +1 -1
- package/dist/web/web.module.js +13 -28
- package/dist/web/web.module.js.map +1 -1
- package/dist/web/worker-channel.gateway.d.ts +10 -18
- package/dist/web/worker-channel.gateway.d.ts.map +1 -1
- package/dist/web/worker-channel.gateway.js +70 -144
- package/dist/web/worker-channel.gateway.js.map +1 -1
- package/dist/web/worker-web.controller.d.ts +15 -0
- package/dist/web/worker-web.controller.d.ts.map +1 -0
- package/dist/web/worker-web.controller.js +143 -0
- package/dist/web/worker-web.controller.js.map +1 -0
- package/dist/web/worker.controller.d.ts +3 -3
- package/dist/web/worker.controller.d.ts.map +1 -1
- package/dist/web/worker.controller.js +8 -8
- package/dist/web/worker.controller.js.map +1 -1
- package/dist/web/workspace.controller.d.ts +8 -33
- package/dist/web/workspace.controller.d.ts.map +1 -1
- package/dist/web/workspace.controller.js +93 -205
- package/dist/web/workspace.controller.js.map +1 -1
- package/package.json +10 -2
- package/public/apple-touch-icon-120x120.png +0 -0
- package/public/apple-touch-icon-152x152.png +0 -0
- package/public/apple-touch-icon-180x180.png +0 -0
- package/public/assets/AccessTokensPage-DPQB2fbi.js +1 -0
- package/public/assets/AdminPage-BqVelYNu.js +1 -0
- package/public/assets/ApiReferencePage-CiGvbLxL.js +1 -0
- package/public/assets/AuditLogPage-DSo4jVYm.js +6 -0
- package/public/assets/BindPlatformPage-CTqzpOmt.js +1 -0
- package/public/assets/BotManage-CIR0rrK7.js +6 -0
- package/public/assets/CliReferencePage-C8GmlwUz.js +14 -0
- package/public/assets/DeveloperManage-r6y2AoB4.js +16 -0
- package/public/assets/EditProjectPage-7WCsNltj.js +2 -0
- package/public/assets/{EmptyState-CvmhFgWJ.js → EmptyState-D3foEiul.js} +1 -1
- package/public/assets/HomePage-D4yv4orb.js +1 -0
- package/public/assets/InfoRow-DhdTYoY9.js +1 -0
- package/public/assets/LandingPage-CqS0E2eC.js +43 -0
- package/public/assets/LoginPage-DDXkdcz_.js +1 -0
- package/public/assets/MetricBar-DMMHfS0A.js +1 -0
- package/public/assets/{NotFoundPage-BuiAS4g4.js → NotFoundPage-D5x5BrlX.js} +1 -1
- package/public/assets/OnboardingGuide-D8RyPcEd.js +1 -0
- package/public/assets/PipelineEditorPage-y2-Q8ofQ.js +3 -0
- package/public/assets/ProfilePage-DN7usHOi.js +1 -0
- package/public/assets/ProjectDetailPage-DJexg49z.js +7 -0
- package/public/assets/ProjectListPage-Bz7I2D0H.js +6 -0
- package/public/assets/QuickAuth-Dr0Q50ld.js +1 -0
- package/public/assets/{RemoveMemberConfirmDialog-DS9z6jQT.js → RemoveMemberConfirmDialog-BCrue0AP.js} +2 -2
- package/public/assets/Select-BnV8yZlD.js +6 -0
- package/public/assets/SettingsPage-HaUCcsgl.js +6 -0
- package/public/assets/{Skeleton-CcVqz28_.js → Skeleton-DUgWc2LJ.js} +1 -1
- package/public/assets/SkillPage-BInwZTQh.js +1 -0
- package/public/assets/TaskDetailPage-CfwEj1hy.js +31 -0
- package/public/assets/TaskListPage-Dh59ldSZ.js +1 -0
- package/public/assets/TaskStatusBadge-DuOoGIwE.js +1 -0
- package/public/assets/TerminalHomePage-BwXJjr-a.js +16 -0
- package/public/assets/TokenManage-B0Cpv6SO.js +1 -0
- package/public/assets/TotpSetupPage-MSCCURj9.js +9 -0
- package/public/assets/WorkerDetailPage-R2veIzKo.js +1 -0
- package/public/assets/WorkerListPage-CserMjGO.js +6 -0
- package/public/assets/WorkerSetupGuidePage-SqO2lzVa.js +11 -0
- package/public/assets/{arrow-left-CVKez32c.js → arrow-left-DklRsENx.js} +1 -1
- package/public/assets/{arrow-right-g7hTftEi.js → arrow-right-MDrzFe3K.js} +1 -1
- package/public/assets/{bot-DYvBcsZn.js → bot-DPaziJPf.js} +1 -1
- package/public/assets/{chevron-right-COxU2yxz.js → chevron-right-CqyufMDW.js} +1 -1
- package/public/assets/{copy-BGttVgA1.js → copy-BUH7P2Hf.js} +1 -1
- package/public/assets/date-BdNtiQTP.js +1 -0
- package/public/assets/{external-link-DXlCfUjE.js → external-link-ChPgQ7N_.js} +1 -1
- package/public/assets/index-BS0Fbx5V.css +1 -0
- package/public/assets/index-vL7aQJNr.js +225 -0
- package/public/assets/{key-3eDVdGih.js → key-CxvwwHnW.js} +1 -1
- package/public/assets/{loader-circle-DPm92ETj.js → loader-circle-DS5g1-Od.js} +1 -1
- package/public/assets/password-CHk45-jw.js +1 -0
- package/public/assets/{pencil-Bs3PwH2W.js → pencil-B6spIBcw.js} +1 -1
- package/public/assets/{plus-d-PLzbVX.js → plus-Bnd1Vz2Y.js} +1 -1
- package/public/assets/{rotate-ccw-Cus8CABi.js → rotate-ccw-CgcLAXNR.js} +1 -1
- package/public/assets/{scroll-text-CV3wlIy2.js → scroll-text-CecZ0Fk5.js} +1 -1
- package/public/assets/{settings-Ccijf48b.js → settings-C1uOD3PZ.js} +1 -1
- package/public/assets/status-colors-BPEUp90-.js +1 -0
- package/public/assets/string-B39tzdVK.js +1 -0
- package/public/assets/task-constants-BbFyCyKk.js +14 -0
- package/public/assets/task.store-BE6fEPu4.js +1 -0
- package/public/assets/{trash-2-bRJ-xwtq.js → trash-2-A2FsT1yG.js} +1 -1
- package/public/assets/useFetch-vGZMAvGi.js +1 -0
- package/public/assets/{users-LNQqKSEN.js → users-CEdRS_A3.js} +1 -1
- package/public/assets/wifi-D60NkK6F.js +6 -0
- package/public/assets/zap-DXw1NrWz.js +6 -0
- package/public/icon-192x192.png +0 -0
- package/public/icon-512x512.png +0 -0
- package/public/icon-maskable-192x192.png +0 -0
- package/public/icon-maskable-512x512.png +0 -0
- package/public/index.html +21 -4
- package/public/manifest.webmanifest +1 -0
- package/public/og-image.png +0 -0
- package/public/registerSW.js +1 -0
- package/public/sw.js +1 -0
- package/public/workbox-6e9b121d.js +1 -0
- package/database/migrations/002-add-indexes.sql +0 -17
- package/database/migrations/003-add-settings-table.sql +0 -4
- package/database/migrations/004-add-developer-id-index.sql +0 -5
- package/database/migrations/005-add-worker-version.sql +0 -2
- package/database/migrations/006-add-decommission-fields.sql +0 -2
- package/database/migrations/007-add-ssh-url.sql +0 -1
- package/public/assets/AccessTokensPage-Cb5hGBfN.js +0 -1
- package/public/assets/AdminPage-C7Xytkfo.js +0 -1
- package/public/assets/ApiReferencePage-DLGVc4xN.js +0 -1
- package/public/assets/AuditLogPage-BgqsUJ7x.js +0 -6
- package/public/assets/BotManage-Ds9DYQZA.js +0 -6
- package/public/assets/CliReferencePage-WXinn_69.js +0 -8
- package/public/assets/DeveloperManage-saSq3Hfx.js +0 -16
- package/public/assets/EditProjectPage-C4xWYLTo.js +0 -2
- package/public/assets/HomePage-y20pQ52r.js +0 -1
- package/public/assets/LandingPage-CB5BBbdI.js +0 -36
- package/public/assets/LoginPage-DLljhJkQ.js +0 -1
- package/public/assets/MachineDetailPage-CPm9tfdp.js +0 -1
- package/public/assets/MachineListPage-D-nhVz-m.js +0 -6
- package/public/assets/PipelineEditorPage-B9GgqAju.js +0 -3
- package/public/assets/ProfilePage-DASpeJq6.js +0 -1
- package/public/assets/ProjectDetailPage-DWZyNwTV.js +0 -7
- package/public/assets/ProjectListPage-BUMX3Dxa.js +0 -6
- package/public/assets/QuickAuth-B9mvq7ht.js +0 -1
- package/public/assets/Select-A7PXobk_.js +0 -6
- package/public/assets/SettingsPage-WGzxUbGp.js +0 -6
- package/public/assets/SkillPage-BIt2kF3W.js +0 -1
- package/public/assets/TaskDetailPage-CePyNfp6.js +0 -44
- package/public/assets/TaskListPage-MO4_PSve.js +0 -1
- package/public/assets/TaskStatusBadge-QtQUDscM.js +0 -1
- package/public/assets/TokenManage-Sf0RGymw.js +0 -1
- package/public/assets/TotpSetupPage-D-rbEYLf.js +0 -9
- package/public/assets/WorkerSetupGuidePage-D6Fv1MQo.js +0 -16
- package/public/assets/index-CDBuOPx4.js +0 -212
- package/public/assets/index-CQojj7Zu.css +0 -1
- package/public/assets/protocol-C5uQmiiB.js +0 -1
- package/public/assets/task.store-CvjSr507.js +0 -1
- /package/public/assets/{TaskDetailPage-Beg8tuEN.css → task-constants-Beg8tuEN.css} +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared command parser for all bot adapters (Lark, Slack, etc.).
|
|
4
|
+
*
|
|
5
|
+
* Extracts a structured ParsedCommand from raw user text.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.CommandParser = void 0;
|
|
9
|
+
const KNOWN_PARAMS = new Set([
|
|
10
|
+
'--project',
|
|
11
|
+
'--on',
|
|
12
|
+
'--machine',
|
|
13
|
+
'--worker',
|
|
14
|
+
'--reviewer',
|
|
15
|
+
]);
|
|
16
|
+
class CommandParser {
|
|
17
|
+
/**
|
|
18
|
+
* Parse raw text into a structured command.
|
|
19
|
+
* Returns null if the text is empty or the command is unrecognised.
|
|
20
|
+
*/
|
|
21
|
+
static parse(text) {
|
|
22
|
+
const trimmed = text.trim();
|
|
23
|
+
if (!trimmed)
|
|
24
|
+
return null;
|
|
25
|
+
const tokens = CommandParser.tokenize(trimmed);
|
|
26
|
+
if (tokens.length === 0)
|
|
27
|
+
return null;
|
|
28
|
+
const commandName = tokens[0].toLowerCase();
|
|
29
|
+
const rest = tokens.slice(1);
|
|
30
|
+
switch (commandName) {
|
|
31
|
+
case 'develop':
|
|
32
|
+
case 'dev':
|
|
33
|
+
return CommandParser.parseDevelop(rest);
|
|
34
|
+
case 'cancel':
|
|
35
|
+
return CommandParser.parseCancelOrRetry('CANCEL', rest);
|
|
36
|
+
case 'retry':
|
|
37
|
+
return CommandParser.parseCancelOrRetry('RETRY', rest);
|
|
38
|
+
default:
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Sub-parsers
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
static parseDevelop(tokens) {
|
|
46
|
+
let project;
|
|
47
|
+
let worker;
|
|
48
|
+
let reviewers;
|
|
49
|
+
const descriptionParts = [];
|
|
50
|
+
let i = 0;
|
|
51
|
+
while (i < tokens.length) {
|
|
52
|
+
const token = tokens[i];
|
|
53
|
+
if (token === '--project' || token === '--on') {
|
|
54
|
+
i++;
|
|
55
|
+
if (i < tokens.length) {
|
|
56
|
+
project = tokens[i];
|
|
57
|
+
}
|
|
58
|
+
i++;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (token === '--machine' || token === '--worker') {
|
|
62
|
+
i++;
|
|
63
|
+
if (i < tokens.length) {
|
|
64
|
+
worker = tokens[i];
|
|
65
|
+
}
|
|
66
|
+
i++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (token === '--reviewer') {
|
|
70
|
+
i++;
|
|
71
|
+
reviewers = [];
|
|
72
|
+
// Collect values until next --param or end
|
|
73
|
+
while (i < tokens.length && !KNOWN_PARAMS.has(tokens[i])) {
|
|
74
|
+
reviewers.push(tokens[i]);
|
|
75
|
+
i++;
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Everything else is part of the description (including unknown --flags)
|
|
80
|
+
descriptionParts.push(token);
|
|
81
|
+
i++;
|
|
82
|
+
}
|
|
83
|
+
const description = descriptionParts.length > 0
|
|
84
|
+
? descriptionParts.join(' ')
|
|
85
|
+
: undefined;
|
|
86
|
+
const result = { type: 'DEVELOP' };
|
|
87
|
+
if (description)
|
|
88
|
+
result.description = description;
|
|
89
|
+
if (project)
|
|
90
|
+
result.project = project;
|
|
91
|
+
if (worker)
|
|
92
|
+
result.worker = worker;
|
|
93
|
+
if (reviewers && reviewers.length > 0)
|
|
94
|
+
result.reviewers = reviewers;
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
static parseCancelOrRetry(type, tokens) {
|
|
98
|
+
const taskId = CommandParser.extractTaskId(tokens);
|
|
99
|
+
if (taskId === undefined)
|
|
100
|
+
return null;
|
|
101
|
+
return { type, taskId };
|
|
102
|
+
}
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Helpers
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
static extractTaskId(tokens) {
|
|
107
|
+
for (const token of tokens) {
|
|
108
|
+
const match = /^#?(\d+)$/.exec(token);
|
|
109
|
+
if (match) {
|
|
110
|
+
return parseInt(match[1], 10);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Tokenize input text, respecting single and double-quoted strings.
|
|
117
|
+
* Quotes are stripped from the resulting tokens.
|
|
118
|
+
*/
|
|
119
|
+
static tokenize(text) {
|
|
120
|
+
const tokens = [];
|
|
121
|
+
const regex = /(?:"([^"]*)")|(?:'([^']*)')|(\S+)/g;
|
|
122
|
+
let match;
|
|
123
|
+
while ((match = regex.exec(text)) !== null) {
|
|
124
|
+
const value = match[1] ?? match[2] ?? match[3];
|
|
125
|
+
if (value !== undefined) {
|
|
126
|
+
tokens.push(value);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return tokens;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.CommandParser = CommandParser;
|
|
133
|
+
//# sourceMappingURL=command-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parser.js","sourceRoot":"","sources":["../../src/common/command-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared server-side configuration constants derived from environment variables.
|
|
3
|
+
* Import these instead of reading process.env directly in each service.
|
|
4
|
+
*/
|
|
5
|
+
/** Redis connection URL used by all BullMQ queues and the Redis service.
|
|
6
|
+
* Read lazily so tests can override process.env after import. */
|
|
7
|
+
export declare function getRedisUrl(): string;
|
|
8
|
+
/** Base URL for the web dashboard (used in notification links, Lark cards, etc.).
|
|
9
|
+
* Read lazily so tests can override process.env after import. */
|
|
10
|
+
export declare function getWebUrl(): string;
|
|
11
|
+
/** JWT secret used for user access / refresh tokens.
|
|
12
|
+
* Read lazily so tests can override process.env after import. */
|
|
13
|
+
export declare function getJwtSecret(): string;
|
|
14
|
+
/** JWT secret used for worker and channel tokens.
|
|
15
|
+
* Read lazily so tests can override process.env after import. */
|
|
16
|
+
export declare function getWorkerJwtSecret(): string;
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;kEACkE;AAClE,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;kEACkE;AAClE,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;kEACkE;AAClE,wBAAgB,YAAY,IAAI,MAAM,CAUrC;AAED;kEACkE;AAClE,wBAAgB,kBAAkB,IAAI,MAAM,CAU3C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared server-side configuration constants derived from environment variables.
|
|
4
|
+
* Import these instead of reading process.env directly in each service.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getRedisUrl = getRedisUrl;
|
|
8
|
+
exports.getWebUrl = getWebUrl;
|
|
9
|
+
exports.getJwtSecret = getJwtSecret;
|
|
10
|
+
exports.getWorkerJwtSecret = getWorkerJwtSecret;
|
|
11
|
+
/** Redis connection URL used by all BullMQ queues and the Redis service.
|
|
12
|
+
* Read lazily so tests can override process.env after import. */
|
|
13
|
+
function getRedisUrl() {
|
|
14
|
+
return process.env.REDIS_URL || 'redis://localhost:6379';
|
|
15
|
+
}
|
|
16
|
+
/** Base URL for the web dashboard (used in notification links, Lark cards, etc.).
|
|
17
|
+
* Read lazily so tests can override process.env after import. */
|
|
18
|
+
function getWebUrl() {
|
|
19
|
+
return process.env.OVERLORD_WEB_URL || 'http://localhost:3000';
|
|
20
|
+
}
|
|
21
|
+
/** JWT secret used for user access / refresh tokens.
|
|
22
|
+
* Read lazily so tests can override process.env after import. */
|
|
23
|
+
function getJwtSecret() {
|
|
24
|
+
const secret = process.env.JWT_SECRET;
|
|
25
|
+
if (!secret) {
|
|
26
|
+
if (process.env.NODE_ENV === 'production') {
|
|
27
|
+
throw new Error('JWT_SECRET must be set in production');
|
|
28
|
+
}
|
|
29
|
+
console.warn('[SECURITY] JWT_SECRET not set — using insecure default. Set JWT_SECRET in production!');
|
|
30
|
+
return 'default-jwt-secret';
|
|
31
|
+
}
|
|
32
|
+
return secret;
|
|
33
|
+
}
|
|
34
|
+
/** JWT secret used for worker and channel tokens.
|
|
35
|
+
* Read lazily so tests can override process.env after import. */
|
|
36
|
+
function getWorkerJwtSecret() {
|
|
37
|
+
const secret = process.env.WORKER_JWT_SECRET;
|
|
38
|
+
if (!secret) {
|
|
39
|
+
if (process.env.NODE_ENV === 'production') {
|
|
40
|
+
throw new Error('WORKER_JWT_SECRET must be set in production');
|
|
41
|
+
}
|
|
42
|
+
console.warn('[SECURITY] WORKER_JWT_SECRET not set — using insecure default. Set WORKER_JWT_SECRET in production!');
|
|
43
|
+
return 'default-worker-jwt-secret';
|
|
44
|
+
}
|
|
45
|
+
return secret;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAIH,kCAEC;AAID,8BAEC;AAID,oCAUC;AAID,gDAUC;AAtCD;kEACkE;AAClE,SAAgB,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,wBAAwB,CAAC;AAC3D,CAAC;AAED;kEACkE;AAClE,SAAgB,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,uBAAuB,CAAC;AACjE,CAAC;AAED;kEACkE;AAClE,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QACtG,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;kEACkE;AAClE,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;QACpH,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
export declare class CryptoService implements OnModuleInit {
|
|
3
|
+
private readonly logger;
|
|
4
|
+
onModuleInit(): void;
|
|
2
5
|
/**
|
|
3
6
|
* Hash a plaintext password using bcrypt with the protocol-defined cost factor.
|
|
4
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.service.d.ts","sourceRoot":"","sources":["../../src/common/crypto.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.service.d.ts","sourceRoot":"","sources":["../../src/common/crypto.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAU,MAAM,gBAAgB,CAAC;AAMlE,qBACa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IAEzD,YAAY,IAAI,IAAI;IAUpB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE;;;;OAIG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAerC;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAkBtC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjD,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -38,6 +38,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
38
38
|
return result;
|
|
39
39
|
};
|
|
40
40
|
})();
|
|
41
|
+
var CryptoService_1;
|
|
41
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
43
|
exports.CryptoService = void 0;
|
|
43
44
|
const common_1 = require("@nestjs/common");
|
|
@@ -45,7 +46,16 @@ const crypto = __importStar(require("node:crypto"));
|
|
|
45
46
|
const bcrypt = __importStar(require("bcrypt"));
|
|
46
47
|
const otplib_1 = require("otplib");
|
|
47
48
|
const protocol_1 = require("@overlordai/protocol");
|
|
48
|
-
let CryptoService = class CryptoService {
|
|
49
|
+
let CryptoService = CryptoService_1 = class CryptoService {
|
|
50
|
+
logger = new common_1.Logger(CryptoService_1.name);
|
|
51
|
+
onModuleInit() {
|
|
52
|
+
// Validate ENCRYPTION_KEY at startup rather than on first use
|
|
53
|
+
const hex = process.env.ENCRYPTION_KEY;
|
|
54
|
+
if (!hex || hex.length !== 64) {
|
|
55
|
+
throw new Error('ENCRYPTION_KEY environment variable must be a 64-character hex string (32 bytes). Set it before starting the server.');
|
|
56
|
+
}
|
|
57
|
+
this.logger.log('ENCRYPTION_KEY validated');
|
|
58
|
+
}
|
|
49
59
|
/**
|
|
50
60
|
* Hash a plaintext password using bcrypt with the protocol-defined cost factor.
|
|
51
61
|
*/
|
|
@@ -106,15 +116,12 @@ let CryptoService = class CryptoService {
|
|
|
106
116
|
return otplib_1.authenticator.check(code, secret);
|
|
107
117
|
}
|
|
108
118
|
getEncryptionKey() {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
throw new Error('ENCRYPTION_KEY environment variable must be a 64-character hex string (32 bytes)');
|
|
112
|
-
}
|
|
113
|
-
return Buffer.from(hex, 'hex');
|
|
119
|
+
// Validation already performed in onModuleInit at startup
|
|
120
|
+
return Buffer.from(process.env.ENCRYPTION_KEY, 'hex');
|
|
114
121
|
}
|
|
115
122
|
};
|
|
116
123
|
exports.CryptoService = CryptoService;
|
|
117
|
-
exports.CryptoService = CryptoService = __decorate([
|
|
124
|
+
exports.CryptoService = CryptoService = CryptoService_1 = __decorate([
|
|
118
125
|
(0, common_1.Injectable)()
|
|
119
126
|
], CryptoService);
|
|
120
127
|
//# sourceMappingURL=crypto.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.service.js","sourceRoot":"","sources":["../../src/common/crypto.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.service.js","sourceRoot":"","sources":["../../src/common/crypto.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-filter.d.ts","sourceRoot":"","sources":["../../src/common/error-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,aAAa,
|
|
1
|
+
{"version":3,"file":"error-filter.d.ts","sourceRoot":"","sources":["../../src/common/error-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,aAAa,EAId,MAAM,gBAAgB,CAAC;AASxB,qBACa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAgEpD,OAAO,CAAC,gBAAgB;CAoBzB"}
|
|
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var GlobalExceptionFilter_1;
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
10
|
exports.GlobalExceptionFilter = void 0;
|
|
10
11
|
const common_1 = require("@nestjs/common");
|
|
@@ -13,7 +14,8 @@ const path_1 = require("path");
|
|
|
13
14
|
const sensitive_filter_1 = require("./sensitive-filter");
|
|
14
15
|
const SPA_INDEX = (0, path_1.join)(__dirname, '..', '..', 'public', 'index.html');
|
|
15
16
|
const HAS_SPA = (0, fs_1.existsSync)(SPA_INDEX);
|
|
16
|
-
let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
17
|
+
let GlobalExceptionFilter = GlobalExceptionFilter_1 = class GlobalExceptionFilter {
|
|
18
|
+
logger = new common_1.Logger(GlobalExceptionFilter_1.name);
|
|
17
19
|
catch(exception, host) {
|
|
18
20
|
const ctx = host.switchToHttp();
|
|
19
21
|
const request = ctx.getRequest();
|
|
@@ -56,6 +58,8 @@ let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
|
56
58
|
exception instanceof Error
|
|
57
59
|
? exception.message
|
|
58
60
|
: 'An unexpected error occurred';
|
|
61
|
+
// Log unexpected errors with full stack trace
|
|
62
|
+
this.logger.error(exception instanceof Error ? exception.stack : String(exception), 'Unhandled exception');
|
|
59
63
|
}
|
|
60
64
|
const body = {
|
|
61
65
|
error: {
|
|
@@ -88,7 +92,7 @@ let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
|
88
92
|
}
|
|
89
93
|
};
|
|
90
94
|
exports.GlobalExceptionFilter = GlobalExceptionFilter;
|
|
91
|
-
exports.GlobalExceptionFilter = GlobalExceptionFilter = __decorate([
|
|
95
|
+
exports.GlobalExceptionFilter = GlobalExceptionFilter = GlobalExceptionFilter_1 = __decorate([
|
|
92
96
|
(0, common_1.Catch)()
|
|
93
97
|
], GlobalExceptionFilter);
|
|
94
98
|
//# sourceMappingURL=error-filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-filter.js","sourceRoot":"","sources":["../../src/common/error-filter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-filter.js","sourceRoot":"","sources":["../../src/common/error-filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the project path (e.g. "group/project") from a git repo URL.
|
|
3
|
+
*/
|
|
4
|
+
export declare function extractProjectPath(repoUrl: string): string | null;
|
|
5
|
+
/**
|
|
6
|
+
* Extract the base URL (scheme + host) from a git repo URL.
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractGitBaseUrl(repoUrl: string): string | null;
|
|
9
|
+
//# sourceMappingURL=git-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/common/git-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractProjectPath = extractProjectPath;
|
|
4
|
+
exports.extractGitBaseUrl = extractGitBaseUrl;
|
|
5
|
+
/**
|
|
6
|
+
* Extract the project path (e.g. "group/project") from a git repo URL.
|
|
7
|
+
*/
|
|
8
|
+
function extractProjectPath(repoUrl) {
|
|
9
|
+
// SSH format: git@host:path.git
|
|
10
|
+
const sshMatch = /^git@[^:]+:(.+?)(?:\.git)?$/.exec(repoUrl);
|
|
11
|
+
if (sshMatch)
|
|
12
|
+
return sshMatch[1];
|
|
13
|
+
// HTTPS format: https://host/path.git or https://host/path
|
|
14
|
+
try {
|
|
15
|
+
const parsed = new URL(repoUrl);
|
|
16
|
+
let path = parsed.pathname;
|
|
17
|
+
path = path.replace(/^\//, '').replace(/\.git$/, '');
|
|
18
|
+
return path || null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract the base URL (scheme + host) from a git repo URL.
|
|
26
|
+
*/
|
|
27
|
+
function extractGitBaseUrl(repoUrl) {
|
|
28
|
+
// SSH format: git@host:path -> https://host
|
|
29
|
+
const sshMatch = /^git@([^:]+):/.exec(repoUrl);
|
|
30
|
+
if (sshMatch)
|
|
31
|
+
return `https://${sshMatch[1]}`;
|
|
32
|
+
// HTTPS format
|
|
33
|
+
try {
|
|
34
|
+
const parsed = new URL(repoUrl);
|
|
35
|
+
return `${parsed.protocol}//${parsed.host}`;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=git-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/common/git-utils.ts"],"names":[],"mappings":";;AAGA,gDAcC;AAKD,8CAYC;AAlCD;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAAe;IAChD,gCAAgC;IAChC,MAAM,QAAQ,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,2DAA2D;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ;QAAE,OAAO,WAAW,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,eAAe;IACf,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.controller.d.ts","sourceRoot":"","sources":["../../src/common/health.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAU/D,qBACa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe;IAItC,KAAK,CAAQ,GAAG,EAAE;QAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"health.controller.d.ts","sourceRoot":"","sources":["../../src/common/health.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAU/D,qBACa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe;IAItC,KAAK,CAAQ,GAAG,EAAE;QAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAoChG"}
|
|
@@ -27,7 +27,7 @@ let HealthController = class HealthController {
|
|
|
27
27
|
const health = {
|
|
28
28
|
status: 'ok',
|
|
29
29
|
redis: 'connected',
|
|
30
|
-
sqlite: '
|
|
30
|
+
sqlite: 'ok',
|
|
31
31
|
bullmq: 'ready',
|
|
32
32
|
uptime: process.uptime(),
|
|
33
33
|
};
|
|
@@ -44,12 +44,10 @@ let HealthController = class HealthController {
|
|
|
44
44
|
health.redis = 'disconnected';
|
|
45
45
|
health.status = 'error';
|
|
46
46
|
}
|
|
47
|
-
// Check SQLite
|
|
47
|
+
// Check SQLite (read-only probe — no WAL writes)
|
|
48
48
|
try {
|
|
49
49
|
const db = this.database.getDb();
|
|
50
|
-
db.
|
|
51
|
-
INSERT INTO _health_check (_id) VALUES (1);
|
|
52
|
-
DELETE FROM _health_check WHERE _id = 1;`);
|
|
50
|
+
db.prepare('SELECT 1').get();
|
|
53
51
|
}
|
|
54
52
|
catch {
|
|
55
53
|
health.sqlite = 'error';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../src/common/health.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,0DAAsD;AACtD,mEAA+D;AAWxD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAER;IACA;IAFnB,YACmB,KAAmB,EACnB,QAAyB;QADzB,UAAK,GAAL,KAAK,CAAc;QACnB,aAAQ,GAAR,QAAQ,CAAiB;IACzC,CAAC;IAGE,AAAN,KAAK,CAAC,KAAK,CAAQ,GAA4D;QAC7E,MAAM,MAAM,GAAiB;YAC3B,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../src/common/health.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,0DAAsD;AACtD,mEAA+D;AAWxD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAER;IACA;IAFnB,YACmB,KAAmB,EACnB,QAAyB;QADzB,UAAK,GAAL,KAAK,CAAc;QACnB,aAAQ,GAAR,QAAQ,CAAiB;IACzC,CAAC;IAGE,AAAN,KAAK,CAAC,KAAK,CAAQ,GAA4D;QAC7E,MAAM,MAAM,GAAiB;YAC3B,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;SACzB,CAAC;QAEF,cAAc;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC;gBAC9B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC;YAC9B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;QAC1B,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;YACxB,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;QAC1B,CAAC;QAED,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAU,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAU,CAAC,mBAAmB,CAAC;QAE1E,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;CACF,CAAA;AA3CY,4CAAgB;AAOrB;IADL,IAAA,YAAG,GAAE;IACO,WAAA,IAAA,YAAG,GAAE,CAAA;;;;6CAmCjB;2BA1CU,gBAAgB;IAD5B,IAAA,mBAAU,EAAC,SAAS,CAAC;qCAGM,4BAAY;QACT,kCAAe;GAHjC,gBAAgB,CA2C5B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Machine } from '@overlordai/protocol';
|
|
2
|
+
/**
|
|
3
|
+
* Strip sensitive fields (e.g. recoverySecretHash) from a Machine object
|
|
4
|
+
* before returning it in API responses.
|
|
5
|
+
*/
|
|
6
|
+
export declare function stripMachineSecrets(machine: Machine): {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
host: string;
|
|
10
|
+
port: number;
|
|
11
|
+
tokenId: number;
|
|
12
|
+
os: string | null;
|
|
13
|
+
cpuModel: string | null;
|
|
14
|
+
cpuCores: number | null;
|
|
15
|
+
memoryGb: number | null;
|
|
16
|
+
maxSlots: number;
|
|
17
|
+
activeSlots: number;
|
|
18
|
+
cpuUsage: number;
|
|
19
|
+
memoryUsage: number;
|
|
20
|
+
diskUsage: number;
|
|
21
|
+
loadThreshold: number;
|
|
22
|
+
tags: string[];
|
|
23
|
+
capabilities: string[];
|
|
24
|
+
protocolVersion: string;
|
|
25
|
+
workerVersion: string | null;
|
|
26
|
+
lastHeartbeat: string | null;
|
|
27
|
+
sshUrl: string | null;
|
|
28
|
+
status: import("@overlordai/protocol").MachineStatus;
|
|
29
|
+
decommissionedAt: string | null;
|
|
30
|
+
decommissionedBy: number | null;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=machine-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-utils.d.ts","sourceRoot":"","sources":["../../src/common/machine-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;EAGnD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stripMachineSecrets = stripMachineSecrets;
|
|
4
|
+
/**
|
|
5
|
+
* Strip sensitive fields (e.g. recoverySecretHash) from a Machine object
|
|
6
|
+
* before returning it in API responses.
|
|
7
|
+
*/
|
|
8
|
+
function stripMachineSecrets(machine) {
|
|
9
|
+
const { recoverySecretHash, ...safe } = machine;
|
|
10
|
+
return safe;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=machine-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-utils.js","sourceRoot":"","sources":["../../src/common/machine-utils.ts"],"names":[],"mappings":";;AAMA,kDAGC;AAPD;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { PaginatedResult } from '@overlordai/protocol';
|
|
2
|
+
/**
|
|
3
|
+
* Clamp a user-supplied limit string to a safe integer range.
|
|
4
|
+
*/
|
|
5
|
+
export declare function clampLimit(value: string | undefined, defaultLimit?: number, max?: number): number;
|
|
6
|
+
/**
|
|
7
|
+
* Clamp a user-supplied offset string to a non-negative integer.
|
|
8
|
+
*/
|
|
9
|
+
export declare function clampOffset(value: string | undefined): number;
|
|
2
10
|
/**
|
|
3
11
|
* Encode an integer id as a base64 cursor string.
|
|
4
12
|
*/
|
|
@@ -8,11 +16,10 @@ export declare function encodeCursor(id: number): string;
|
|
|
8
16
|
*/
|
|
9
17
|
export declare function decodeCursor(cursor: string): number;
|
|
10
18
|
/**
|
|
11
|
-
* Paginate an array of
|
|
19
|
+
* Paginate an array of raw DB rows: slice first, then map.
|
|
12
20
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* Otherwise all items are returned with `nextCursor: null`.
|
|
21
|
+
* The caller should pass the raw rows (limit + 1) and a mapper function.
|
|
22
|
+
* This avoids mapping the extra "hasMore" probe row unnecessarily.
|
|
16
23
|
*/
|
|
17
|
-
export declare function paginate<T>(
|
|
24
|
+
export declare function paginate<TRow, T>(rows: TRow[], limit: number, mapper: (row: TRow) => T, getId: (item: T) => number): PaginatedResult<T>;
|
|
18
25
|
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/common/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/common/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,YAAY,SAAK,EACjB,GAAG,SAAM,GACR,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,CAAC,EAC9B,IAAI,EAAE,IAAI,EAAE,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,EACxB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GACzB,eAAe,CAAC,CAAC,CAAC,CAQpB"}
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clampLimit = clampLimit;
|
|
4
|
+
exports.clampOffset = clampOffset;
|
|
3
5
|
exports.encodeCursor = encodeCursor;
|
|
4
6
|
exports.decodeCursor = decodeCursor;
|
|
5
7
|
exports.paginate = paginate;
|
|
8
|
+
/**
|
|
9
|
+
* Clamp a user-supplied limit string to a safe integer range.
|
|
10
|
+
*/
|
|
11
|
+
function clampLimit(value, defaultLimit = 20, max = 100) {
|
|
12
|
+
const parsed = value ? parseInt(value, 10) : NaN;
|
|
13
|
+
const n = Number.isFinite(parsed) ? parsed : defaultLimit;
|
|
14
|
+
return Math.min(Math.max(n, 1), max);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Clamp a user-supplied offset string to a non-negative integer.
|
|
18
|
+
*/
|
|
19
|
+
function clampOffset(value) {
|
|
20
|
+
const parsed = value ? parseInt(value, 10) : NaN;
|
|
21
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
|
22
|
+
}
|
|
6
23
|
/**
|
|
7
24
|
* Encode an integer id as a base64 cursor string.
|
|
8
25
|
*/
|
|
@@ -16,24 +33,17 @@ function decodeCursor(cursor) {
|
|
|
16
33
|
return parseInt(Buffer.from(cursor, 'base64').toString(), 10);
|
|
17
34
|
}
|
|
18
35
|
/**
|
|
19
|
-
* Paginate an array of
|
|
36
|
+
* Paginate an array of raw DB rows: slice first, then map.
|
|
20
37
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* Otherwise all items are returned with `nextCursor: null`.
|
|
38
|
+
* The caller should pass the raw rows (limit + 1) and a mapper function.
|
|
39
|
+
* This avoids mapping the extra "hasMore" probe row unnecessarily.
|
|
24
40
|
*/
|
|
25
|
-
function paginate(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
data: items,
|
|
36
|
-
nextCursor: null,
|
|
37
|
-
};
|
|
41
|
+
function paginate(rows, limit, mapper, getId) {
|
|
42
|
+
const hasMore = rows.length > limit;
|
|
43
|
+
const data = (hasMore ? rows.slice(0, limit) : rows).map(mapper);
|
|
44
|
+
const nextCursor = hasMore && data.length > 0
|
|
45
|
+
? encodeCursor(getId(data[data.length - 1]))
|
|
46
|
+
: null;
|
|
47
|
+
return { data, nextCursor };
|
|
38
48
|
}
|
|
39
49
|
//# sourceMappingURL=pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/common/pagination.ts"],"names":[],"mappings":";;AAKA,oCAEC;AAKD,oCAEC;
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/common/pagination.ts"],"names":[],"mappings":";;AAKA,gCAQC;AAKD,kCAGC;AAKD,oCAEC;AAKD,oCAEC;AAQD,4BAaC;AAtDD;;GAEG;AACH,SAAgB,UAAU,CACxB,KAAyB,EACzB,YAAY,GAAG,EAAE,EACjB,GAAG,GAAG,GAAG;IAET,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAyB;IACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,EAAU;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CACtB,IAAY,EACZ,KAAa,EACb,MAAwB,EACxB,KAA0B;IAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,UAAU,GACd,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const ALLOWED_PROJECT_FIELDS: readonly ["name", "repoUrl", "sshUrl", "defaultBranch", "pipeline", "setupCommands", "agentType", "agentEnv", "agentCommand", "workspaceRoot", "testCommand", "skillsPath", "allowedTools", "maxTurns", "ptyOutputFilter", "isDefault", "aliases", "gitPlatform", "defaultReviewers"];
|
|
2
|
+
/**
|
|
3
|
+
* Validate and sanitize project update fields.
|
|
4
|
+
* Shared between ProjectController and AdminProjectController.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateProjectUpdate(body: Record<string, unknown>): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=project-validation.d.ts.map
|