@pocketcoder/host 0.0.2
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/LICENSE +53 -0
- package/README.md +1106 -0
- package/dist/__tests__/daemon-startup.test.d.ts +2 -0
- package/dist/__tests__/daemon-startup.test.d.ts.map +1 -0
- package/dist/__tests__/daemon-startup.test.js +339 -0
- package/dist/__tests__/daemon-startup.test.js.map +1 -0
- package/dist/__tests__/env.test.d.ts +2 -0
- package/dist/__tests__/env.test.d.ts.map +1 -0
- package/dist/__tests__/env.test.js +44 -0
- package/dist/__tests__/env.test.js.map +1 -0
- package/dist/auth/__tests__/gateway-auth.test.d.ts +2 -0
- package/dist/auth/__tests__/gateway-auth.test.d.ts.map +1 -0
- package/dist/auth/__tests__/gateway-auth.test.js +208 -0
- package/dist/auth/__tests__/gateway-auth.test.js.map +1 -0
- package/dist/auth/__tests__/login-manager.test.d.ts +2 -0
- package/dist/auth/__tests__/login-manager.test.d.ts.map +1 -0
- package/dist/auth/__tests__/login-manager.test.js +160 -0
- package/dist/auth/__tests__/login-manager.test.js.map +1 -0
- package/dist/auth/__tests__/login.test.d.ts +2 -0
- package/dist/auth/__tests__/login.test.d.ts.map +1 -0
- package/dist/auth/__tests__/login.test.js +165 -0
- package/dist/auth/__tests__/login.test.js.map +1 -0
- package/dist/auth/__tests__/manual-flow.test.d.ts +2 -0
- package/dist/auth/__tests__/manual-flow.test.d.ts.map +1 -0
- package/dist/auth/__tests__/manual-flow.test.js +72 -0
- package/dist/auth/__tests__/manual-flow.test.js.map +1 -0
- package/dist/auth/__tests__/oauth-server.test.d.ts +2 -0
- package/dist/auth/__tests__/oauth-server.test.d.ts.map +1 -0
- package/dist/auth/__tests__/oauth-server.test.js +104 -0
- package/dist/auth/__tests__/oauth-server.test.js.map +1 -0
- package/dist/auth/__tests__/token-refresh.test.d.ts +2 -0
- package/dist/auth/__tests__/token-refresh.test.d.ts.map +1 -0
- package/dist/auth/__tests__/token-refresh.test.js +205 -0
- package/dist/auth/__tests__/token-refresh.test.js.map +1 -0
- package/dist/auth/__tests__/token-storage.test.d.ts +2 -0
- package/dist/auth/__tests__/token-storage.test.d.ts.map +1 -0
- package/dist/auth/__tests__/token-storage.test.js +145 -0
- package/dist/auth/__tests__/token-storage.test.js.map +1 -0
- package/dist/auth/gateway-auth.d.ts +38 -0
- package/dist/auth/gateway-auth.d.ts.map +1 -0
- package/dist/auth/gateway-auth.js +117 -0
- package/dist/auth/gateway-auth.js.map +1 -0
- package/dist/auth/login.d.ts +43 -0
- package/dist/auth/login.d.ts.map +1 -0
- package/dist/auth/login.js +180 -0
- package/dist/auth/login.js.map +1 -0
- package/dist/auth/manual-flow.d.ts +16 -0
- package/dist/auth/manual-flow.d.ts.map +1 -0
- package/dist/auth/manual-flow.js +44 -0
- package/dist/auth/manual-flow.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +22 -0
- package/dist/auth/oauth-server.d.ts.map +1 -0
- package/dist/auth/oauth-server.js +165 -0
- package/dist/auth/oauth-server.js.map +1 -0
- package/dist/auth/token-refresh.d.ts +36 -0
- package/dist/auth/token-refresh.d.ts.map +1 -0
- package/dist/auth/token-refresh.js +116 -0
- package/dist/auth/token-refresh.js.map +1 -0
- package/dist/auth/token-storage.d.ts +20 -0
- package/dist/auth/token-storage.d.ts.map +1 -0
- package/dist/auth/token-storage.js +71 -0
- package/dist/auth/token-storage.js.map +1 -0
- package/dist/auth/types.d.ts +12 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-auth.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-auth.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-auth.test.js +135 -0
- package/dist/cli/commands/__tests__/cli-auth.test.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-autostart.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-autostart.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-autostart.test.js +95 -0
- package/dist/cli/commands/__tests__/cli-autostart.test.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-daemon.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-daemon.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-daemon.test.js +144 -0
- package/dist/cli/commands/__tests__/cli-daemon.test.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-logs.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-logs.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-logs.test.js +85 -0
- package/dist/cli/commands/__tests__/cli-logs.test.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-machine.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-machine.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-machine.test.js +119 -0
- package/dist/cli/commands/__tests__/cli-machine.test.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-projects.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-projects.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-projects.test.js +246 -0
- package/dist/cli/commands/__tests__/cli-projects.test.js.map +1 -0
- package/dist/cli/commands/__tests__/cli-status.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/cli-status.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/cli-status.test.js +153 -0
- package/dist/cli/commands/__tests__/cli-status.test.js.map +1 -0
- package/dist/cli/commands/add.d.ts +7 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +37 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/autostart.d.ts +16 -0
- package/dist/cli/commands/autostart.d.ts.map +1 -0
- package/dist/cli/commands/autostart.js +47 -0
- package/dist/cli/commands/autostart.js.map +1 -0
- package/dist/cli/commands/login.d.ts +6 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +19 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +7 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +50 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +9 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +113 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/machine.d.ts +8 -0
- package/dist/cli/commands/machine.d.ts.map +1 -0
- package/dist/cli/commands/machine.js +78 -0
- package/dist/cli/commands/machine.js.map +1 -0
- package/dist/cli/commands/projects.d.ts +6 -0
- package/dist/cli/commands/projects.d.ts.map +1 -0
- package/dist/cli/commands/projects.js +28 -0
- package/dist/cli/commands/projects.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +7 -0
- package/dist/cli/commands/remove.d.ts.map +1 -0
- package/dist/cli/commands/remove.js +31 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/start.d.ts +14 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +67 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +6 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +68 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +6 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +39 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/notify-project-sync.d.ts +11 -0
- package/dist/cli/notify-project-sync.d.ts.map +1 -0
- package/dist/cli/notify-project-sync.js +45 -0
- package/dist/cli/notify-project-sync.js.map +1 -0
- package/dist/cli/notify-re-register.d.ts +7 -0
- package/dist/cli/notify-re-register.d.ts.map +1 -0
- package/dist/cli/notify-re-register.js +34 -0
- package/dist/cli/notify-re-register.js.map +1 -0
- package/dist/cli/program.d.ts +6 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +66 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/config/__tests__/index.test.d.ts +2 -0
- package/dist/config/__tests__/index.test.d.ts.map +1 -0
- package/dist/config/__tests__/index.test.js +146 -0
- package/dist/config/__tests__/index.test.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +77 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +26 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +54 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/control-plane/__tests__/server.test.d.ts +2 -0
- package/dist/control-plane/__tests__/server.test.d.ts.map +1 -0
- package/dist/control-plane/__tests__/server.test.js +64 -0
- package/dist/control-plane/__tests__/server.test.js.map +1 -0
- package/dist/control-plane/routes/__tests__/status.test.d.ts +2 -0
- package/dist/control-plane/routes/__tests__/status.test.d.ts.map +1 -0
- package/dist/control-plane/routes/__tests__/status.test.js +152 -0
- package/dist/control-plane/routes/__tests__/status.test.js.map +1 -0
- package/dist/control-plane/routes/__tests__/stop.test.d.ts +2 -0
- package/dist/control-plane/routes/__tests__/stop.test.d.ts.map +1 -0
- package/dist/control-plane/routes/__tests__/stop.test.js +92 -0
- package/dist/control-plane/routes/__tests__/stop.test.js.map +1 -0
- package/dist/control-plane/routes/health.d.ts +3 -0
- package/dist/control-plane/routes/health.d.ts.map +1 -0
- package/dist/control-plane/routes/health.js +14 -0
- package/dist/control-plane/routes/health.js.map +1 -0
- package/dist/control-plane/routes/machine-label.d.ts +8 -0
- package/dist/control-plane/routes/machine-label.d.ts.map +1 -0
- package/dist/control-plane/routes/machine-label.js +32 -0
- package/dist/control-plane/routes/machine-label.js.map +1 -0
- package/dist/control-plane/routes/project-sync.d.ts +12 -0
- package/dist/control-plane/routes/project-sync.d.ts.map +1 -0
- package/dist/control-plane/routes/project-sync.js +63 -0
- package/dist/control-plane/routes/project-sync.js.map +1 -0
- package/dist/control-plane/routes/re-register.d.ts +9 -0
- package/dist/control-plane/routes/re-register.d.ts.map +1 -0
- package/dist/control-plane/routes/re-register.js +56 -0
- package/dist/control-plane/routes/re-register.js.map +1 -0
- package/dist/control-plane/routes/status.d.ts +49 -0
- package/dist/control-plane/routes/status.d.ts.map +1 -0
- package/dist/control-plane/routes/status.js +55 -0
- package/dist/control-plane/routes/status.js.map +1 -0
- package/dist/control-plane/routes/stop.d.ts +7 -0
- package/dist/control-plane/routes/stop.d.ts.map +1 -0
- package/dist/control-plane/routes/stop.js +25 -0
- package/dist/control-plane/routes/stop.js.map +1 -0
- package/dist/control-plane/server.d.ts +10 -0
- package/dist/control-plane/server.d.ts.map +1 -0
- package/dist/control-plane/server.js +39 -0
- package/dist/control-plane/server.js.map +1 -0
- package/dist/daemon.d.ts +23 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +533 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db/__tests__/cleanup.test.d.ts +2 -0
- package/dist/db/__tests__/cleanup.test.d.ts.map +1 -0
- package/dist/db/__tests__/cleanup.test.js +153 -0
- package/dist/db/__tests__/cleanup.test.js.map +1 -0
- package/dist/db/__tests__/database.test.d.ts +2 -0
- package/dist/db/__tests__/database.test.d.ts.map +1 -0
- package/dist/db/__tests__/database.test.js +93 -0
- package/dist/db/__tests__/database.test.js.map +1 -0
- package/dist/db/__tests__/migrator.test.d.ts +2 -0
- package/dist/db/__tests__/migrator.test.d.ts.map +1 -0
- package/dist/db/__tests__/migrator.test.js +146 -0
- package/dist/db/__tests__/migrator.test.js.map +1 -0
- package/dist/db/cleanup.d.ts +20 -0
- package/dist/db/cleanup.d.ts.map +1 -0
- package/dist/db/cleanup.js +67 -0
- package/dist/db/cleanup.js.map +1 -0
- package/dist/db/database.d.ts +18 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +41 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/migrations.d.ts +7 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +32 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/migrator.d.ts +26 -0
- package/dist/db/migrator.d.ts.map +1 -0
- package/dist/db/migrator.js +105 -0
- package/dist/db/migrator.js.map +1 -0
- package/dist/db/repositories/__tests__/command-runs.test.d.ts +2 -0
- package/dist/db/repositories/__tests__/command-runs.test.d.ts.map +1 -0
- package/dist/db/repositories/__tests__/command-runs.test.js +90 -0
- package/dist/db/repositories/__tests__/command-runs.test.js.map +1 -0
- package/dist/db/repositories/__tests__/fs-state.test.d.ts +2 -0
- package/dist/db/repositories/__tests__/fs-state.test.d.ts.map +1 -0
- package/dist/db/repositories/__tests__/fs-state.test.js +77 -0
- package/dist/db/repositories/__tests__/fs-state.test.js.map +1 -0
- package/dist/db/repositories/__tests__/projects.test.d.ts +2 -0
- package/dist/db/repositories/__tests__/projects.test.d.ts.map +1 -0
- package/dist/db/repositories/__tests__/projects.test.js +84 -0
- package/dist/db/repositories/__tests__/projects.test.js.map +1 -0
- package/dist/db/repositories/__tests__/terminal-sessions.test.d.ts +2 -0
- package/dist/db/repositories/__tests__/terminal-sessions.test.d.ts.map +1 -0
- package/dist/db/repositories/__tests__/terminal-sessions.test.js +93 -0
- package/dist/db/repositories/__tests__/terminal-sessions.test.js.map +1 -0
- package/dist/db/repositories/command-runs.d.ts +28 -0
- package/dist/db/repositories/command-runs.d.ts.map +1 -0
- package/dist/db/repositories/command-runs.js +42 -0
- package/dist/db/repositories/command-runs.js.map +1 -0
- package/dist/db/repositories/fs-state.d.ts +28 -0
- package/dist/db/repositories/fs-state.d.ts.map +1 -0
- package/dist/db/repositories/fs-state.js +48 -0
- package/dist/db/repositories/fs-state.js.map +1 -0
- package/dist/db/repositories/projects.d.ts +33 -0
- package/dist/db/repositories/projects.d.ts.map +1 -0
- package/dist/db/repositories/projects.js +50 -0
- package/dist/db/repositories/projects.js.map +1 -0
- package/dist/db/repositories/terminal-sessions.d.ts +28 -0
- package/dist/db/repositories/terminal-sessions.d.ts.map +1 -0
- package/dist/db/repositories/terminal-sessions.js +47 -0
- package/dist/db/repositories/terminal-sessions.js.map +1 -0
- package/dist/db/schema.d.ts +6 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +49 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/env.d.ts +15 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +23 -0
- package/dist/env.js.map +1 -0
- package/dist/errors/__tests__/index.test.d.ts +2 -0
- package/dist/errors/__tests__/index.test.d.ts.map +1 -0
- package/dist/errors/__tests__/index.test.js +105 -0
- package/dist/errors/__tests__/index.test.js.map +1 -0
- package/dist/errors/index.d.ts +36 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +54 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/gateway/__tests__/message-router.test.d.ts +2 -0
- package/dist/gateway/__tests__/message-router.test.d.ts.map +1 -0
- package/dist/gateway/__tests__/message-router.test.js +225 -0
- package/dist/gateway/__tests__/message-router.test.js.map +1 -0
- package/dist/gateway/__tests__/reconnection.test.d.ts +2 -0
- package/dist/gateway/__tests__/reconnection.test.d.ts.map +1 -0
- package/dist/gateway/__tests__/reconnection.test.js +244 -0
- package/dist/gateway/__tests__/reconnection.test.js.map +1 -0
- package/dist/gateway/__tests__/websocket-client.test.d.ts +2 -0
- package/dist/gateway/__tests__/websocket-client.test.d.ts.map +1 -0
- package/dist/gateway/__tests__/websocket-client.test.js +249 -0
- package/dist/gateway/__tests__/websocket-client.test.js.map +1 -0
- package/dist/gateway/gateway-request.d.ts +17 -0
- package/dist/gateway/gateway-request.d.ts.map +1 -0
- package/dist/gateway/gateway-request.js +39 -0
- package/dist/gateway/gateway-request.js.map +1 -0
- package/dist/gateway/message-router.d.ts +31 -0
- package/dist/gateway/message-router.d.ts.map +1 -0
- package/dist/gateway/message-router.js +91 -0
- package/dist/gateway/message-router.js.map +1 -0
- package/dist/gateway/messages/__tests__/daemon-register.test.d.ts +2 -0
- package/dist/gateway/messages/__tests__/daemon-register.test.d.ts.map +1 -0
- package/dist/gateway/messages/__tests__/daemon-register.test.js +113 -0
- package/dist/gateway/messages/__tests__/daemon-register.test.js.map +1 -0
- package/dist/gateway/messages/__tests__/project-sync.test.d.ts +2 -0
- package/dist/gateway/messages/__tests__/project-sync.test.d.ts.map +1 -0
- package/dist/gateway/messages/__tests__/project-sync.test.js +92 -0
- package/dist/gateway/messages/__tests__/project-sync.test.js.map +1 -0
- package/dist/gateway/messages/daemon-register.d.ts +13 -0
- package/dist/gateway/messages/daemon-register.d.ts.map +1 -0
- package/dist/gateway/messages/daemon-register.js +39 -0
- package/dist/gateway/messages/daemon-register.js.map +1 -0
- package/dist/gateway/messages/project-sync.d.ts +16 -0
- package/dist/gateway/messages/project-sync.d.ts.map +1 -0
- package/dist/gateway/messages/project-sync.js +42 -0
- package/dist/gateway/messages/project-sync.js.map +1 -0
- package/dist/gateway/types.d.ts +41 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +5 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/gateway/websocket-client.d.ts +55 -0
- package/dist/gateway/websocket-client.d.ts.map +1 -0
- package/dist/gateway/websocket-client.js +185 -0
- package/dist/gateway/websocket-client.js.map +1 -0
- package/dist/handlers/__tests__/agent-cancel.test.d.ts +2 -0
- package/dist/handlers/__tests__/agent-cancel.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/agent-cancel.test.js +152 -0
- package/dist/handlers/__tests__/agent-cancel.test.js.map +1 -0
- package/dist/handlers/__tests__/agent-message.test.d.ts +2 -0
- package/dist/handlers/__tests__/agent-message.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/agent-message.test.js +270 -0
- package/dist/handlers/__tests__/agent-message.test.js.map +1 -0
- package/dist/handlers/__tests__/agent-session-new.test.d.ts +2 -0
- package/dist/handlers/__tests__/agent-session-new.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/agent-session-new.test.js +185 -0
- package/dist/handlers/__tests__/agent-session-new.test.js.map +1 -0
- package/dist/handlers/__tests__/agent-sessions-list.test.d.ts +2 -0
- package/dist/handlers/__tests__/agent-sessions-list.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/agent-sessions-list.test.js +171 -0
- package/dist/handlers/__tests__/agent-sessions-list.test.js.map +1 -0
- package/dist/handlers/__tests__/command-cancel.test.d.ts +2 -0
- package/dist/handlers/__tests__/command-cancel.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/command-cancel.test.js +121 -0
- package/dist/handlers/__tests__/command-cancel.test.js.map +1 -0
- package/dist/handlers/__tests__/command-exec.test.d.ts +2 -0
- package/dist/handlers/__tests__/command-exec.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/command-exec.test.js +155 -0
- package/dist/handlers/__tests__/command-exec.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-create.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-create.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-create.test.js +147 -0
- package/dist/handlers/__tests__/fs-create.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-delete.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-delete.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-delete.test.js +153 -0
- package/dist/handlers/__tests__/fs-delete.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-list.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-list.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-list.test.js +203 -0
- package/dist/handlers/__tests__/fs-list.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-read.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-read.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-read.test.js +178 -0
- package/dist/handlers/__tests__/fs-read.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-replace.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-replace.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-replace.test.js +201 -0
- package/dist/handlers/__tests__/fs-replace.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-search.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-search.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-search.test.js +195 -0
- package/dist/handlers/__tests__/fs-search.test.js.map +1 -0
- package/dist/handlers/__tests__/fs-write.test.d.ts +2 -0
- package/dist/handlers/__tests__/fs-write.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fs-write.test.js +173 -0
- package/dist/handlers/__tests__/fs-write.test.js.map +1 -0
- package/dist/handlers/__tests__/git-branch-create.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-branch-create.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-branch-create.test.js +158 -0
- package/dist/handlers/__tests__/git-branch-create.test.js.map +1 -0
- package/dist/handlers/__tests__/git-branches.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-branches.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-branches.test.js +184 -0
- package/dist/handlers/__tests__/git-branches.test.js.map +1 -0
- package/dist/handlers/__tests__/git-checkout.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-checkout.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-checkout.test.js +126 -0
- package/dist/handlers/__tests__/git-checkout.test.js.map +1 -0
- package/dist/handlers/__tests__/git-commit.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-commit.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-commit.test.js +131 -0
- package/dist/handlers/__tests__/git-commit.test.js.map +1 -0
- package/dist/handlers/__tests__/git-diff.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-diff.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-diff.test.js +185 -0
- package/dist/handlers/__tests__/git-diff.test.js.map +1 -0
- package/dist/handlers/__tests__/git-discard.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-discard.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-discard.test.js +154 -0
- package/dist/handlers/__tests__/git-discard.test.js.map +1 -0
- package/dist/handlers/__tests__/git-file-base.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-file-base.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-file-base.test.js +148 -0
- package/dist/handlers/__tests__/git-file-base.test.js.map +1 -0
- package/dist/handlers/__tests__/git-pull.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-pull.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-pull.test.js +180 -0
- package/dist/handlers/__tests__/git-pull.test.js.map +1 -0
- package/dist/handlers/__tests__/git-push.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-push.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-push.test.js +177 -0
- package/dist/handlers/__tests__/git-push.test.js.map +1 -0
- package/dist/handlers/__tests__/git-stage.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-stage.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-stage.test.js +165 -0
- package/dist/handlers/__tests__/git-stage.test.js.map +1 -0
- package/dist/handlers/__tests__/git-status.test.d.ts +2 -0
- package/dist/handlers/__tests__/git-status.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/git-status.test.js +182 -0
- package/dist/handlers/__tests__/git-status.test.js.map +1 -0
- package/dist/handlers/__tests__/machines-list.test.d.ts +2 -0
- package/dist/handlers/__tests__/machines-list.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/machines-list.test.js +164 -0
- package/dist/handlers/__tests__/machines-list.test.js.map +1 -0
- package/dist/handlers/__tests__/project-create.test.d.ts +2 -0
- package/dist/handlers/__tests__/project-create.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/project-create.test.js +166 -0
- package/dist/handlers/__tests__/project-create.test.js.map +1 -0
- package/dist/handlers/__tests__/project-delete.test.d.ts +2 -0
- package/dist/handlers/__tests__/project-delete.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/project-delete.test.js +150 -0
- package/dist/handlers/__tests__/project-delete.test.js.map +1 -0
- package/dist/handlers/__tests__/projects-list.test.d.ts +2 -0
- package/dist/handlers/__tests__/projects-list.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/projects-list.test.js +145 -0
- package/dist/handlers/__tests__/projects-list.test.js.map +1 -0
- package/dist/handlers/__tests__/terminal-create.test.d.ts +2 -0
- package/dist/handlers/__tests__/terminal-create.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/terminal-create.test.js +156 -0
- package/dist/handlers/__tests__/terminal-create.test.js.map +1 -0
- package/dist/handlers/__tests__/terminal-kill.test.d.ts +2 -0
- package/dist/handlers/__tests__/terminal-kill.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/terminal-kill.test.js +125 -0
- package/dist/handlers/__tests__/terminal-kill.test.js.map +1 -0
- package/dist/handlers/__tests__/terminal-resize.test.d.ts +2 -0
- package/dist/handlers/__tests__/terminal-resize.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/terminal-resize.test.js +128 -0
- package/dist/handlers/__tests__/terminal-resize.test.js.map +1 -0
- package/dist/handlers/__tests__/terminal-stdin.test.d.ts +2 -0
- package/dist/handlers/__tests__/terminal-stdin.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/terminal-stdin.test.js +128 -0
- package/dist/handlers/__tests__/terminal-stdin.test.js.map +1 -0
- package/dist/handlers/agent-cancel.d.ts +11 -0
- package/dist/handlers/agent-cancel.d.ts.map +1 -0
- package/dist/handlers/agent-cancel.js +67 -0
- package/dist/handlers/agent-cancel.js.map +1 -0
- package/dist/handlers/agent-message.d.ts +13 -0
- package/dist/handlers/agent-message.d.ts.map +1 -0
- package/dist/handlers/agent-message.js +119 -0
- package/dist/handlers/agent-message.js.map +1 -0
- package/dist/handlers/agent-prompt-response.d.ts +13 -0
- package/dist/handlers/agent-prompt-response.d.ts.map +1 -0
- package/dist/handlers/agent-prompt-response.js +26 -0
- package/dist/handlers/agent-prompt-response.js.map +1 -0
- package/dist/handlers/agent-session-new.d.ts +13 -0
- package/dist/handlers/agent-session-new.d.ts.map +1 -0
- package/dist/handlers/agent-session-new.js +106 -0
- package/dist/handlers/agent-session-new.js.map +1 -0
- package/dist/handlers/agent-sessions-list.d.ts +10 -0
- package/dist/handlers/agent-sessions-list.d.ts.map +1 -0
- package/dist/handlers/agent-sessions-list.js +78 -0
- package/dist/handlers/agent-sessions-list.js.map +1 -0
- package/dist/handlers/command-cancel.d.ts +9 -0
- package/dist/handlers/command-cancel.d.ts.map +1 -0
- package/dist/handlers/command-cancel.js +32 -0
- package/dist/handlers/command-cancel.js.map +1 -0
- package/dist/handlers/command-exec.d.ts +9 -0
- package/dist/handlers/command-exec.d.ts.map +1 -0
- package/dist/handlers/command-exec.js +74 -0
- package/dist/handlers/command-exec.js.map +1 -0
- package/dist/handlers/fs/__tests__/limits.test.d.ts +2 -0
- package/dist/handlers/fs/__tests__/limits.test.d.ts.map +1 -0
- package/dist/handlers/fs/__tests__/limits.test.js +154 -0
- package/dist/handlers/fs/__tests__/limits.test.js.map +1 -0
- package/dist/handlers/fs/limits.d.ts +41 -0
- package/dist/handlers/fs/limits.d.ts.map +1 -0
- package/dist/handlers/fs/limits.js +68 -0
- package/dist/handlers/fs/limits.js.map +1 -0
- package/dist/handlers/fs-create.d.ts +8 -0
- package/dist/handlers/fs-create.d.ts.map +1 -0
- package/dist/handlers/fs-create.js +98 -0
- package/dist/handlers/fs-create.js.map +1 -0
- package/dist/handlers/fs-delete.d.ts +8 -0
- package/dist/handlers/fs-delete.d.ts.map +1 -0
- package/dist/handlers/fs-delete.js +95 -0
- package/dist/handlers/fs-delete.js.map +1 -0
- package/dist/handlers/fs-list.d.ts +7 -0
- package/dist/handlers/fs-list.d.ts.map +1 -0
- package/dist/handlers/fs-list.js +70 -0
- package/dist/handlers/fs-list.js.map +1 -0
- package/dist/handlers/fs-read.d.ts +7 -0
- package/dist/handlers/fs-read.d.ts.map +1 -0
- package/dist/handlers/fs-read.js +98 -0
- package/dist/handlers/fs-read.js.map +1 -0
- package/dist/handlers/fs-replace.d.ts +8 -0
- package/dist/handlers/fs-replace.d.ts.map +1 -0
- package/dist/handlers/fs-replace.js +178 -0
- package/dist/handlers/fs-replace.js.map +1 -0
- package/dist/handlers/fs-search.d.ts +10 -0
- package/dist/handlers/fs-search.d.ts.map +1 -0
- package/dist/handlers/fs-search.js +302 -0
- package/dist/handlers/fs-search.js.map +1 -0
- package/dist/handlers/fs-write.d.ts +7 -0
- package/dist/handlers/fs-write.d.ts.map +1 -0
- package/dist/handlers/fs-write.js +74 -0
- package/dist/handlers/fs-write.js.map +1 -0
- package/dist/handlers/git/__tests__/credentials.test.d.ts +2 -0
- package/dist/handlers/git/__tests__/credentials.test.d.ts.map +1 -0
- package/dist/handlers/git/__tests__/credentials.test.js +145 -0
- package/dist/handlers/git/__tests__/credentials.test.js.map +1 -0
- package/dist/handlers/git/__tests__/error-parser.test.d.ts +2 -0
- package/dist/handlers/git/__tests__/error-parser.test.d.ts.map +1 -0
- package/dist/handlers/git/__tests__/error-parser.test.js +85 -0
- package/dist/handlers/git/__tests__/error-parser.test.js.map +1 -0
- package/dist/handlers/git/credentials.d.ts +55 -0
- package/dist/handlers/git/credentials.d.ts.map +1 -0
- package/dist/handlers/git/credentials.js +93 -0
- package/dist/handlers/git/credentials.js.map +1 -0
- package/dist/handlers/git/error-parser.d.ts +27 -0
- package/dist/handlers/git/error-parser.d.ts.map +1 -0
- package/dist/handlers/git/error-parser.js +98 -0
- package/dist/handlers/git/error-parser.js.map +1 -0
- package/dist/handlers/git-branch-create.d.ts +7 -0
- package/dist/handlers/git-branch-create.d.ts.map +1 -0
- package/dist/handlers/git-branch-create.js +60 -0
- package/dist/handlers/git-branch-create.js.map +1 -0
- package/dist/handlers/git-branches.d.ts +7 -0
- package/dist/handlers/git-branches.d.ts.map +1 -0
- package/dist/handlers/git-branches.js +60 -0
- package/dist/handlers/git-branches.js.map +1 -0
- package/dist/handlers/git-checkout.d.ts +7 -0
- package/dist/handlers/git-checkout.d.ts.map +1 -0
- package/dist/handlers/git-checkout.js +59 -0
- package/dist/handlers/git-checkout.js.map +1 -0
- package/dist/handlers/git-commit.d.ts +7 -0
- package/dist/handlers/git-commit.d.ts.map +1 -0
- package/dist/handlers/git-commit.js +59 -0
- package/dist/handlers/git-commit.js.map +1 -0
- package/dist/handlers/git-diff.d.ts +7 -0
- package/dist/handlers/git-diff.d.ts.map +1 -0
- package/dist/handlers/git-diff.js +56 -0
- package/dist/handlers/git-diff.js.map +1 -0
- package/dist/handlers/git-discard.d.ts +7 -0
- package/dist/handlers/git-discard.d.ts.map +1 -0
- package/dist/handlers/git-discard.js +56 -0
- package/dist/handlers/git-discard.js.map +1 -0
- package/dist/handlers/git-file-base.d.ts +7 -0
- package/dist/handlers/git-file-base.d.ts.map +1 -0
- package/dist/handlers/git-file-base.js +61 -0
- package/dist/handlers/git-file-base.js.map +1 -0
- package/dist/handlers/git-pull.d.ts +8 -0
- package/dist/handlers/git-pull.d.ts.map +1 -0
- package/dist/handlers/git-pull.js +69 -0
- package/dist/handlers/git-pull.js.map +1 -0
- package/dist/handlers/git-push.d.ts +7 -0
- package/dist/handlers/git-push.d.ts.map +1 -0
- package/dist/handlers/git-push.js +67 -0
- package/dist/handlers/git-push.js.map +1 -0
- package/dist/handlers/git-stage.d.ts +7 -0
- package/dist/handlers/git-stage.d.ts.map +1 -0
- package/dist/handlers/git-stage.js +56 -0
- package/dist/handlers/git-stage.js.map +1 -0
- package/dist/handlers/git-status.d.ts +7 -0
- package/dist/handlers/git-status.d.ts.map +1 -0
- package/dist/handlers/git-status.js +63 -0
- package/dist/handlers/git-status.js.map +1 -0
- package/dist/handlers/git-unstage.d.ts +7 -0
- package/dist/handlers/git-unstage.d.ts.map +1 -0
- package/dist/handlers/git-unstage.js +56 -0
- package/dist/handlers/git-unstage.js.map +1 -0
- package/dist/handlers/machines-list.d.ts +14 -0
- package/dist/handlers/machines-list.d.ts.map +1 -0
- package/dist/handlers/machines-list.js +53 -0
- package/dist/handlers/machines-list.js.map +1 -0
- package/dist/handlers/project-create.d.ts +18 -0
- package/dist/handlers/project-create.d.ts.map +1 -0
- package/dist/handlers/project-create.js +100 -0
- package/dist/handlers/project-create.js.map +1 -0
- package/dist/handlers/project-delete.d.ts +19 -0
- package/dist/handlers/project-delete.d.ts.map +1 -0
- package/dist/handlers/project-delete.js +89 -0
- package/dist/handlers/project-delete.js.map +1 -0
- package/dist/handlers/projects-list.d.ts +7 -0
- package/dist/handlers/projects-list.d.ts.map +1 -0
- package/dist/handlers/projects-list.js +42 -0
- package/dist/handlers/projects-list.js.map +1 -0
- package/dist/handlers/terminal-create.d.ts +8 -0
- package/dist/handlers/terminal-create.d.ts.map +1 -0
- package/dist/handlers/terminal-create.js +50 -0
- package/dist/handlers/terminal-create.js.map +1 -0
- package/dist/handlers/terminal-kill.d.ts +10 -0
- package/dist/handlers/terminal-kill.d.ts.map +1 -0
- package/dist/handlers/terminal-kill.js +32 -0
- package/dist/handlers/terminal-kill.js.map +1 -0
- package/dist/handlers/terminal-resize.d.ts +8 -0
- package/dist/handlers/terminal-resize.d.ts.map +1 -0
- package/dist/handlers/terminal-resize.js +29 -0
- package/dist/handlers/terminal-resize.js.map +1 -0
- package/dist/handlers/terminal-stdin.d.ts +8 -0
- package/dist/handlers/terminal-stdin.d.ts.map +1 -0
- package/dist/handlers/terminal-stdin.js +29 -0
- package/dist/handlers/terminal-stdin.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/opencode/__tests__/check-installed.test.d.ts +2 -0
- package/dist/opencode/__tests__/check-installed.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/check-installed.test.js +68 -0
- package/dist/opencode/__tests__/check-installed.test.js.map +1 -0
- package/dist/opencode/__tests__/detect.test.d.ts +2 -0
- package/dist/opencode/__tests__/detect.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/detect.test.js +147 -0
- package/dist/opencode/__tests__/detect.test.js.map +1 -0
- package/dist/opencode/__tests__/health-check.test.d.ts +2 -0
- package/dist/opencode/__tests__/health-check.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/health-check.test.js +143 -0
- package/dist/opencode/__tests__/health-check.test.js.map +1 -0
- package/dist/opencode/__tests__/permission-reply.test.d.ts +2 -0
- package/dist/opencode/__tests__/permission-reply.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/permission-reply.test.js +140 -0
- package/dist/opencode/__tests__/permission-reply.test.js.map +1 -0
- package/dist/opencode/__tests__/proxy.test.d.ts +2 -0
- package/dist/opencode/__tests__/proxy.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/proxy.test.js +179 -0
- package/dist/opencode/__tests__/proxy.test.js.map +1 -0
- package/dist/opencode/__tests__/session-filter.test.d.ts +2 -0
- package/dist/opencode/__tests__/session-filter.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/session-filter.test.js +117 -0
- package/dist/opencode/__tests__/session-filter.test.js.map +1 -0
- package/dist/opencode/__tests__/spawn.test.d.ts +2 -0
- package/dist/opencode/__tests__/spawn.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/spawn.test.js +167 -0
- package/dist/opencode/__tests__/spawn.test.js.map +1 -0
- package/dist/opencode/__tests__/sse.test.d.ts +2 -0
- package/dist/opencode/__tests__/sse.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/sse.test.js +245 -0
- package/dist/opencode/__tests__/sse.test.js.map +1 -0
- package/dist/opencode/__tests__/supervisor.test.d.ts +2 -0
- package/dist/opencode/__tests__/supervisor.test.d.ts.map +1 -0
- package/dist/opencode/__tests__/supervisor.test.js +206 -0
- package/dist/opencode/__tests__/supervisor.test.js.map +1 -0
- package/dist/opencode/check-installed.d.ts +12 -0
- package/dist/opencode/check-installed.d.ts.map +1 -0
- package/dist/opencode/check-installed.js +25 -0
- package/dist/opencode/check-installed.js.map +1 -0
- package/dist/opencode/detect.d.ts +16 -0
- package/dist/opencode/detect.d.ts.map +1 -0
- package/dist/opencode/detect.js +102 -0
- package/dist/opencode/detect.js.map +1 -0
- package/dist/opencode/health-check.d.ts +31 -0
- package/dist/opencode/health-check.d.ts.map +1 -0
- package/dist/opencode/health-check.js +97 -0
- package/dist/opencode/health-check.js.map +1 -0
- package/dist/opencode/permission-reply.d.ts +14 -0
- package/dist/opencode/permission-reply.d.ts.map +1 -0
- package/dist/opencode/permission-reply.js +70 -0
- package/dist/opencode/permission-reply.js.map +1 -0
- package/dist/opencode/proxy.d.ts +45 -0
- package/dist/opencode/proxy.d.ts.map +1 -0
- package/dist/opencode/proxy.js +99 -0
- package/dist/opencode/proxy.js.map +1 -0
- package/dist/opencode/session-filter.d.ts +26 -0
- package/dist/opencode/session-filter.d.ts.map +1 -0
- package/dist/opencode/session-filter.js +20 -0
- package/dist/opencode/session-filter.js.map +1 -0
- package/dist/opencode/spawn.d.ts +24 -0
- package/dist/opencode/spawn.d.ts.map +1 -0
- package/dist/opencode/spawn.js +143 -0
- package/dist/opencode/spawn.js.map +1 -0
- package/dist/opencode/sse.d.ts +42 -0
- package/dist/opencode/sse.d.ts.map +1 -0
- package/dist/opencode/sse.js +250 -0
- package/dist/opencode/sse.js.map +1 -0
- package/dist/opencode/supervisor.d.ts +43 -0
- package/dist/opencode/supervisor.d.ts.map +1 -0
- package/dist/opencode/supervisor.js +153 -0
- package/dist/opencode/supervisor.js.map +1 -0
- package/dist/services/__tests__/autostart.test.d.ts +2 -0
- package/dist/services/__tests__/autostart.test.d.ts.map +1 -0
- package/dist/services/__tests__/autostart.test.js +176 -0
- package/dist/services/__tests__/autostart.test.js.map +1 -0
- package/dist/services/__tests__/file-watcher.test.d.ts +2 -0
- package/dist/services/__tests__/file-watcher.test.d.ts.map +1 -0
- package/dist/services/__tests__/file-watcher.test.js +265 -0
- package/dist/services/__tests__/file-watcher.test.js.map +1 -0
- package/dist/services/__tests__/git-pty.test.d.ts +2 -0
- package/dist/services/__tests__/git-pty.test.d.ts.map +1 -0
- package/dist/services/__tests__/git-pty.test.js +137 -0
- package/dist/services/__tests__/git-pty.test.js.map +1 -0
- package/dist/services/__tests__/message-queue.test.d.ts +2 -0
- package/dist/services/__tests__/message-queue.test.d.ts.map +1 -0
- package/dist/services/__tests__/message-queue.test.js +203 -0
- package/dist/services/__tests__/message-queue.test.js.map +1 -0
- package/dist/services/__tests__/queue-overflow.test.d.ts +2 -0
- package/dist/services/__tests__/queue-overflow.test.d.ts.map +1 -0
- package/dist/services/__tests__/queue-overflow.test.js +115 -0
- package/dist/services/__tests__/queue-overflow.test.js.map +1 -0
- package/dist/services/__tests__/shutdown.test.d.ts +2 -0
- package/dist/services/__tests__/shutdown.test.d.ts.map +1 -0
- package/dist/services/__tests__/shutdown.test.js +181 -0
- package/dist/services/__tests__/shutdown.test.js.map +1 -0
- package/dist/services/__tests__/terminal-exit.test.d.ts +2 -0
- package/dist/services/__tests__/terminal-exit.test.d.ts.map +1 -0
- package/dist/services/__tests__/terminal-exit.test.js +150 -0
- package/dist/services/__tests__/terminal-exit.test.js.map +1 -0
- package/dist/services/__tests__/terminal-stdout.test.d.ts +2 -0
- package/dist/services/__tests__/terminal-stdout.test.d.ts.map +1 -0
- package/dist/services/__tests__/terminal-stdout.test.js +160 -0
- package/dist/services/__tests__/terminal-stdout.test.js.map +1 -0
- package/dist/services/autostart.d.ts +42 -0
- package/dist/services/autostart.d.ts.map +1 -0
- package/dist/services/autostart.js +198 -0
- package/dist/services/autostart.js.map +1 -0
- package/dist/services/capabilities.d.ts +18 -0
- package/dist/services/capabilities.d.ts.map +1 -0
- package/dist/services/capabilities.js +38 -0
- package/dist/services/capabilities.js.map +1 -0
- package/dist/services/command-runner.d.ts +46 -0
- package/dist/services/command-runner.d.ts.map +1 -0
- package/dist/services/command-runner.js +151 -0
- package/dist/services/command-runner.js.map +1 -0
- package/dist/services/file-watcher.d.ts +35 -0
- package/dist/services/file-watcher.d.ts.map +1 -0
- package/dist/services/file-watcher.js +133 -0
- package/dist/services/file-watcher.js.map +1 -0
- package/dist/services/filesystem.d.ts +68 -0
- package/dist/services/filesystem.d.ts.map +1 -0
- package/dist/services/filesystem.js +249 -0
- package/dist/services/filesystem.js.map +1 -0
- package/dist/services/git.d.ts +149 -0
- package/dist/services/git.d.ts.map +1 -0
- package/dist/services/git.js +589 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/message-queue.d.ts +58 -0
- package/dist/services/message-queue.d.ts.map +1 -0
- package/dist/services/message-queue.js +118 -0
- package/dist/services/message-queue.js.map +1 -0
- package/dist/services/shutdown.d.ts +40 -0
- package/dist/services/shutdown.d.ts.map +1 -0
- package/dist/services/shutdown.js +144 -0
- package/dist/services/shutdown.js.map +1 -0
- package/dist/services/terminal-manager.d.ts +43 -0
- package/dist/services/terminal-manager.d.ts.map +1 -0
- package/dist/services/terminal-manager.js +118 -0
- package/dist/services/terminal-manager.js.map +1 -0
- package/dist/utils/__tests__/config.test.d.ts +2 -0
- package/dist/utils/__tests__/config.test.d.ts.map +1 -0
- package/dist/utils/__tests__/config.test.js +67 -0
- package/dist/utils/__tests__/config.test.js.map +1 -0
- package/dist/utils/__tests__/diff.test.d.ts +2 -0
- package/dist/utils/__tests__/diff.test.d.ts.map +1 -0
- package/dist/utils/__tests__/diff.test.js +40 -0
- package/dist/utils/__tests__/diff.test.js.map +1 -0
- package/dist/utils/__tests__/filename-validation.test.d.ts +2 -0
- package/dist/utils/__tests__/filename-validation.test.d.ts.map +1 -0
- package/dist/utils/__tests__/filename-validation.test.js +114 -0
- package/dist/utils/__tests__/filename-validation.test.js.map +1 -0
- package/dist/utils/__tests__/logger.test.d.ts +2 -0
- package/dist/utils/__tests__/logger.test.d.ts.map +1 -0
- package/dist/utils/__tests__/logger.test.js +254 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/__tests__/machine-key.test.d.ts +2 -0
- package/dist/utils/__tests__/machine-key.test.d.ts.map +1 -0
- package/dist/utils/__tests__/machine-key.test.js +123 -0
- package/dist/utils/__tests__/machine-key.test.js.map +1 -0
- package/dist/utils/__tests__/path-sandbox.test.d.ts +2 -0
- package/dist/utils/__tests__/path-sandbox.test.d.ts.map +1 -0
- package/dist/utils/__tests__/path-sandbox.test.js +97 -0
- package/dist/utils/__tests__/path-sandbox.test.js.map +1 -0
- package/dist/utils/__tests__/paths.test.d.ts +2 -0
- package/dist/utils/__tests__/paths.test.d.ts.map +1 -0
- package/dist/utils/__tests__/paths.test.js +87 -0
- package/dist/utils/__tests__/paths.test.js.map +1 -0
- package/dist/utils/__tests__/pid.test.d.ts +2 -0
- package/dist/utils/__tests__/pid.test.d.ts.map +1 -0
- package/dist/utils/__tests__/pid.test.js +79 -0
- package/dist/utils/__tests__/pid.test.js.map +1 -0
- package/dist/utils/__tests__/validate-project-path.test.d.ts +2 -0
- package/dist/utils/__tests__/validate-project-path.test.d.ts.map +1 -0
- package/dist/utils/__tests__/validate-project-path.test.js +178 -0
- package/dist/utils/__tests__/validate-project-path.test.js.map +1 -0
- package/dist/utils/config.d.ts +8 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +16 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/diff.d.ts +11 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +24 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/filename-validation.d.ts +10 -0
- package/dist/utils/filename-validation.d.ts.map +1 -0
- package/dist/utils/filename-validation.js +55 -0
- package/dist/utils/filename-validation.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +104 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/machine-info.d.ts +6 -0
- package/dist/utils/machine-info.d.ts.map +1 -0
- package/dist/utils/machine-info.js +38 -0
- package/dist/utils/machine-info.js.map +1 -0
- package/dist/utils/machine-key.d.ts +20 -0
- package/dist/utils/machine-key.d.ts.map +1 -0
- package/dist/utils/machine-key.js +66 -0
- package/dist/utils/machine-key.js.map +1 -0
- package/dist/utils/path-sandbox.d.ts +24 -0
- package/dist/utils/path-sandbox.d.ts.map +1 -0
- package/dist/utils/path-sandbox.js +69 -0
- package/dist/utils/path-sandbox.js.map +1 -0
- package/dist/utils/paths.d.ts +19 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +52 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/pid.d.ts +23 -0
- package/dist/utils/pid.d.ts.map +1 -0
- package/dist/utils/pid.js +57 -0
- package/dist/utils/pid.js.map +1 -0
- package/dist/utils/validate-project-path.d.ts +17 -0
- package/dist/utils/validate-project-path.d.ts.map +1 -0
- package/dist/utils/validate-project-path.js +109 -0
- package/dist/utils/validate-project-path.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { exec } from "node:child_process";
|
|
3
|
+
import { platform } from "node:os";
|
|
4
|
+
import { startOAuthServer } from "./oauth-server.js";
|
|
5
|
+
import { manualCodeEntry } from "./manual-flow.js";
|
|
6
|
+
import { loadTokens, saveTokens } from "./token-storage.js";
|
|
7
|
+
import { exchangeCodeViaGateway } from "./gateway-auth.js";
|
|
8
|
+
import { logger } from "../utils/logger.js";
|
|
9
|
+
/**
|
|
10
|
+
* Decode a JWT token to extract the payload (without verification).
|
|
11
|
+
* Used for implicit flow to extract user info from access_token.
|
|
12
|
+
*/
|
|
13
|
+
function decodeJwtPayload(token) {
|
|
14
|
+
const parts = token.split(".");
|
|
15
|
+
if (parts.length !== 3) {
|
|
16
|
+
throw new Error("Invalid JWT format");
|
|
17
|
+
}
|
|
18
|
+
const payload = Buffer.from(parts[1], "base64url").toString("utf-8");
|
|
19
|
+
return JSON.parse(payload);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Injectable code exchange function. Defaults to exchangeCodeViaGateway().
|
|
23
|
+
*/
|
|
24
|
+
let _exchangeCodeFn = exchangeCodeViaGateway;
|
|
25
|
+
/**
|
|
26
|
+
* Injectable OAuth URL provider function.
|
|
27
|
+
* The OAuth URL is the Supabase project's auth endpoint. Since the daemon
|
|
28
|
+
* doesn't have Supabase keys, this URL must be configured or provided.
|
|
29
|
+
*/
|
|
30
|
+
let _getOAuthUrlFn = () => {
|
|
31
|
+
throw new Error("OAuth URL provider not configured. Call setGetOAuthUrlFn() first.");
|
|
32
|
+
};
|
|
33
|
+
/** Set the code exchange implementation (called during daemon startup). */
|
|
34
|
+
export function setExchangeCodeFn(fn) {
|
|
35
|
+
_exchangeCodeFn = fn;
|
|
36
|
+
}
|
|
37
|
+
/** Set the OAuth URL provider implementation (called during daemon startup). */
|
|
38
|
+
export function setGetOAuthUrlFn(fn) {
|
|
39
|
+
_getOAuthUrlFn = fn;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Open a URL in the user's default browser.
|
|
43
|
+
* Falls back to logging the URL if opening fails.
|
|
44
|
+
*/
|
|
45
|
+
function openBrowser(url) {
|
|
46
|
+
const os = platform();
|
|
47
|
+
let command;
|
|
48
|
+
if (os === "darwin") {
|
|
49
|
+
command = `open "${url}"`;
|
|
50
|
+
}
|
|
51
|
+
else if (os === "win32") {
|
|
52
|
+
command = `start "" "${url}"`;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
command = `xdg-open "${url}"`;
|
|
56
|
+
}
|
|
57
|
+
exec(command, (err) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
// Browser open failed - user will need to manually navigate
|
|
60
|
+
// The URL is already logged by the login function
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Injectable browser opener for testing
|
|
65
|
+
let _openBrowser = openBrowser;
|
|
66
|
+
/**
|
|
67
|
+
* Override the browser opener function (for testing).
|
|
68
|
+
*/
|
|
69
|
+
export function setOpenBrowser(fn) {
|
|
70
|
+
_openBrowser = fn;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Reset the browser opener to the default (for testing).
|
|
74
|
+
*/
|
|
75
|
+
export function resetOpenBrowser() {
|
|
76
|
+
_openBrowser = openBrowser;
|
|
77
|
+
}
|
|
78
|
+
// Injectable manual code entry for testing
|
|
79
|
+
let _manualCodeEntryFn = manualCodeEntry;
|
|
80
|
+
/** Override the manual code entry function (for testing). */
|
|
81
|
+
export function setManualCodeEntryFn(fn) {
|
|
82
|
+
_manualCodeEntryFn = fn;
|
|
83
|
+
}
|
|
84
|
+
/** Reset the manual code entry function to the default (for testing). */
|
|
85
|
+
export function resetManualCodeEntryFn() {
|
|
86
|
+
_manualCodeEntryFn = manualCodeEntry;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Orchestrate the complete login flow:
|
|
90
|
+
* 1. Try to start temporary OAuth callback server
|
|
91
|
+
* 2. If server starts: open browser and wait for callback
|
|
92
|
+
* 3. If server fails: fall back to manual code entry
|
|
93
|
+
* 4. Exchange code for tokens via Gateway (if code flow) or use tokens directly (if implicit flow)
|
|
94
|
+
* 5. Preserve or generate machineKey (UUID v4)
|
|
95
|
+
* 6. Save complete auth data to auth.json
|
|
96
|
+
* 7. Return success with user info
|
|
97
|
+
*/
|
|
98
|
+
export async function login() {
|
|
99
|
+
// Load existing tokens to preserve machine_key if present
|
|
100
|
+
const existingTokens = await loadTokens();
|
|
101
|
+
const machineKey = existingTokens?.machine_key ?? randomUUID();
|
|
102
|
+
let callbackResult;
|
|
103
|
+
try {
|
|
104
|
+
// Try starting the automatic OAuth callback server
|
|
105
|
+
callbackResult = await loginWithCallbackServer();
|
|
106
|
+
}
|
|
107
|
+
catch (serverErr) {
|
|
108
|
+
// If the server fails to bind, fall back to manual mode
|
|
109
|
+
const errMsg = serverErr instanceof Error ? serverErr.message : String(serverErr);
|
|
110
|
+
logger.warn(`OAuth callback server failed (${errMsg}), falling back to manual mode`);
|
|
111
|
+
const code = await loginWithManualEntry();
|
|
112
|
+
callbackResult = { code };
|
|
113
|
+
}
|
|
114
|
+
let session;
|
|
115
|
+
if (callbackResult.access_token && callbackResult.refresh_token) {
|
|
116
|
+
// Implicit flow - we already have tokens, decode JWT to get user info
|
|
117
|
+
logger.info("Using implicit flow tokens");
|
|
118
|
+
const payload = decodeJwtPayload(callbackResult.access_token);
|
|
119
|
+
session = {
|
|
120
|
+
access_token: callbackResult.access_token,
|
|
121
|
+
refresh_token: callbackResult.refresh_token,
|
|
122
|
+
expires_at: typeof payload.exp === "number" ? payload.exp : Math.floor(Date.now() / 1000) + 3600,
|
|
123
|
+
user: {
|
|
124
|
+
id: payload.sub,
|
|
125
|
+
email: payload.email,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
else if (callbackResult.code) {
|
|
130
|
+
// Code flow - exchange code for tokens via Gateway
|
|
131
|
+
logger.info("Using code flow, exchanging via gateway");
|
|
132
|
+
session = await _exchangeCodeFn(callbackResult.code);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
throw new Error("OAuth callback returned neither code nor tokens");
|
|
136
|
+
}
|
|
137
|
+
// Build the complete auth tokens
|
|
138
|
+
const tokens = {
|
|
139
|
+
machine_key: machineKey,
|
|
140
|
+
access_token: session.access_token,
|
|
141
|
+
refresh_token: session.refresh_token,
|
|
142
|
+
expires_at: session.expires_at,
|
|
143
|
+
user_id: session.user.id,
|
|
144
|
+
};
|
|
145
|
+
// Save to auth.json
|
|
146
|
+
await saveTokens(tokens);
|
|
147
|
+
return {
|
|
148
|
+
user_id: session.user.id,
|
|
149
|
+
email: session.user.email,
|
|
150
|
+
machine_key: machineKey,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Automatic login flow using a local callback server.
|
|
155
|
+
* Starts an HTTP server, opens the browser, and waits for the OAuth callback.
|
|
156
|
+
* Returns either a code (for code flow) or tokens directly (for implicit flow).
|
|
157
|
+
*/
|
|
158
|
+
async function loginWithCallbackServer() {
|
|
159
|
+
const oauthServer = await startOAuthServer();
|
|
160
|
+
try {
|
|
161
|
+
const oauthUrl = await _getOAuthUrlFn(oauthServer.callbackUrl);
|
|
162
|
+
_openBrowser(oauthUrl);
|
|
163
|
+
return await oauthServer.waitForCallback();
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
oauthServer.close();
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Manual login flow as a fallback.
|
|
172
|
+
* Gets the OAuth URL with a placeholder redirect, then prompts the user
|
|
173
|
+
* to visit it manually and paste the authorization code.
|
|
174
|
+
*/
|
|
175
|
+
async function loginWithManualEntry() {
|
|
176
|
+
// Use a placeholder redirect since there's no callback server
|
|
177
|
+
const oauthUrl = await _getOAuthUrlFn("urn:ietf:wg:oauth:2.0:oob");
|
|
178
|
+
return _manualCodeEntryFn(oauthUrl);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt the user to manually paste an OAuth authorization code.
|
|
3
|
+
*
|
|
4
|
+
* Used as a fallback when the automatic OAuth callback server cannot bind
|
|
5
|
+
* (e.g., port blocked by firewall, running in SSH session, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Displays the auth URL for the user to visit manually, then reads the
|
|
8
|
+
* authorization code from stdin.
|
|
9
|
+
*/
|
|
10
|
+
export declare function manualCodeEntry(authUrl: string): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Read a line from stdin with a prompt.
|
|
13
|
+
* Returns the trimmed input.
|
|
14
|
+
*/
|
|
15
|
+
export declare function promptForCode(): Promise<string>;
|
|
16
|
+
//# sourceMappingURL=manual-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-flow.d.ts","sourceRoot":"","sources":["../../src/auth/manual-flow.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAetE;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAerD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Prompt the user to manually paste an OAuth authorization code.
|
|
5
|
+
*
|
|
6
|
+
* Used as a fallback when the automatic OAuth callback server cannot bind
|
|
7
|
+
* (e.g., port blocked by firewall, running in SSH session, etc.).
|
|
8
|
+
*
|
|
9
|
+
* Displays the auth URL for the user to visit manually, then reads the
|
|
10
|
+
* authorization code from stdin.
|
|
11
|
+
*/
|
|
12
|
+
export async function manualCodeEntry(authUrl) {
|
|
13
|
+
logger.info("Automatic callback server failed — falling back to manual mode");
|
|
14
|
+
console.log("\nCould not start local callback server.");
|
|
15
|
+
console.log("Please visit the following URL in your browser:\n");
|
|
16
|
+
console.log(` ${authUrl}\n`);
|
|
17
|
+
console.log("After authorizing, copy the code from the page and paste it below.\n");
|
|
18
|
+
const code = await promptForCode();
|
|
19
|
+
if (!code) {
|
|
20
|
+
throw new Error("No authorization code provided");
|
|
21
|
+
}
|
|
22
|
+
return code;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Read a line from stdin with a prompt.
|
|
26
|
+
* Returns the trimmed input.
|
|
27
|
+
*/
|
|
28
|
+
export async function promptForCode() {
|
|
29
|
+
const rl = createInterface({
|
|
30
|
+
input: process.stdin,
|
|
31
|
+
output: process.stdout,
|
|
32
|
+
});
|
|
33
|
+
try {
|
|
34
|
+
return await new Promise((resolve) => {
|
|
35
|
+
rl.question("Authorization code: ", (answer) => {
|
|
36
|
+
resolve(answer.trim());
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
rl.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=manual-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-flow.js","sourceRoot":"","sources":["../../src/auth/manual-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IAEpF,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAC3C,EAAE,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface OAuthCallbackResult {
|
|
2
|
+
code?: string;
|
|
3
|
+
access_token?: string;
|
|
4
|
+
refresh_token?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface OAuthServer {
|
|
7
|
+
/** The port the server is listening on. */
|
|
8
|
+
port: number;
|
|
9
|
+
/** The full callback URL to use as the redirect URI. */
|
|
10
|
+
callbackUrl: string;
|
|
11
|
+
/** Promise that resolves with the code when the callback is received. */
|
|
12
|
+
waitForCallback: () => Promise<OAuthCallbackResult>;
|
|
13
|
+
/** Manually close the server (e.g., on cancellation). */
|
|
14
|
+
close: () => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Start a temporary HTTP server on a random port to receive the OAuth callback.
|
|
18
|
+
* The server listens only on 127.0.0.1 and closes automatically after the
|
|
19
|
+
* callback is received or after a 5-minute timeout.
|
|
20
|
+
*/
|
|
21
|
+
export declare function startOAuthServer(): Promise<OAuthServer>;
|
|
22
|
+
//# sourceMappingURL=oauth-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"AA8DA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,eAAe,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,yDAAyD;IACzD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAsH7D"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
/** Timeout for waiting for the OAuth callback (5 minutes). */
|
|
3
|
+
const OAUTH_TIMEOUT_MS = 5 * 60 * 1000;
|
|
4
|
+
const SUCCESS_HTML = `<!DOCTYPE html>
|
|
5
|
+
<html>
|
|
6
|
+
<head><title>PocketCoder</title></head>
|
|
7
|
+
<body>
|
|
8
|
+
<h1>Authentication successful!</h1>
|
|
9
|
+
<p>You can close this window.</p>
|
|
10
|
+
</body>
|
|
11
|
+
</html>`;
|
|
12
|
+
const ERROR_HTML = `<!DOCTYPE html>
|
|
13
|
+
<html>
|
|
14
|
+
<head><title>PocketCoder</title></head>
|
|
15
|
+
<body>
|
|
16
|
+
<h1>Login Failed</h1>
|
|
17
|
+
<p>You can close this window.</p>
|
|
18
|
+
</body>
|
|
19
|
+
</html>`;
|
|
20
|
+
/**
|
|
21
|
+
* HTML page that extracts tokens from URL fragment and posts them back.
|
|
22
|
+
* Supabase implicit flow returns tokens in the fragment (#access_token=...).
|
|
23
|
+
*/
|
|
24
|
+
const FRAGMENT_EXTRACTOR_HTML = `<!DOCTYPE html>
|
|
25
|
+
<html>
|
|
26
|
+
<head><title>PocketCoder - Completing Login...</title></head>
|
|
27
|
+
<body>
|
|
28
|
+
<h1>Completing login...</h1>
|
|
29
|
+
<p>Please wait...</p>
|
|
30
|
+
<script>
|
|
31
|
+
const hash = window.location.hash.substring(1);
|
|
32
|
+
const params = new URLSearchParams(hash);
|
|
33
|
+
const accessToken = params.get('access_token');
|
|
34
|
+
const refreshToken = params.get('refresh_token');
|
|
35
|
+
const error = params.get('error');
|
|
36
|
+
|
|
37
|
+
if (error) {
|
|
38
|
+
document.body.innerHTML = '<h1>Login Failed</h1><p>' + error + '</p>';
|
|
39
|
+
} else if (accessToken && refreshToken) {
|
|
40
|
+
fetch('/auth/tokens', {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: { 'Content-Type': 'application/json' },
|
|
43
|
+
body: JSON.stringify({ access_token: accessToken, refresh_token: refreshToken })
|
|
44
|
+
}).then(() => {
|
|
45
|
+
document.body.innerHTML = '<h1>Authentication successful!</h1><p>You can close this window.</p>';
|
|
46
|
+
}).catch(err => {
|
|
47
|
+
document.body.innerHTML = '<h1>Error</h1><p>' + err.message + '</p>';
|
|
48
|
+
});
|
|
49
|
+
} else {
|
|
50
|
+
document.body.innerHTML = '<h1>Error</h1><p>Missing tokens in response</p>';
|
|
51
|
+
}
|
|
52
|
+
</script>
|
|
53
|
+
</body>
|
|
54
|
+
</html>`;
|
|
55
|
+
/**
|
|
56
|
+
* Start a temporary HTTP server on a random port to receive the OAuth callback.
|
|
57
|
+
* The server listens only on 127.0.0.1 and closes automatically after the
|
|
58
|
+
* callback is received or after a 5-minute timeout.
|
|
59
|
+
*/
|
|
60
|
+
export async function startOAuthServer() {
|
|
61
|
+
let settled = false;
|
|
62
|
+
let result = null;
|
|
63
|
+
let error = null;
|
|
64
|
+
let onSettle = null;
|
|
65
|
+
function settle() {
|
|
66
|
+
settled = true;
|
|
67
|
+
onSettle?.();
|
|
68
|
+
}
|
|
69
|
+
const server = createServer((req, res) => {
|
|
70
|
+
const reqUrl = new URL(req.url ?? "/", `http://127.0.0.1`);
|
|
71
|
+
// Handle GET /auth/callback - serve HTML that extracts fragment tokens
|
|
72
|
+
if (req.method === "GET" && reqUrl.pathname === "/auth/callback") {
|
|
73
|
+
const errorParam = reqUrl.searchParams.get("error");
|
|
74
|
+
if (errorParam) {
|
|
75
|
+
res.writeHead(400, { "Content-Type": "text/html" });
|
|
76
|
+
res.end(ERROR_HTML);
|
|
77
|
+
error = new Error(errorParam);
|
|
78
|
+
settle();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Check for code flow (code in query string)
|
|
82
|
+
const code = reqUrl.searchParams.get("code");
|
|
83
|
+
if (code) {
|
|
84
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
85
|
+
res.end(SUCCESS_HTML);
|
|
86
|
+
result = { code };
|
|
87
|
+
settle();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// No code - serve HTML to extract tokens from fragment (implicit flow)
|
|
91
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
92
|
+
res.end(FRAGMENT_EXTRACTOR_HTML);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Handle POST /auth/tokens - receive tokens from JavaScript
|
|
96
|
+
if (req.method === "POST" && reqUrl.pathname === "/auth/tokens") {
|
|
97
|
+
let body = "";
|
|
98
|
+
req.on("data", (chunk) => {
|
|
99
|
+
body += chunk.toString();
|
|
100
|
+
});
|
|
101
|
+
req.on("end", () => {
|
|
102
|
+
try {
|
|
103
|
+
const data = JSON.parse(body);
|
|
104
|
+
if (data.access_token && data.refresh_token) {
|
|
105
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
106
|
+
res.end(JSON.stringify({ success: true }));
|
|
107
|
+
result = { access_token: data.access_token, refresh_token: data.refresh_token };
|
|
108
|
+
settle();
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
112
|
+
res.end(JSON.stringify({ error: "Missing tokens" }));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
117
|
+
res.end(JSON.stringify({ error: "Invalid JSON" }));
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
123
|
+
res.end("Not Found");
|
|
124
|
+
});
|
|
125
|
+
// Wait for the server to be listening
|
|
126
|
+
await new Promise((resolve, reject) => {
|
|
127
|
+
server.on("error", reject);
|
|
128
|
+
server.listen(0, "127.0.0.1", () => {
|
|
129
|
+
resolve();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
const address = server.address();
|
|
133
|
+
const port = address.port;
|
|
134
|
+
const callbackUrl = `http://127.0.0.1:${port}/auth/callback`;
|
|
135
|
+
// Set up timeout
|
|
136
|
+
const timeout = setTimeout(() => {
|
|
137
|
+
error = new Error("OAuth callback timed out after 5 minutes");
|
|
138
|
+
settle();
|
|
139
|
+
server.close();
|
|
140
|
+
}, OAUTH_TIMEOUT_MS);
|
|
141
|
+
function close() {
|
|
142
|
+
clearTimeout(timeout);
|
|
143
|
+
server.close();
|
|
144
|
+
}
|
|
145
|
+
async function waitForCallback() {
|
|
146
|
+
if (!settled) {
|
|
147
|
+
await new Promise((resolve) => {
|
|
148
|
+
onSettle = resolve;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
clearTimeout(timeout);
|
|
152
|
+
server.close();
|
|
153
|
+
if (error) {
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
port,
|
|
160
|
+
callbackUrl,
|
|
161
|
+
waitForCallback,
|
|
162
|
+
close,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=oauth-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Set the token refresh implementation (called during daemon startup). */
|
|
2
|
+
export declare function setRefreshFn(fn: (refreshToken: string) => Promise<{
|
|
3
|
+
access_token: string;
|
|
4
|
+
refresh_token: string;
|
|
5
|
+
expires_at: number;
|
|
6
|
+
}>): void;
|
|
7
|
+
/**
|
|
8
|
+
* Check whether the stored access token is expired (or will expire within the buffer window).
|
|
9
|
+
* Uses the expires_at field (epoch seconds) from auth.json.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isTokenExpired(expiresAt: number): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Refresh the token if it is expired or about to expire.
|
|
14
|
+
* Loads tokens from auth.json, checks expiry, refreshes via Gateway if needed,
|
|
15
|
+
* and saves the updated tokens back to auth.json.
|
|
16
|
+
*
|
|
17
|
+
* Returns true if tokens were refreshed, false if they were still valid.
|
|
18
|
+
* Throws if no tokens are stored.
|
|
19
|
+
*/
|
|
20
|
+
export declare function refreshTokenIfNeeded(): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Get a valid access token, refreshing if needed.
|
|
23
|
+
* Returns the current access_token string.
|
|
24
|
+
* Throws if no tokens are stored or refresh fails.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getValidAccessToken(): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Start the periodic token monitor. Checks token expiry every 60 seconds
|
|
29
|
+
* and refreshes 5 minutes before expiry.
|
|
30
|
+
*/
|
|
31
|
+
export declare function startTokenMonitor(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Stop the periodic token monitor.
|
|
34
|
+
*/
|
|
35
|
+
export declare function stopTokenMonitor(): void;
|
|
36
|
+
//# sourceMappingURL=token-refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-refresh.d.ts","sourceRoot":"","sources":["../../src/auth/token-refresh.ts"],"names":[],"mappings":"AAoBA,2EAA2E;AAC3E,wBAAgB,YAAY,CAC1B,EAAE,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,GACD,IAAI,CAEN;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CA4B7D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAO3D;AAqBD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAcxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { loadTokens, saveTokens } from "./token-storage.js";
|
|
2
|
+
import { clearTokens } from "./token-storage.js";
|
|
3
|
+
import { refreshTokenViaGateway } from "./gateway-auth.js";
|
|
4
|
+
import { logger } from "../utils/logger.js";
|
|
5
|
+
/** Refresh tokens 5 minutes (300 seconds) before actual expiry. */
|
|
6
|
+
const REFRESH_BUFFER_SECONDS = 300;
|
|
7
|
+
/** Check token expiry every 60 seconds. */
|
|
8
|
+
const MONITOR_INTERVAL_MS = 60_000;
|
|
9
|
+
/**
|
|
10
|
+
* Injectable refresh function. Defaults to refreshTokenViaGateway().
|
|
11
|
+
*/
|
|
12
|
+
let _refreshFn = refreshTokenViaGateway;
|
|
13
|
+
/** Set the token refresh implementation (called during daemon startup). */
|
|
14
|
+
export function setRefreshFn(fn) {
|
|
15
|
+
_refreshFn = fn;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check whether the stored access token is expired (or will expire within the buffer window).
|
|
19
|
+
* Uses the expires_at field (epoch seconds) from auth.json.
|
|
20
|
+
*/
|
|
21
|
+
export function isTokenExpired(expiresAt) {
|
|
22
|
+
const now = Math.floor(Date.now() / 1000);
|
|
23
|
+
return now >= expiresAt - REFRESH_BUFFER_SECONDS;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Refresh the token if it is expired or about to expire.
|
|
27
|
+
* Loads tokens from auth.json, checks expiry, refreshes via Gateway if needed,
|
|
28
|
+
* and saves the updated tokens back to auth.json.
|
|
29
|
+
*
|
|
30
|
+
* Returns true if tokens were refreshed, false if they were still valid.
|
|
31
|
+
* Throws if no tokens are stored.
|
|
32
|
+
*/
|
|
33
|
+
export async function refreshTokenIfNeeded() {
|
|
34
|
+
const tokens = await loadTokens();
|
|
35
|
+
if (!tokens) {
|
|
36
|
+
throw new Error("No auth tokens found. Please login first.");
|
|
37
|
+
}
|
|
38
|
+
if (!isTokenExpired(tokens.expires_at)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
logger.info("Access token expired or expiring soon, refreshing...");
|
|
42
|
+
try {
|
|
43
|
+
const session = await _refreshFn(tokens.refresh_token);
|
|
44
|
+
await saveTokens({
|
|
45
|
+
machine_key: tokens.machine_key,
|
|
46
|
+
access_token: session.access_token,
|
|
47
|
+
refresh_token: session.refresh_token,
|
|
48
|
+
expires_at: session.expires_at,
|
|
49
|
+
user_id: tokens.user_id,
|
|
50
|
+
});
|
|
51
|
+
logger.info("Token refreshed successfully");
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
logger.error("Token refresh failed, clearing tokens");
|
|
56
|
+
await clearTokens();
|
|
57
|
+
throw new Error("Failed to refresh token. Tokens cleared. Please login again.");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get a valid access token, refreshing if needed.
|
|
62
|
+
* Returns the current access_token string.
|
|
63
|
+
* Throws if no tokens are stored or refresh fails.
|
|
64
|
+
*/
|
|
65
|
+
export async function getValidAccessToken() {
|
|
66
|
+
await refreshTokenIfNeeded();
|
|
67
|
+
const tokens = await loadTokens();
|
|
68
|
+
if (!tokens) {
|
|
69
|
+
throw new Error("No auth tokens found. Please login first.");
|
|
70
|
+
}
|
|
71
|
+
return tokens.access_token;
|
|
72
|
+
}
|
|
73
|
+
// ── Token Monitor ──────────────────────────────────────────────────────
|
|
74
|
+
let monitorInterval = null;
|
|
75
|
+
/**
|
|
76
|
+
* Run a single monitoring check. Attempts to refresh the token if needed.
|
|
77
|
+
* Errors are logged but not thrown — the monitor continues running.
|
|
78
|
+
*/
|
|
79
|
+
async function monitorCheck() {
|
|
80
|
+
try {
|
|
81
|
+
const refreshed = await refreshTokenIfNeeded();
|
|
82
|
+
if (refreshed) {
|
|
83
|
+
logger.info("Token monitor: refreshed access token");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
logger.error(`Token monitor: ${err instanceof Error ? err.message : String(err)}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Start the periodic token monitor. Checks token expiry every 60 seconds
|
|
92
|
+
* and refreshes 5 minutes before expiry.
|
|
93
|
+
*/
|
|
94
|
+
export function startTokenMonitor() {
|
|
95
|
+
if (monitorInterval) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
logger.debug("Starting token monitor (checking every 60s)");
|
|
99
|
+
monitorInterval = setInterval(() => {
|
|
100
|
+
void monitorCheck();
|
|
101
|
+
}, MONITOR_INTERVAL_MS);
|
|
102
|
+
if (monitorInterval.unref) {
|
|
103
|
+
monitorInterval.unref();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Stop the periodic token monitor.
|
|
108
|
+
*/
|
|
109
|
+
export function stopTokenMonitor() {
|
|
110
|
+
if (monitorInterval) {
|
|
111
|
+
clearInterval(monitorInterval);
|
|
112
|
+
monitorInterval = null;
|
|
113
|
+
logger.debug("Token monitor stopped");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=token-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-refresh.js","sourceRoot":"","sources":["../../src/auth/token-refresh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AuthTokens } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Save auth tokens to auth.json with 0600 permissions (Unix).
|
|
4
|
+
*/
|
|
5
|
+
export declare function saveTokens(tokens: AuthTokens): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Load auth tokens from auth.json.
|
|
8
|
+
* Returns null if the file doesn't exist or has invalid structure.
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadTokens(): Promise<AuthTokens | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Remove auth.json (clear tokens).
|
|
13
|
+
*/
|
|
14
|
+
export declare function clearTokens(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Check if valid, non-expired tokens exist.
|
|
17
|
+
* Returns true if tokens are present and expires_at is in the future.
|
|
18
|
+
*/
|
|
19
|
+
export declare function hasValidTokens(): Promise<boolean>;
|
|
20
|
+
//# sourceMappingURL=token-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-storage.d.ts","sourceRoot":"","sources":["../../src/auth/token-storage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0B7C;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlE;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAS7D;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAKvD"}
|