@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
|
@@ -1,43 +1,10 @@
|
|
|
1
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
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
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;
|
|
22
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
7
|
};
|
|
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
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
10
|
};
|
|
@@ -46,28 +13,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
46
13
|
exports.AuthService = void 0;
|
|
47
14
|
const common_1 = require("@nestjs/common");
|
|
48
15
|
const jwt_1 = require("@nestjs/jwt");
|
|
49
|
-
const bcrypt = __importStar(require("bcrypt"));
|
|
50
|
-
const otplib_1 = require("otplib");
|
|
51
16
|
const uuid_1 = require("uuid");
|
|
52
17
|
const developer_repository_1 = require("../database/repositories/developer.repository");
|
|
53
18
|
const redis_service_1 = require("../redis/redis.service");
|
|
19
|
+
const crypto_service_1 = require("../common/crypto.service");
|
|
20
|
+
const protocol_1 = require("@overlordai/protocol");
|
|
21
|
+
const config_1 = require("../common/config");
|
|
54
22
|
let AuthService = AuthService_1 = class AuthService {
|
|
55
23
|
jwtService;
|
|
56
24
|
developerRepo;
|
|
57
25
|
redis;
|
|
26
|
+
crypto;
|
|
58
27
|
logger = new common_1.Logger(AuthService_1.name);
|
|
59
|
-
constructor(jwtService, developerRepo, redis) {
|
|
28
|
+
constructor(jwtService, developerRepo, redis, crypto) {
|
|
60
29
|
this.jwtService = jwtService;
|
|
61
30
|
this.developerRepo = developerRepo;
|
|
62
31
|
this.redis = redis;
|
|
32
|
+
this.crypto = crypto;
|
|
63
33
|
}
|
|
64
34
|
onModuleInit() {
|
|
65
35
|
const defaultSecrets = ['default-jwt-secret', 'default-worker-jwt-secret'];
|
|
66
|
-
const jwtSecret =
|
|
67
|
-
const workerJwtSecret =
|
|
36
|
+
const jwtSecret = (0, config_1.getJwtSecret)();
|
|
37
|
+
const workerJwtSecret = (0, config_1.getWorkerJwtSecret)();
|
|
68
38
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
69
|
-
const jwtSecretIsDefault =
|
|
70
|
-
const workerSecretIsDefault =
|
|
39
|
+
const jwtSecretIsDefault = defaultSecrets.includes(jwtSecret);
|
|
40
|
+
const workerSecretIsDefault = defaultSecrets.includes(workerJwtSecret);
|
|
71
41
|
if (isProduction) {
|
|
72
42
|
if (jwtSecretIsDefault) {
|
|
73
43
|
throw new Error('JWT_SECRET must be set to a non-default value in production');
|
|
@@ -92,14 +62,14 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
92
62
|
if (!developer) {
|
|
93
63
|
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
94
64
|
}
|
|
95
|
-
if (developer.status !==
|
|
65
|
+
if (developer.status !== protocol_1.DeveloperStatus.ACTIVE) {
|
|
96
66
|
throw new common_1.UnauthorizedException('Account is inactive');
|
|
97
67
|
}
|
|
98
68
|
if (!developer.passwordHash) {
|
|
99
69
|
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
100
70
|
}
|
|
101
|
-
// 3.
|
|
102
|
-
const passwordValid = await
|
|
71
|
+
// 3. Compare password
|
|
72
|
+
const passwordValid = await this.crypto.comparePassword(password, developer.passwordHash);
|
|
103
73
|
if (!passwordValid) {
|
|
104
74
|
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
105
75
|
}
|
|
@@ -113,7 +83,7 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
113
83
|
scope: 'totp_setup',
|
|
114
84
|
};
|
|
115
85
|
const accessToken = this.jwtService.sign(payload, {
|
|
116
|
-
secret:
|
|
86
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
117
87
|
expiresIn: '15m',
|
|
118
88
|
});
|
|
119
89
|
return { accessToken, totpSetup: true };
|
|
@@ -123,10 +93,7 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
123
93
|
throw new common_1.UnauthorizedException('TOTP_REQUIRED');
|
|
124
94
|
}
|
|
125
95
|
// 6. Verify TOTP code
|
|
126
|
-
const totpValid =
|
|
127
|
-
token: totpCode,
|
|
128
|
-
secret: developer.totpSecret,
|
|
129
|
-
});
|
|
96
|
+
const totpValid = this.crypto.verifyTotp(developer.totpSecret, totpCode);
|
|
130
97
|
if (!totpValid) {
|
|
131
98
|
throw new common_1.UnauthorizedException('Invalid TOTP code');
|
|
132
99
|
}
|
|
@@ -140,7 +107,7 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
140
107
|
let payload;
|
|
141
108
|
try {
|
|
142
109
|
payload = this.jwtService.verify(refreshToken, {
|
|
143
|
-
secret:
|
|
110
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
144
111
|
});
|
|
145
112
|
}
|
|
146
113
|
catch {
|
|
@@ -151,20 +118,13 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
151
118
|
}
|
|
152
119
|
// 2. Atomically blacklist the old refresh token (SET NX).
|
|
153
120
|
// If SET NX returns null, the token was already used — reject.
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
if (remainingTtl > 0) {
|
|
157
|
-
const result = await this.redis.getClient().set(`rt:${payload.jti}`, '1', 'EX', remainingTtl, 'NX');
|
|
158
|
-
if (result === null) {
|
|
159
|
-
throw new common_1.UnauthorizedException('Token has been revoked');
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
121
|
+
const blacklisted = await this.blacklistRefreshToken(payload.jti, payload.exp);
|
|
122
|
+
if (!blacklisted) {
|
|
163
123
|
throw new common_1.UnauthorizedException('Token has been revoked');
|
|
164
124
|
}
|
|
165
125
|
// 3. Check developer still active
|
|
166
126
|
const developer = this.developerRepo.findById(payload.sub);
|
|
167
|
-
if (!developer || developer.status !==
|
|
127
|
+
if (!developer || developer.status !== protocol_1.DeveloperStatus.ACTIVE) {
|
|
168
128
|
throw new common_1.UnauthorizedException('Account is inactive');
|
|
169
129
|
}
|
|
170
130
|
// 5. Sign new access token and refresh token
|
|
@@ -177,22 +137,20 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
177
137
|
let payload;
|
|
178
138
|
try {
|
|
179
139
|
payload = this.jwtService.verify(refreshToken, {
|
|
180
|
-
secret:
|
|
140
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
181
141
|
});
|
|
182
142
|
}
|
|
183
143
|
catch {
|
|
184
144
|
// If token is already expired or invalid, nothing to blacklist
|
|
185
145
|
return;
|
|
186
146
|
}
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
// 2. Blacklist the refresh token
|
|
191
|
-
await this.redis.getClient().set(`rt:${payload.jti}`, '1', 'EX', remainingTtl, 'NX');
|
|
192
|
-
// 3. Set a per-user logout timestamp so PTY revalidation can detect
|
|
147
|
+
const blacklisted = await this.blacklistRefreshToken(payload.jti, payload.exp);
|
|
148
|
+
if (blacklisted) {
|
|
149
|
+
// Set a per-user logout timestamp so PTY revalidation can detect
|
|
193
150
|
// that the user logged out after their access token was issued.
|
|
194
151
|
// TTL matches access token lifetime (15 min) — after that the access
|
|
195
152
|
// token would expire naturally and PTY revalidation closes the socket.
|
|
153
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
196
154
|
await this.redis.getClient().set(`logout:${payload.sub}`, String(nowSeconds), 'EX', 900);
|
|
197
155
|
}
|
|
198
156
|
}
|
|
@@ -204,7 +162,7 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
204
162
|
jti: (0, uuid_1.v4)(),
|
|
205
163
|
};
|
|
206
164
|
return this.jwtService.sign(payload, {
|
|
207
|
-
secret:
|
|
165
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
208
166
|
expiresIn: '15m',
|
|
209
167
|
});
|
|
210
168
|
}
|
|
@@ -215,17 +173,17 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
215
173
|
type: 'refresh',
|
|
216
174
|
};
|
|
217
175
|
return this.jwtService.sign(payload, {
|
|
218
|
-
secret:
|
|
176
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
219
177
|
expiresIn: '7d',
|
|
220
178
|
});
|
|
221
179
|
}
|
|
222
|
-
signWorkerJwt(
|
|
180
|
+
signWorkerJwt(workerId, tokenId) {
|
|
223
181
|
const payload = {
|
|
224
|
-
sub:
|
|
182
|
+
sub: workerId,
|
|
225
183
|
tokenId,
|
|
226
184
|
};
|
|
227
185
|
return this.jwtService.sign(payload, {
|
|
228
|
-
secret:
|
|
186
|
+
secret: (0, config_1.getWorkerJwtSecret)(),
|
|
229
187
|
expiresIn: '7d',
|
|
230
188
|
});
|
|
231
189
|
}
|
|
@@ -236,19 +194,19 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
236
194
|
jti: (0, uuid_1.v4)(),
|
|
237
195
|
};
|
|
238
196
|
return this.jwtService.sign(payload, {
|
|
239
|
-
secret:
|
|
240
|
-
expiresIn:
|
|
197
|
+
secret: (0, config_1.getWorkerJwtSecret)(),
|
|
198
|
+
expiresIn: protocol_1.CHANNEL_TOKEN_EXPIRY_SEC,
|
|
241
199
|
});
|
|
242
200
|
}
|
|
243
201
|
async validateChannelToken(token, expectedAud) {
|
|
244
202
|
let payload;
|
|
245
203
|
try {
|
|
246
204
|
payload = this.jwtService.verify(token, {
|
|
247
|
-
secret:
|
|
205
|
+
secret: (0, config_1.getWorkerJwtSecret)(),
|
|
248
206
|
});
|
|
249
207
|
}
|
|
250
|
-
catch {
|
|
251
|
-
throw new common_1.UnauthorizedException(
|
|
208
|
+
catch (err) {
|
|
209
|
+
throw new common_1.UnauthorizedException(`Invalid channel token: ${(0, protocol_1.getErrorMessage)(err)}`);
|
|
252
210
|
}
|
|
253
211
|
if (payload.aud !== expectedAud) {
|
|
254
212
|
throw new common_1.UnauthorizedException(`Channel token audience mismatch: expected ${expectedAud}`);
|
|
@@ -275,7 +233,7 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
275
233
|
verifyWorkerJwt(token) {
|
|
276
234
|
try {
|
|
277
235
|
return this.jwtService.verify(token, {
|
|
278
|
-
secret:
|
|
236
|
+
secret: (0, config_1.getWorkerJwtSecret)(),
|
|
279
237
|
});
|
|
280
238
|
}
|
|
281
239
|
catch {
|
|
@@ -289,19 +247,32 @@ let AuthService = AuthService_1 = class AuthService {
|
|
|
289
247
|
verifyUserJwt(token) {
|
|
290
248
|
try {
|
|
291
249
|
return this.jwtService.verify(token, {
|
|
292
|
-
secret:
|
|
250
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
293
251
|
});
|
|
294
252
|
}
|
|
295
253
|
catch {
|
|
296
254
|
throw new common_1.UnauthorizedException('Invalid user JWT');
|
|
297
255
|
}
|
|
298
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Atomically blacklist a refresh token via Redis SET NX.
|
|
259
|
+
* Returns true if successfully blacklisted, false if already expired or used.
|
|
260
|
+
*/
|
|
261
|
+
async blacklistRefreshToken(jti, exp) {
|
|
262
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
263
|
+
const remainingTtl = exp - nowSeconds;
|
|
264
|
+
if (remainingTtl <= 0)
|
|
265
|
+
return false;
|
|
266
|
+
const result = await this.redis.getClient().set(`rt:${jti}`, '1', 'EX', remainingTtl, 'NX');
|
|
267
|
+
return result !== null;
|
|
268
|
+
}
|
|
299
269
|
};
|
|
300
270
|
exports.AuthService = AuthService;
|
|
301
271
|
exports.AuthService = AuthService = AuthService_1 = __decorate([
|
|
302
272
|
(0, common_1.Injectable)(),
|
|
303
273
|
__metadata("design:paramtypes", [jwt_1.JwtService,
|
|
304
274
|
developer_repository_1.DeveloperRepository,
|
|
305
|
-
redis_service_1.RedisService
|
|
275
|
+
redis_service_1.RedisService,
|
|
276
|
+
crypto_service_1.CryptoService])
|
|
306
277
|
], AuthService);
|
|
307
278
|
//# sourceMappingURL=auth.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
import type { DeveloperRole } from '@overlordai/protocol';
|
|
3
|
+
export interface AuthenticatedRequest extends Request {
|
|
4
|
+
user: {
|
|
5
|
+
sub: number;
|
|
6
|
+
name: string;
|
|
7
|
+
role: DeveloperRole;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=authenticated-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated-request.d.ts","sourceRoot":"","sources":["../../src/auth/authenticated-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,CAAA;KAAE,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated-request.js","sourceRoot":"","sources":["../../src/auth/authenticated-request.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-user.middleware.d.ts","sourceRoot":"","sources":["../../src/auth/extract-user.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"extract-user.middleware.d.ts","sourceRoot":"","sources":["../../src/auth/extract-user.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;;;;;GAWG;AACH,qBACa,qBAAsB,YAAW,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;CAkB5D"}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.ExtractUserMiddleware = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const jwt_1 = require("@nestjs/jwt");
|
|
15
|
+
const config_1 = require("../common/config");
|
|
15
16
|
/**
|
|
16
17
|
* Middleware that attempts to extract the authenticated user from the JWT
|
|
17
18
|
* in the Authorization header and attach it to `request.user`.
|
|
@@ -37,7 +38,7 @@ let ExtractUserMiddleware = class ExtractUserMiddleware {
|
|
|
37
38
|
if (token.includes('.')) {
|
|
38
39
|
try {
|
|
39
40
|
const payload = this.jwtService.verify(token, {
|
|
40
|
-
secret:
|
|
41
|
+
secret: (0, config_1.getJwtSecret)(),
|
|
41
42
|
});
|
|
42
43
|
req.user = payload;
|
|
43
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-user.middleware.js","sourceRoot":"","sources":["../../src/auth/extract-user.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,qCAAyC;
|
|
1
|
+
{"version":3,"file":"extract-user.middleware.js","sourceRoot":"","sources":["../../src/auth/extract-user.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,qCAAyC;AACzC,6CAAgD;AAEhD;;;;;;;;;;;GAWG;AAEI,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEvD,GAAG,CAAC,GAAY,EAAE,IAAc,EAAE,IAAkB;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;QAC9C,IAAI,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,+DAA+D;YAC/D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;wBAC5C,MAAM,EAAE,IAAA,qBAAY,GAAE;qBACvB,CAAC,CAAC;oBACF,GAAW,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;CACF,CAAA;AArBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAE8B,gBAAU;GADxC,qBAAqB,CAqBjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAyB,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;;
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAyB,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;;AAIvF,qBACa,YAAa,SAAQ,iBAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,kBAAkB,EAAE,wBAAwB,EAC5C,aAAa,EAAE,mBAAmB,EAClC,SAAS,EAAE,SAAS;IAKjC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAsF/D"}
|
|
@@ -49,6 +49,7 @@ const passport_1 = require("@nestjs/passport");
|
|
|
49
49
|
const crypto = __importStar(require("node:crypto"));
|
|
50
50
|
const developer_token_repository_1 = require("../../database/repositories/developer-token.repository");
|
|
51
51
|
const developer_repository_1 = require("../../database/repositories/developer.repository");
|
|
52
|
+
const protocol_1 = require("@overlordai/protocol");
|
|
52
53
|
const allow_totp_setup_decorator_1 = require("../decorators/allow-totp-setup.decorator");
|
|
53
54
|
let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
54
55
|
developerTokenRepo;
|
|
@@ -101,7 +102,7 @@ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
|
101
102
|
.update(rawToken)
|
|
102
103
|
.digest('hex');
|
|
103
104
|
const tokenRecord = this.developerTokenRepo.findByTokenHash(tokenHash);
|
|
104
|
-
if (!tokenRecord || tokenRecord.status !==
|
|
105
|
+
if (!tokenRecord || tokenRecord.status !== protocol_1.TokenStatus.ACTIVE) {
|
|
105
106
|
throw new common_1.UnauthorizedException();
|
|
106
107
|
}
|
|
107
108
|
// Check expiration — reject tokens with unparseable expiresAt values
|
|
@@ -116,7 +117,7 @@ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
|
116
117
|
}
|
|
117
118
|
// Load the developer
|
|
118
119
|
const developer = this.developerRepo.findById(tokenRecord.developerId);
|
|
119
|
-
if (!developer || developer.status !==
|
|
120
|
+
if (!developer || developer.status !== protocol_1.DeveloperStatus.ACTIVE) {
|
|
120
121
|
throw new common_1.UnauthorizedException();
|
|
121
122
|
}
|
|
122
123
|
// Attach user to request (same shape as JWT payload)
|
|
@@ -126,6 +127,8 @@ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
|
126
127
|
role: developer.role,
|
|
127
128
|
jti: `pat-${tokenRecord.id}`,
|
|
128
129
|
};
|
|
130
|
+
// Update last used timestamp for the PAT
|
|
131
|
+
this.developerTokenRepo.updateLastUsed(tokenRecord.id);
|
|
129
132
|
return true;
|
|
130
133
|
}
|
|
131
134
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAqF;AACrF,uCAAyC;AACzC,+CAA6C;AAC7C,oDAAsC;AACtC,uGAAkG;AAClG,2FAAuF;AACvF,yFAAgF;AAGzE,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;IAE7B;IACA;IACA;IAHnB,YACmB,kBAA4C,EAC5C,aAAkC,EAClC,SAAoB;QAErC,KAAK,EAAE,CAAC;QAJS,uBAAkB,GAAlB,kBAAkB,CAA0B;QAC5C,kBAAa,GAAb,aAAa,CAAqB;QAClC,cAAS,GAAT,SAAS,CAAW;IAGvC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,gBAAgB;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAsB,CAAC;YACtE,IAAI,MAAM,EAAE,CAAC;gBACX,4CAA4C;gBAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC1B,IAAI,IAAI,EAAE,KAAK,KAAK,YAAY,EAAE,CAAC;oBACjC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CACrD,iDAAoB,EACpB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC3C,CAAC;oBACF,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,MAAM,IAAI,8BAAqB,CAC7B,4CAA4C,CAC7C,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wDAAwD;YACxD,IACE,GAAG,YAAY,8BAAqB;gBACpC,CAAC,GAAG,CAAC,OAAO,KAAK,4CAA4C,CAAC,EAC9D,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,6BAA6B;QAC/B,CAAC;QAED,sCAAsC;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,8BAAqB,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAErC,4EAA4E;QAC5E,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACrD,MAAM,IAAI,8BAAqB,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,SAAS,GAAG,MAAM;aACrB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,QAAQ,CAAC;aAChB,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/jwt-auth.guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-role.guard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/project-role.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"project-role.guard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/project-role.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAgBlE,qBACa,gBAAiB,YAAW,WAAW;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe;IAG5C,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAoDhD"}
|
|
@@ -15,6 +15,10 @@ const core_1 = require("@nestjs/core");
|
|
|
15
15
|
const protocol_1 = require("@overlordai/protocol");
|
|
16
16
|
const database_service_1 = require("../../database/database.service");
|
|
17
17
|
const project_roles_decorator_1 = require("../decorators/project-roles.decorator");
|
|
18
|
+
const PROJECT_ROLE_HIERARCHY = {
|
|
19
|
+
[protocol_1.ProjectRole.MEMBER]: 0,
|
|
20
|
+
[protocol_1.ProjectRole.MAINTAINER]: 1,
|
|
21
|
+
};
|
|
18
22
|
let ProjectRoleGuard = class ProjectRoleGuard {
|
|
19
23
|
reflector;
|
|
20
24
|
database;
|
|
@@ -49,14 +53,8 @@ let ProjectRoleGuard = class ProjectRoleGuard {
|
|
|
49
53
|
if (!membership) {
|
|
50
54
|
throw new common_1.ForbiddenException('Not a member of this project');
|
|
51
55
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const roleHierarchy = {
|
|
55
|
-
[protocol_1.ProjectRole.MEMBER]: 0,
|
|
56
|
-
[protocol_1.ProjectRole.MAINTAINER]: 1,
|
|
57
|
-
};
|
|
58
|
-
const memberLevel = roleHierarchy[membership.role] ?? -1;
|
|
59
|
-
const minRequired = Math.min(...requiredRoles.map((r) => roleHierarchy[r] ?? Infinity));
|
|
56
|
+
const memberLevel = PROJECT_ROLE_HIERARCHY[membership.role] ?? -1;
|
|
57
|
+
const minRequired = Math.min(...requiredRoles.map((r) => PROJECT_ROLE_HIERARCHY[r] ?? Infinity));
|
|
60
58
|
if (memberLevel < minRequired) {
|
|
61
59
|
throw new common_1.ForbiddenException('Insufficient project role');
|
|
62
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-role.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/project-role.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,uCAAyC;AACzC,mDAAkE;AAClE,sEAAkE;AAClE,mFAA0E;
|
|
1
|
+
{"version":3,"file":"project-role.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/project-role.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,uCAAyC;AACzC,mDAAkE;AAClE,sEAAkE;AAClE,mFAA0E;AAE1E,MAAM,sBAAsB,GAA2B;IACrD,CAAC,sBAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IACvB,CAAC,sBAAW,CAAC,UAAU,CAAC,EAAE,CAAC;CAC5B,CAAC;AAWK,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAER;IACA;IAFnB,YACmB,SAAoB,EACpB,QAAyB;QADzB,cAAS,GAAT,SAAS,CAAW;QACpB,aAAQ,GAAR,QAAQ,CAAiB;IACzC,CAAC;IAEJ,WAAW,CAAC,OAAyB;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAEpD,2CAAiB,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEjE,kEAAkE;QAClE,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAE1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,2BAAkB,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAa,CAAC,KAAK,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uCAAuC;QACvC,MAAM,UAAU,GACd,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;QAE5D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,2BAAkB,CAAC,uCAAuC,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;aAC7B,KAAK,EAAE;aACP,OAAO,CACN,0EAA0E,CAC3E;aACA,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAiC,CAAC;QAE7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,2BAAkB,CAAC,8BAA8B,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CACnE,CAAC;QAEF,IAAI,WAAW,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM,IAAI,2BAAkB,CAAC,2BAA2B,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA1DY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAGmB,gBAAS;QACV,kCAAe;GAHjC,gBAAgB,CA0D5B"}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { Strategy } from 'passport-jwt';
|
|
2
2
|
import { DeveloperRepository } from '../database/repositories/developer.repository';
|
|
3
|
+
import { RedisService } from '../redis/redis.service';
|
|
3
4
|
interface JwtPayload {
|
|
4
5
|
sub: number;
|
|
5
6
|
name: string;
|
|
6
7
|
role: string;
|
|
7
8
|
jti: string;
|
|
9
|
+
iat?: number;
|
|
8
10
|
scope?: string;
|
|
9
11
|
}
|
|
10
12
|
declare const JwtStrategy_base: new (...args: any[]) => Strategy;
|
|
11
13
|
export declare class JwtStrategy extends JwtStrategy_base {
|
|
12
14
|
private readonly developerRepo;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
private readonly redis;
|
|
16
|
+
constructor(developerRepo: DeveloperRepository, redis: RedisService);
|
|
17
|
+
validate(payload: JwtPayload): Promise<{
|
|
15
18
|
sub: number;
|
|
16
19
|
name: string;
|
|
17
20
|
role: string;
|
|
18
21
|
jti: string;
|
|
19
22
|
scope?: string;
|
|
20
|
-
}
|
|
23
|
+
}>;
|
|
21
24
|
}
|
|
22
25
|
export {};
|
|
23
26
|
//# sourceMappingURL=jwt.strategy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.strategy.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.strategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.strategy.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.strategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;AAED,qBACa,WAAY,SAAQ,gBAA0B;IAEvD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,YAAY;IAShC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAC3C,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CAwBH"}
|
|
@@ -13,23 +13,32 @@ exports.JwtStrategy = void 0;
|
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const passport_1 = require("@nestjs/passport");
|
|
15
15
|
const passport_jwt_1 = require("passport-jwt");
|
|
16
|
+
const protocol_1 = require("@overlordai/protocol");
|
|
16
17
|
const developer_repository_1 = require("../database/repositories/developer.repository");
|
|
18
|
+
const redis_service_1 = require("../redis/redis.service");
|
|
19
|
+
const config_1 = require("../common/config");
|
|
17
20
|
let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) {
|
|
18
21
|
developerRepo;
|
|
19
|
-
|
|
22
|
+
redis;
|
|
23
|
+
constructor(developerRepo, redis) {
|
|
20
24
|
super({
|
|
21
25
|
jwtFromRequest: passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(),
|
|
22
26
|
ignoreExpiration: false,
|
|
23
|
-
secretOrKey:
|
|
27
|
+
secretOrKey: (0, config_1.getJwtSecret)(),
|
|
24
28
|
});
|
|
25
29
|
this.developerRepo = developerRepo;
|
|
30
|
+
this.redis = redis;
|
|
26
31
|
}
|
|
27
|
-
validate(payload) {
|
|
32
|
+
async validate(payload) {
|
|
33
|
+
const logoutTs = await this.redis.get(`logout:${payload.sub}`);
|
|
34
|
+
if (logoutTs && payload.iat && payload.iat <= Number(logoutTs)) {
|
|
35
|
+
throw new common_1.UnauthorizedException('Session invalidated by logout');
|
|
36
|
+
}
|
|
28
37
|
const developer = this.developerRepo.findById(payload.sub);
|
|
29
38
|
if (!developer) {
|
|
30
39
|
throw new common_1.UnauthorizedException('Developer not found');
|
|
31
40
|
}
|
|
32
|
-
if (developer.status !==
|
|
41
|
+
if (developer.status !== protocol_1.DeveloperStatus.ACTIVE) {
|
|
33
42
|
throw new common_1.UnauthorizedException('Developer account is inactive');
|
|
34
43
|
}
|
|
35
44
|
return {
|
|
@@ -44,6 +53,7 @@ let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(pas
|
|
|
44
53
|
exports.JwtStrategy = JwtStrategy;
|
|
45
54
|
exports.JwtStrategy = JwtStrategy = __decorate([
|
|
46
55
|
(0, common_1.Injectable)(),
|
|
47
|
-
__metadata("design:paramtypes", [developer_repository_1.DeveloperRepository
|
|
56
|
+
__metadata("design:paramtypes", [developer_repository_1.DeveloperRepository,
|
|
57
|
+
redis_service_1.RedisService])
|
|
48
58
|
], JwtStrategy);
|
|
49
59
|
//# sourceMappingURL=jwt.strategy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../src/auth/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAmE;AACnE,+CAAoD;AACpD,+CAAoD;AACpD,wFAAoF;
|
|
1
|
+
{"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../src/auth/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAmE;AACnE,+CAAoD;AACpD,+CAAoD;AACpD,mDAAuD;AACvD,wFAAoF;AACpF,0DAAsD;AACtD,6CAAgD;AAYzC,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,IAAA,2BAAgB,EAAC,uBAAQ,CAAC;IAEtC;IACA;IAFnB,YACmB,aAAkC,EAClC,KAAmB;QAEpC,KAAK,CAAC;YACJ,cAAc,EAAE,yBAAU,CAAC,2BAA2B,EAAE;YACxD,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,IAAA,qBAAY,GAAE;SAC5B,CAAC,CAAC;QAPc,kBAAa,GAAb,aAAa,CAAqB;QAClC,UAAK,GAAL,KAAK,CAAc;IAOtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAmB;QAOhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,QAAQ,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,8BAAqB,CAAC,+BAA+B,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE3D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,0BAAe,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,8BAAqB,CAAC,+BAA+B,CAAC,CAAC;QACnE,CAAC;QAED,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;IACJ,CAAC;CACF,CAAA;AA1CY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAGuB,0CAAmB;QAC3B,4BAAY;GAH3B,WAAW,CA0CvB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared command parser for all bot adapters (Lark, Slack, etc.).
|
|
3
|
+
*
|
|
4
|
+
* Extracts a structured ParsedCommand from raw user text.
|
|
5
|
+
*/
|
|
6
|
+
export interface ParsedCommand {
|
|
7
|
+
type: 'DEVELOP' | 'CANCEL' | 'RETRY';
|
|
8
|
+
description?: string;
|
|
9
|
+
project?: string;
|
|
10
|
+
worker?: string;
|
|
11
|
+
reviewers?: string[];
|
|
12
|
+
taskId?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class CommandParser {
|
|
15
|
+
/**
|
|
16
|
+
* Parse raw text into a structured command.
|
|
17
|
+
* Returns null if the text is empty or the command is unrecognised.
|
|
18
|
+
*/
|
|
19
|
+
static parse(text: string): ParsedCommand | null;
|
|
20
|
+
private static parseDevelop;
|
|
21
|
+
private static parseCancelOrRetry;
|
|
22
|
+
private static extractTaskId;
|
|
23
|
+
/**
|
|
24
|
+
* Tokenize input text, respecting single and double-quoted strings.
|
|
25
|
+
* Quotes are stripped from the resulting tokens.
|
|
26
|
+
*/
|
|
27
|
+
private static tokenize;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=command-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parser.d.ts","sourceRoot":"","sources":["../../src/common/command-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,qBAAa,aAAa;IACxB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IA2BhD,OAAO,CAAC,MAAM,CAAC,YAAY;IA0D3B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC,OAAO,CAAC,MAAM,CAAC,aAAa;IAU5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;CAcxB"}
|