@agent-relay/cloud 0.1.0
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/dist/api/admin.d.ts +8 -0
- package/dist/api/admin.d.ts.map +1 -0
- package/dist/api/admin.js +225 -0
- package/dist/api/admin.js.map +1 -0
- package/dist/api/auth.d.ts +20 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +136 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/billing.d.ts +7 -0
- package/dist/api/billing.d.ts.map +1 -0
- package/dist/api/billing.js +564 -0
- package/dist/api/billing.js.map +1 -0
- package/dist/api/cli-pty-runner.d.ts +53 -0
- package/dist/api/cli-pty-runner.d.ts.map +1 -0
- package/dist/api/cli-pty-runner.js +193 -0
- package/dist/api/cli-pty-runner.js.map +1 -0
- package/dist/api/codex-auth-helper.d.ts +21 -0
- package/dist/api/codex-auth-helper.d.ts.map +1 -0
- package/dist/api/codex-auth-helper.js +327 -0
- package/dist/api/codex-auth-helper.js.map +1 -0
- package/dist/api/consensus.d.ts +13 -0
- package/dist/api/consensus.d.ts.map +1 -0
- package/dist/api/consensus.js +261 -0
- package/dist/api/consensus.js.map +1 -0
- package/dist/api/coordinators.d.ts +8 -0
- package/dist/api/coordinators.d.ts.map +1 -0
- package/dist/api/coordinators.js +750 -0
- package/dist/api/coordinators.js.map +1 -0
- package/dist/api/daemons.d.ts +12 -0
- package/dist/api/daemons.d.ts.map +1 -0
- package/dist/api/daemons.js +535 -0
- package/dist/api/daemons.js.map +1 -0
- package/dist/api/generic-webhooks.d.ts +8 -0
- package/dist/api/generic-webhooks.d.ts.map +1 -0
- package/dist/api/generic-webhooks.js +129 -0
- package/dist/api/generic-webhooks.js.map +1 -0
- package/dist/api/git.d.ts +8 -0
- package/dist/api/git.d.ts.map +1 -0
- package/dist/api/git.js +269 -0
- package/dist/api/git.js.map +1 -0
- package/dist/api/github-app.d.ts +11 -0
- package/dist/api/github-app.d.ts.map +1 -0
- package/dist/api/github-app.js +223 -0
- package/dist/api/github-app.js.map +1 -0
- package/dist/api/middleware/planLimits.d.ts +43 -0
- package/dist/api/middleware/planLimits.d.ts.map +1 -0
- package/dist/api/middleware/planLimits.js +202 -0
- package/dist/api/middleware/planLimits.js.map +1 -0
- package/dist/api/monitoring.d.ts +11 -0
- package/dist/api/monitoring.d.ts.map +1 -0
- package/dist/api/monitoring.js +578 -0
- package/dist/api/monitoring.js.map +1 -0
- package/dist/api/nango-auth.d.ts +9 -0
- package/dist/api/nango-auth.d.ts.map +1 -0
- package/dist/api/nango-auth.js +674 -0
- package/dist/api/nango-auth.js.map +1 -0
- package/dist/api/onboarding.d.ts +15 -0
- package/dist/api/onboarding.d.ts.map +1 -0
- package/dist/api/onboarding.js +679 -0
- package/dist/api/onboarding.js.map +1 -0
- package/dist/api/policy.d.ts +8 -0
- package/dist/api/policy.d.ts.map +1 -0
- package/dist/api/policy.js +229 -0
- package/dist/api/policy.js.map +1 -0
- package/dist/api/provider-env.d.ts +14 -0
- package/dist/api/provider-env.d.ts.map +1 -0
- package/dist/api/provider-env.js +75 -0
- package/dist/api/provider-env.js.map +1 -0
- package/dist/api/providers.d.ts +7 -0
- package/dist/api/providers.d.ts.map +1 -0
- package/dist/api/providers.js +564 -0
- package/dist/api/providers.js.map +1 -0
- package/dist/api/repos.d.ts +8 -0
- package/dist/api/repos.d.ts.map +1 -0
- package/dist/api/repos.js +577 -0
- package/dist/api/repos.js.map +1 -0
- package/dist/api/sessions.d.ts +11 -0
- package/dist/api/sessions.d.ts.map +1 -0
- package/dist/api/sessions.js +302 -0
- package/dist/api/sessions.js.map +1 -0
- package/dist/api/teams.d.ts +7 -0
- package/dist/api/teams.d.ts.map +1 -0
- package/dist/api/teams.js +281 -0
- package/dist/api/teams.js.map +1 -0
- package/dist/api/test-helpers.d.ts +10 -0
- package/dist/api/test-helpers.d.ts.map +1 -0
- package/dist/api/test-helpers.js +745 -0
- package/dist/api/test-helpers.js.map +1 -0
- package/dist/api/usage.d.ts +7 -0
- package/dist/api/usage.d.ts.map +1 -0
- package/dist/api/usage.js +111 -0
- package/dist/api/usage.js.map +1 -0
- package/dist/api/webhooks.d.ts +8 -0
- package/dist/api/webhooks.d.ts.map +1 -0
- package/dist/api/webhooks.js +645 -0
- package/dist/api/webhooks.js.map +1 -0
- package/dist/api/workspaces.d.ts +25 -0
- package/dist/api/workspaces.d.ts.map +1 -0
- package/dist/api/workspaces.js +1799 -0
- package/dist/api/workspaces.js.map +1 -0
- package/dist/billing/index.d.ts +9 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +9 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/plans.d.ts +39 -0
- package/dist/billing/plans.d.ts.map +1 -0
- package/dist/billing/plans.js +245 -0
- package/dist/billing/plans.js.map +1 -0
- package/dist/billing/service.d.ts +80 -0
- package/dist/billing/service.d.ts.map +1 -0
- package/dist/billing/service.js +388 -0
- package/dist/billing/service.js.map +1 -0
- package/dist/billing/types.d.ts +141 -0
- package/dist/billing/types.d.ts.map +1 -0
- package/dist/billing/types.js +7 -0
- package/dist/billing/types.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -0
- package/dist/db/bulk-ingest.d.ts +89 -0
- package/dist/db/bulk-ingest.d.ts.map +1 -0
- package/dist/db/bulk-ingest.js +268 -0
- package/dist/db/bulk-ingest.js.map +1 -0
- package/dist/db/drizzle.d.ts +256 -0
- package/dist/db/drizzle.d.ts.map +1 -0
- package/dist/db/drizzle.js +1286 -0
- package/dist/db/drizzle.js.map +1 -0
- package/dist/db/index.d.ts +55 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +68 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +4873 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +620 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/provisioner/index.d.ts +207 -0
- package/dist/provisioner/index.d.ts.map +1 -0
- package/dist/provisioner/index.js +2114 -0
- package/dist/provisioner/index.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1924 -0
- package/dist/server.js.map +1 -0
- package/dist/services/auto-scaler.d.ts +152 -0
- package/dist/services/auto-scaler.d.ts.map +1 -0
- package/dist/services/auto-scaler.js +439 -0
- package/dist/services/auto-scaler.js.map +1 -0
- package/dist/services/capacity-manager.d.ts +148 -0
- package/dist/services/capacity-manager.d.ts.map +1 -0
- package/dist/services/capacity-manager.js +449 -0
- package/dist/services/capacity-manager.js.map +1 -0
- package/dist/services/ci-agent-spawner.d.ts +49 -0
- package/dist/services/ci-agent-spawner.d.ts.map +1 -0
- package/dist/services/ci-agent-spawner.js +373 -0
- package/dist/services/ci-agent-spawner.js.map +1 -0
- package/dist/services/cloud-message-bus.d.ts +28 -0
- package/dist/services/cloud-message-bus.d.ts.map +1 -0
- package/dist/services/cloud-message-bus.js +19 -0
- package/dist/services/cloud-message-bus.js.map +1 -0
- package/dist/services/compute-enforcement.d.ts +57 -0
- package/dist/services/compute-enforcement.d.ts.map +1 -0
- package/dist/services/compute-enforcement.js +175 -0
- package/dist/services/compute-enforcement.js.map +1 -0
- package/dist/services/coordinator.d.ts +62 -0
- package/dist/services/coordinator.d.ts.map +1 -0
- package/dist/services/coordinator.js +389 -0
- package/dist/services/coordinator.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +25 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/intro-expiration.d.ts +60 -0
- package/dist/services/intro-expiration.d.ts.map +1 -0
- package/dist/services/intro-expiration.js +252 -0
- package/dist/services/intro-expiration.js.map +1 -0
- package/dist/services/mention-handler.d.ts +65 -0
- package/dist/services/mention-handler.d.ts.map +1 -0
- package/dist/services/mention-handler.js +405 -0
- package/dist/services/mention-handler.js.map +1 -0
- package/dist/services/nango.d.ts +201 -0
- package/dist/services/nango.d.ts.map +1 -0
- package/dist/services/nango.js +392 -0
- package/dist/services/nango.js.map +1 -0
- package/dist/services/persistence.d.ts +131 -0
- package/dist/services/persistence.d.ts.map +1 -0
- package/dist/services/persistence.js +200 -0
- package/dist/services/persistence.js.map +1 -0
- package/dist/services/planLimits.d.ts +147 -0
- package/dist/services/planLimits.d.ts.map +1 -0
- package/dist/services/planLimits.js +335 -0
- package/dist/services/planLimits.js.map +1 -0
- package/dist/services/presence-registry.d.ts +56 -0
- package/dist/services/presence-registry.d.ts.map +1 -0
- package/dist/services/presence-registry.js +91 -0
- package/dist/services/presence-registry.js.map +1 -0
- package/dist/services/scaling-orchestrator.d.ts +159 -0
- package/dist/services/scaling-orchestrator.d.ts.map +1 -0
- package/dist/services/scaling-orchestrator.js +502 -0
- package/dist/services/scaling-orchestrator.js.map +1 -0
- package/dist/services/scaling-policy.d.ts +121 -0
- package/dist/services/scaling-policy.d.ts.map +1 -0
- package/dist/services/scaling-policy.js +415 -0
- package/dist/services/scaling-policy.js.map +1 -0
- package/dist/services/ssh-security.d.ts +31 -0
- package/dist/services/ssh-security.d.ts.map +1 -0
- package/dist/services/ssh-security.js +63 -0
- package/dist/services/ssh-security.js.map +1 -0
- package/dist/services/workspace-keepalive.d.ts +76 -0
- package/dist/services/workspace-keepalive.d.ts.map +1 -0
- package/dist/services/workspace-keepalive.js +234 -0
- package/dist/services/workspace-keepalive.js.map +1 -0
- package/dist/shims/consensus.d.ts +23 -0
- package/dist/shims/consensus.d.ts.map +1 -0
- package/dist/shims/consensus.js +5 -0
- package/dist/shims/consensus.js.map +1 -0
- package/dist/webhooks/index.d.ts +24 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +29 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/parsers/github.d.ts +8 -0
- package/dist/webhooks/parsers/github.d.ts.map +1 -0
- package/dist/webhooks/parsers/github.js +234 -0
- package/dist/webhooks/parsers/github.js.map +1 -0
- package/dist/webhooks/parsers/index.d.ts +23 -0
- package/dist/webhooks/parsers/index.d.ts.map +1 -0
- package/dist/webhooks/parsers/index.js +30 -0
- package/dist/webhooks/parsers/index.js.map +1 -0
- package/dist/webhooks/parsers/linear.d.ts +9 -0
- package/dist/webhooks/parsers/linear.d.ts.map +1 -0
- package/dist/webhooks/parsers/linear.js +258 -0
- package/dist/webhooks/parsers/linear.js.map +1 -0
- package/dist/webhooks/parsers/slack.d.ts +9 -0
- package/dist/webhooks/parsers/slack.d.ts.map +1 -0
- package/dist/webhooks/parsers/slack.js +214 -0
- package/dist/webhooks/parsers/slack.js.map +1 -0
- package/dist/webhooks/responders/github.d.ts +8 -0
- package/dist/webhooks/responders/github.d.ts.map +1 -0
- package/dist/webhooks/responders/github.js +73 -0
- package/dist/webhooks/responders/github.js.map +1 -0
- package/dist/webhooks/responders/index.d.ts +23 -0
- package/dist/webhooks/responders/index.d.ts.map +1 -0
- package/dist/webhooks/responders/index.js +30 -0
- package/dist/webhooks/responders/index.js.map +1 -0
- package/dist/webhooks/responders/linear.d.ts +9 -0
- package/dist/webhooks/responders/linear.d.ts.map +1 -0
- package/dist/webhooks/responders/linear.js +149 -0
- package/dist/webhooks/responders/linear.js.map +1 -0
- package/dist/webhooks/responders/slack.d.ts +20 -0
- package/dist/webhooks/responders/slack.d.ts.map +1 -0
- package/dist/webhooks/responders/slack.js +178 -0
- package/dist/webhooks/responders/slack.js.map +1 -0
- package/dist/webhooks/router.d.ts +25 -0
- package/dist/webhooks/router.d.ts.map +1 -0
- package/dist/webhooks/router.js +504 -0
- package/dist/webhooks/router.js.map +1 -0
- package/dist/webhooks/rules-engine.d.ts +24 -0
- package/dist/webhooks/rules-engine.d.ts.map +1 -0
- package/dist/webhooks/rules-engine.js +287 -0
- package/dist/webhooks/rules-engine.js.map +1 -0
- package/dist/webhooks/types.d.ts +186 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +8 -0
- package/dist/webhooks/types.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin API Routes
|
|
3
|
+
*
|
|
4
|
+
* Administrative endpoints for managing workspaces at scale.
|
|
5
|
+
* Protected by admin secret (ADMIN_API_SECRET environment variable).
|
|
6
|
+
*/
|
|
7
|
+
export declare const adminRouter: import("express-serve-static-core").Router;
|
|
8
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/api/admin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,WAAW,4CAAW,CAAC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin API Routes
|
|
3
|
+
*
|
|
4
|
+
* Administrative endpoints for managing workspaces at scale.
|
|
5
|
+
* Protected by admin secret (ADMIN_API_SECRET environment variable).
|
|
6
|
+
*/
|
|
7
|
+
import { Router } from 'express';
|
|
8
|
+
import { getConfig } from '../config.js';
|
|
9
|
+
import { getProvisioner, WorkspaceProvisioner } from '../provisioner/index.js';
|
|
10
|
+
export const adminRouter = Router();
|
|
11
|
+
/**
|
|
12
|
+
* Middleware to authenticate admin requests
|
|
13
|
+
* Requires ADMIN_API_SECRET header to match environment variable
|
|
14
|
+
*/
|
|
15
|
+
async function requireAdminAuth(req, res, next) {
|
|
16
|
+
const authHeader = req.headers['x-admin-secret'] || req.headers.authorization;
|
|
17
|
+
const adminSecret = process.env.ADMIN_API_SECRET;
|
|
18
|
+
if (!adminSecret) {
|
|
19
|
+
res.status(503).json({ error: 'Admin API not configured' });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Support both x-admin-secret header and Bearer token
|
|
23
|
+
const providedSecret = authHeader?.toString().replace('Bearer ', '');
|
|
24
|
+
if (!providedSecret || providedSecret !== adminSecret) {
|
|
25
|
+
res.status(401).json({ error: 'Invalid admin credentials' });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
next();
|
|
29
|
+
}
|
|
30
|
+
// Apply admin auth to all routes
|
|
31
|
+
adminRouter.use(requireAdminAuth);
|
|
32
|
+
/**
|
|
33
|
+
* POST /api/admin/workspaces/update-image
|
|
34
|
+
*
|
|
35
|
+
* Gracefully update workspace images across all or specific workspaces.
|
|
36
|
+
*
|
|
37
|
+
* Request body:
|
|
38
|
+
* - image: New Docker image to deploy (required)
|
|
39
|
+
* - workspaceIds?: Array of specific workspace IDs to update
|
|
40
|
+
* - userIds?: Array of user IDs whose workspaces to update
|
|
41
|
+
* - force?: Force update even if agents are active (default: false)
|
|
42
|
+
* - skipRestart?: Update config without restarting (default: false)
|
|
43
|
+
* - batchSize?: Number of concurrent updates (default: 5)
|
|
44
|
+
*
|
|
45
|
+
* Response:
|
|
46
|
+
* - summary: { total, updated, pendingRestart, skippedActiveAgents, skippedVerificationFailed, skippedNotRunning, errors }
|
|
47
|
+
* - results: Array of per-workspace results
|
|
48
|
+
*/
|
|
49
|
+
adminRouter.post('/workspaces/update-image', async (req, res) => {
|
|
50
|
+
const { image, workspaceIds, userIds, force = false, skipRestart = false, batchSize = 5, } = req.body;
|
|
51
|
+
if (!image) {
|
|
52
|
+
res.status(400).json({ error: 'image is required' });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
console.log(`[admin] Starting workspace image update to ${image}`, {
|
|
56
|
+
workspaceIds: workspaceIds?.length ?? 'all',
|
|
57
|
+
userIds: userIds?.length ?? 'all',
|
|
58
|
+
force,
|
|
59
|
+
skipRestart,
|
|
60
|
+
batchSize,
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
const provisioner = getProvisioner();
|
|
64
|
+
const result = await provisioner.gracefulUpdateAllImages(image, {
|
|
65
|
+
workspaceIds,
|
|
66
|
+
userIds,
|
|
67
|
+
force,
|
|
68
|
+
skipRestart,
|
|
69
|
+
batchSize,
|
|
70
|
+
});
|
|
71
|
+
res.json(result);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error('[admin] Error updating workspace images:', error);
|
|
75
|
+
res.status(500).json({
|
|
76
|
+
error: 'Failed to update workspace images',
|
|
77
|
+
details: error.message,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* POST /api/admin/workspaces/:id/update-image
|
|
83
|
+
*
|
|
84
|
+
* Gracefully update a single workspace's image.
|
|
85
|
+
*
|
|
86
|
+
* Request body:
|
|
87
|
+
* - image: New Docker image to deploy (required)
|
|
88
|
+
* - force?: Force update even if agents are active (default: false)
|
|
89
|
+
* - skipRestart?: Update config without restarting (default: false)
|
|
90
|
+
*
|
|
91
|
+
* Response:
|
|
92
|
+
* - result: Update result code
|
|
93
|
+
* - workspaceId: Workspace ID
|
|
94
|
+
* - machineState?: Current machine state
|
|
95
|
+
* - agentCount?: Number of active agents (if applicable)
|
|
96
|
+
* - error?: Error message (if applicable)
|
|
97
|
+
*/
|
|
98
|
+
adminRouter.post('/workspaces/:id/update-image', async (req, res) => {
|
|
99
|
+
const id = req.params.id;
|
|
100
|
+
const { image, force = false, skipRestart = false, } = req.body;
|
|
101
|
+
if (!image) {
|
|
102
|
+
res.status(400).json({ error: 'image is required' });
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log(`[admin] Updating workspace ${id} image to ${image}`, { force, skipRestart });
|
|
106
|
+
try {
|
|
107
|
+
const provisioner = getProvisioner();
|
|
108
|
+
const result = await provisioner.gracefulUpdateImage(id, image, {
|
|
109
|
+
force,
|
|
110
|
+
skipRestart,
|
|
111
|
+
});
|
|
112
|
+
// Return appropriate status code based on result
|
|
113
|
+
if (result.result === WorkspaceProvisioner.UpdateResult.ERROR) {
|
|
114
|
+
res.status(500).json(result);
|
|
115
|
+
}
|
|
116
|
+
else if (result.result === WorkspaceProvisioner.UpdateResult.NOT_SUPPORTED) {
|
|
117
|
+
res.status(400).json(result);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
res.json(result);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(`[admin] Error updating workspace ${id}:`, error);
|
|
125
|
+
res.status(500).json({
|
|
126
|
+
error: 'Failed to update workspace image',
|
|
127
|
+
details: error.message,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
/**
|
|
132
|
+
* GET /api/admin/workspaces/:id/agents
|
|
133
|
+
*
|
|
134
|
+
* Check active agents in a workspace.
|
|
135
|
+
* Useful for pre-flight checks before updates.
|
|
136
|
+
*
|
|
137
|
+
* Response:
|
|
138
|
+
* - hasActiveAgents: boolean
|
|
139
|
+
* - agentCount: number
|
|
140
|
+
* - agents: Array of { name, status }
|
|
141
|
+
*/
|
|
142
|
+
adminRouter.get('/workspaces/:id/agents', async (req, res) => {
|
|
143
|
+
const id = req.params.id;
|
|
144
|
+
try {
|
|
145
|
+
// Query workspace directly from DB and check agents via daemon API
|
|
146
|
+
const workspace = await (await import('../db/index.js')).db.workspaces.findById(id);
|
|
147
|
+
if (!workspace) {
|
|
148
|
+
res.status(404).json({ error: 'Workspace not found' });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (workspace.computeProvider !== 'fly') {
|
|
152
|
+
res.status(400).json({ error: 'Only Fly.io workspaces support agent checking' });
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Query the workspace daemon directly
|
|
156
|
+
const baseUrl = workspace.publicUrl;
|
|
157
|
+
if (!baseUrl) {
|
|
158
|
+
res.json({ hasActiveAgents: false, agentCount: 0, agents: [] });
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
// Use /api/data endpoint which returns { agents: [...], ... }
|
|
163
|
+
// Note: /api/agents doesn't exist on the workspace dashboard-server
|
|
164
|
+
const response = await fetch(`${baseUrl}/api/data`, {
|
|
165
|
+
method: 'GET',
|
|
166
|
+
headers: { 'Accept': 'application/json' },
|
|
167
|
+
signal: AbortSignal.timeout(10_000),
|
|
168
|
+
});
|
|
169
|
+
if (!response.ok) {
|
|
170
|
+
res.json({ hasActiveAgents: false, agentCount: 0, agents: [], error: `Daemon returned ${response.status}` });
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const data = await response.json();
|
|
174
|
+
const agents = data.agents || [];
|
|
175
|
+
const activeAgents = agents.filter(a => {
|
|
176
|
+
const status = (a.status ?? '').toLowerCase();
|
|
177
|
+
const activityState = (a.activityState ?? '').toLowerCase();
|
|
178
|
+
const isProcessing = a.isProcessing === true;
|
|
179
|
+
if (activityState === 'active' || activityState === 'idle')
|
|
180
|
+
return true;
|
|
181
|
+
if (status && status !== 'disconnected' && status !== 'offline')
|
|
182
|
+
return true;
|
|
183
|
+
if (isProcessing)
|
|
184
|
+
return true;
|
|
185
|
+
return false;
|
|
186
|
+
});
|
|
187
|
+
res.json({
|
|
188
|
+
hasActiveAgents: activeAgents.length > 0,
|
|
189
|
+
agentCount: activeAgents.length,
|
|
190
|
+
agents: agents.map(a => ({ name: a.name, status: a.status || a.activityState || 'unknown' })),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
// Workspace might be stopped
|
|
195
|
+
res.json({
|
|
196
|
+
hasActiveAgents: false,
|
|
197
|
+
agentCount: 0,
|
|
198
|
+
agents: [],
|
|
199
|
+
error: `Could not reach workspace: ${error.message}`,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
console.error(`[admin] Error checking agents for workspace ${id}:`, error);
|
|
205
|
+
res.status(500).json({
|
|
206
|
+
error: 'Failed to check workspace agents',
|
|
207
|
+
details: error.message,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
/**
|
|
212
|
+
* GET /api/admin/health
|
|
213
|
+
*
|
|
214
|
+
* Health check for admin API.
|
|
215
|
+
*/
|
|
216
|
+
adminRouter.get('/health', (_req, res) => {
|
|
217
|
+
res.json({
|
|
218
|
+
status: 'ok',
|
|
219
|
+
timestamp: new Date().toISOString(),
|
|
220
|
+
config: {
|
|
221
|
+
computeProvider: getConfig().compute.provider,
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/api/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth API Routes
|
|
3
|
+
*
|
|
4
|
+
* Session management routes.
|
|
5
|
+
* User login is handled via Nango (see nango-auth.ts).
|
|
6
|
+
* GitHub repo operations are in github-app.ts.
|
|
7
|
+
*/
|
|
8
|
+
import { Request, Response } from 'express';
|
|
9
|
+
export declare const authRouter: import("express-serve-static-core").Router;
|
|
10
|
+
declare module 'express-session' {
|
|
11
|
+
interface SessionData {
|
|
12
|
+
userId?: string;
|
|
13
|
+
githubToken?: string;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Middleware to require authentication
|
|
18
|
+
*/
|
|
19
|
+
export declare function requireAuth(req: Request, res: Response, next: () => void): Response<any, Record<string, any>> | undefined;
|
|
20
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAU,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGpD,eAAO,MAAM,UAAU,4CAAW,CAAC;AAGnC,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,WAAW;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;CACF;AAsED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,kDASxE"}
|
package/dist/api/auth.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth API Routes
|
|
3
|
+
*
|
|
4
|
+
* Session management routes.
|
|
5
|
+
* User login is handled via Nango (see nango-auth.ts).
|
|
6
|
+
* GitHub repo operations are in github-app.ts.
|
|
7
|
+
*/
|
|
8
|
+
import { Router } from 'express';
|
|
9
|
+
import { db } from '../db/index.js';
|
|
10
|
+
export const authRouter = Router();
|
|
11
|
+
/**
|
|
12
|
+
* GET /api/auth/github
|
|
13
|
+
* Redirect to Nango login flow
|
|
14
|
+
* @deprecated Use /api/auth/nango/login-session instead
|
|
15
|
+
*/
|
|
16
|
+
authRouter.get('/github', (_req, res) => {
|
|
17
|
+
res.redirect('/api/auth/nango/login-session');
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* POST /api/auth/logout
|
|
21
|
+
* Logout user
|
|
22
|
+
*/
|
|
23
|
+
authRouter.post('/logout', (req, res) => {
|
|
24
|
+
req.session.destroy((err) => {
|
|
25
|
+
if (err) {
|
|
26
|
+
return res.status(500).json({ error: 'Failed to logout' });
|
|
27
|
+
}
|
|
28
|
+
res.json({ success: true });
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* GET /api/auth/me
|
|
33
|
+
* Get current user
|
|
34
|
+
*/
|
|
35
|
+
authRouter.get('/me', async (req, res) => {
|
|
36
|
+
if (!req.session.userId) {
|
|
37
|
+
return res.status(401).json({ error: 'Not authenticated' });
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const user = await db.users.findById(req.session.userId);
|
|
41
|
+
if (!user) {
|
|
42
|
+
return res.status(401).json({ error: 'User not found' });
|
|
43
|
+
}
|
|
44
|
+
// Get connected providers
|
|
45
|
+
const credentials = await db.credentials.findByUserId(user.id);
|
|
46
|
+
const connectedProviders = credentials.map((c) => ({
|
|
47
|
+
provider: c.provider,
|
|
48
|
+
email: c.providerAccountEmail,
|
|
49
|
+
connectedAt: c.createdAt,
|
|
50
|
+
}));
|
|
51
|
+
// Get pending invites
|
|
52
|
+
const pendingInvites = await db.workspaceMembers.getPendingInvites(user.id);
|
|
53
|
+
// Check for pending GitHub installation request
|
|
54
|
+
const pendingGitHubApproval = !!user.pendingInstallationRequest;
|
|
55
|
+
res.json({
|
|
56
|
+
id: user.id,
|
|
57
|
+
githubUsername: user.githubUsername,
|
|
58
|
+
email: user.email,
|
|
59
|
+
avatarUrl: user.avatarUrl,
|
|
60
|
+
plan: user.plan,
|
|
61
|
+
connectedProviders,
|
|
62
|
+
pendingInvites: pendingInvites.length,
|
|
63
|
+
pendingGitHubApproval,
|
|
64
|
+
onboardingCompleted: !!user.onboardingCompletedAt,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('Error getting user:', error);
|
|
69
|
+
res.status(500).json({ error: 'Failed to get user' });
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Middleware to require authentication
|
|
74
|
+
*/
|
|
75
|
+
export function requireAuth(req, res, next) {
|
|
76
|
+
if (!req.session.userId) {
|
|
77
|
+
return res.status(401).json({
|
|
78
|
+
error: 'Authentication required',
|
|
79
|
+
code: 'SESSION_EXPIRED',
|
|
80
|
+
message: 'Your session has expired. Please log in again.',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
next();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* GET /api/auth/session
|
|
87
|
+
* Check if current session is valid
|
|
88
|
+
*/
|
|
89
|
+
authRouter.get('/session', async (req, res) => {
|
|
90
|
+
if (!req.session.userId) {
|
|
91
|
+
return res.json({
|
|
92
|
+
authenticated: false,
|
|
93
|
+
code: 'SESSION_EXPIRED',
|
|
94
|
+
message: 'Your session has expired. Please log in again.',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
// Verify user still exists
|
|
99
|
+
const user = await db.users.findById(req.session.userId);
|
|
100
|
+
if (!user) {
|
|
101
|
+
req.session.destroy(() => { });
|
|
102
|
+
return res.json({
|
|
103
|
+
authenticated: false,
|
|
104
|
+
code: 'USER_NOT_FOUND',
|
|
105
|
+
message: 'User account not found. Please log in again.',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Get connected providers
|
|
109
|
+
const credentials = await db.credentials.findByUserId(user.id);
|
|
110
|
+
const connectedProviders = credentials.map((c) => ({
|
|
111
|
+
provider: c.provider,
|
|
112
|
+
email: c.providerAccountEmail,
|
|
113
|
+
connectedAt: c.createdAt,
|
|
114
|
+
}));
|
|
115
|
+
res.json({
|
|
116
|
+
authenticated: true,
|
|
117
|
+
user: {
|
|
118
|
+
id: user.id,
|
|
119
|
+
githubUsername: user.githubUsername,
|
|
120
|
+
email: user.email,
|
|
121
|
+
avatarUrl: user.avatarUrl,
|
|
122
|
+
plan: user.plan,
|
|
123
|
+
},
|
|
124
|
+
connectedProviders,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error('Session check error:', error);
|
|
129
|
+
res.status(500).json({
|
|
130
|
+
authenticated: false,
|
|
131
|
+
code: 'SESSION_ERROR',
|
|
132
|
+
message: 'An error occurred while checking your session.',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/api/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,eAAO,MAAM,aAAa,4CAAW,CAAC"}
|