@bazaar.ai/mcp-human-agents 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/.env.example +15 -0
- package/README.md +178 -0
- package/dist/mcp-server/src/bin.d.ts +3 -0
- package/dist/mcp-server/src/bin.d.ts.map +1 -0
- package/dist/mcp-server/src/bin.js +10 -0
- package/dist/mcp-server/src/bin.js.map +1 -0
- package/dist/mcp-server/src/cli/setup.d.ts +2 -0
- package/dist/mcp-server/src/cli/setup.d.ts.map +1 -0
- package/dist/mcp-server/src/cli/setup.js +274 -0
- package/dist/mcp-server/src/cli/setup.js.map +1 -0
- package/dist/mcp-server/src/config/defaults.d.ts +16 -0
- package/dist/mcp-server/src/config/defaults.d.ts.map +1 -0
- package/dist/mcp-server/src/config/defaults.js +19 -0
- package/dist/mcp-server/src/config/defaults.js.map +1 -0
- package/dist/mcp-server/src/config/env.d.ts +73 -0
- package/dist/mcp-server/src/config/env.d.ts.map +1 -0
- package/dist/mcp-server/src/config/env.js +72 -0
- package/dist/mcp-server/src/config/env.js.map +1 -0
- package/dist/mcp-server/src/config/index.d.ts +3 -0
- package/dist/mcp-server/src/config/index.d.ts.map +1 -0
- package/dist/mcp-server/src/config/index.js +22 -0
- package/dist/mcp-server/src/config/index.js.map +1 -0
- package/dist/mcp-server/src/context/generator.d.ts +16 -0
- package/dist/mcp-server/src/context/generator.d.ts.map +1 -0
- package/dist/mcp-server/src/context/generator.js +61 -0
- package/dist/mcp-server/src/context/generator.js.map +1 -0
- package/dist/mcp-server/src/context/index.d.ts +3 -0
- package/dist/mcp-server/src/context/index.d.ts.map +1 -0
- package/dist/mcp-server/src/context/index.js +10 -0
- package/dist/mcp-server/src/context/index.js.map +1 -0
- package/dist/mcp-server/src/context/templates.d.ts +8 -0
- package/dist/mcp-server/src/context/templates.d.ts.map +1 -0
- package/dist/mcp-server/src/context/templates.js +41 -0
- package/dist/mcp-server/src/context/templates.js.map +1 -0
- package/dist/mcp-server/src/git/branch.d.ts +13 -0
- package/dist/mcp-server/src/git/branch.d.ts.map +1 -0
- package/dist/mcp-server/src/git/branch.js +49 -0
- package/dist/mcp-server/src/git/branch.js.map +1 -0
- package/dist/mcp-server/src/git/diff.d.ts +10 -0
- package/dist/mcp-server/src/git/diff.d.ts.map +1 -0
- package/dist/mcp-server/src/git/diff.js +39 -0
- package/dist/mcp-server/src/git/diff.js.map +1 -0
- package/dist/mcp-server/src/git/index.d.ts +5 -0
- package/dist/mcp-server/src/git/index.d.ts.map +1 -0
- package/dist/mcp-server/src/git/index.js +16 -0
- package/dist/mcp-server/src/git/index.js.map +1 -0
- package/dist/mcp-server/src/git/merge.d.ts +6 -0
- package/dist/mcp-server/src/git/merge.d.ts.map +1 -0
- package/dist/mcp-server/src/git/merge.js +30 -0
- package/dist/mcp-server/src/git/merge.js.map +1 -0
- package/dist/mcp-server/src/git/worktree.d.ts +11 -0
- package/dist/mcp-server/src/git/worktree.d.ts.map +1 -0
- package/dist/mcp-server/src/git/worktree.js +38 -0
- package/dist/mcp-server/src/git/worktree.js.map +1 -0
- package/dist/mcp-server/src/http-wrapper.d.ts +6 -0
- package/dist/mcp-server/src/http-wrapper.d.ts.map +1 -0
- package/dist/mcp-server/src/http-wrapper.js +85 -0
- package/dist/mcp-server/src/http-wrapper.js.map +1 -0
- package/dist/mcp-server/src/index.d.ts +2 -0
- package/dist/mcp-server/src/index.d.ts.map +1 -0
- package/dist/mcp-server/src/index.js +28 -0
- package/dist/mcp-server/src/index.js.map +1 -0
- package/dist/mcp-server/src/platform-client/client.d.ts +17 -0
- package/dist/mcp-server/src/platform-client/client.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/client.js +68 -0
- package/dist/mcp-server/src/platform-client/client.js.map +1 -0
- package/dist/mcp-server/src/platform-client/index.d.ts +5 -0
- package/dist/mcp-server/src/platform-client/index.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/index.js +10 -0
- package/dist/mcp-server/src/platform-client/index.js.map +1 -0
- package/dist/mcp-server/src/platform-client/mock-client.d.ts +28 -0
- package/dist/mcp-server/src/platform-client/mock-client.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/mock-client.js +75 -0
- package/dist/mcp-server/src/platform-client/mock-client.js.map +1 -0
- package/dist/mcp-server/src/platform-client/polling.d.ts +9 -0
- package/dist/mcp-server/src/platform-client/polling.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/polling.js +40 -0
- package/dist/mcp-server/src/platform-client/polling.js.map +1 -0
- package/dist/mcp-server/src/platform-client/types.d.ts +2 -0
- package/dist/mcp-server/src/platform-client/types.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/types.js +3 -0
- package/dist/mcp-server/src/platform-client/types.js.map +1 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.d.ts +14 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.js +48 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.js.map +1 -0
- package/dist/mcp-server/src/provisioning/cleanup.d.ts +19 -0
- package/dist/mcp-server/src/provisioning/cleanup.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/cleanup.js +96 -0
- package/dist/mcp-server/src/provisioning/cleanup.js.map +1 -0
- package/dist/mcp-server/src/provisioning/index.d.ts +6 -0
- package/dist/mcp-server/src/provisioning/index.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/index.js +24 -0
- package/dist/mcp-server/src/provisioning/index.js.map +1 -0
- package/dist/mcp-server/src/provisioning/linux-user.d.ts +15 -0
- package/dist/mcp-server/src/provisioning/linux-user.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/linux-user.js +62 -0
- package/dist/mcp-server/src/provisioning/linux-user.js.map +1 -0
- package/dist/mcp-server/src/provisioning/privileged.d.ts +40 -0
- package/dist/mcp-server/src/provisioning/privileged.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/privileged.js +123 -0
- package/dist/mcp-server/src/provisioning/privileged.js.map +1 -0
- package/dist/mcp-server/src/provisioning/ssh-config.d.ts +21 -0
- package/dist/mcp-server/src/provisioning/ssh-config.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/ssh-config.js +161 -0
- package/dist/mcp-server/src/provisioning/ssh-config.js.map +1 -0
- package/dist/mcp-server/src/provisioning/tmux-session.d.ts +37 -0
- package/dist/mcp-server/src/provisioning/tmux-session.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/tmux-session.js +123 -0
- package/dist/mcp-server/src/provisioning/tmux-session.js.map +1 -0
- package/dist/mcp-server/src/server.d.ts +3 -0
- package/dist/mcp-server/src/server.d.ts.map +1 -0
- package/dist/mcp-server/src/server.js +67 -0
- package/dist/mcp-server/src/server.js.map +1 -0
- package/dist/mcp-server/src/state/gig-store.d.ts +19 -0
- package/dist/mcp-server/src/state/gig-store.d.ts.map +1 -0
- package/dist/mcp-server/src/state/gig-store.js +52 -0
- package/dist/mcp-server/src/state/gig-store.js.map +1 -0
- package/dist/mcp-server/src/state/index.d.ts +4 -0
- package/dist/mcp-server/src/state/index.d.ts.map +1 -0
- package/dist/mcp-server/src/state/index.js +8 -0
- package/dist/mcp-server/src/state/index.js.map +1 -0
- package/dist/mcp-server/src/state/persistence.d.ts +13 -0
- package/dist/mcp-server/src/state/persistence.d.ts.map +1 -0
- package/dist/mcp-server/src/state/persistence.js +48 -0
- package/dist/mcp-server/src/state/persistence.js.map +1 -0
- package/dist/mcp-server/src/state/types.d.ts +15 -0
- package/dist/mcp-server/src/state/types.d.ts.map +1 -0
- package/dist/mcp-server/src/state/types.js +3 -0
- package/dist/mcp-server/src/state/types.js.map +1 -0
- package/dist/mcp-server/src/tools/dismiss-human.d.ts +25 -0
- package/dist/mcp-server/src/tools/dismiss-human.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/dismiss-human.js +78 -0
- package/dist/mcp-server/src/tools/dismiss-human.js.map +1 -0
- package/dist/mcp-server/src/tools/index.d.ts +9 -0
- package/dist/mcp-server/src/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/index.js +20 -0
- package/dist/mcp-server/src/tools/index.js.map +1 -0
- package/dist/mcp-server/src/tools/list-humans.d.ts +18 -0
- package/dist/mcp-server/src/tools/list-humans.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/list-humans.js +35 -0
- package/dist/mcp-server/src/tools/list-humans.js.map +1 -0
- package/dist/mcp-server/src/tools/message-human.d.ts +10 -0
- package/dist/mcp-server/src/tools/message-human.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/message-human.js +19 -0
- package/dist/mcp-server/src/tools/message-human.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.d.ts +19 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.js +22 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.d.ts +4 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.js +7 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.d.ts +13 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.js +9 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.d.ts +22 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.js +18 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/summon-human.d.ts +31 -0
- package/dist/mcp-server/src/tools/summon-human.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/summon-human.js +137 -0
- package/dist/mcp-server/src/tools/summon-human.js.map +1 -0
- package/dist/mcp-server/src/tunnel/client.d.ts +16 -0
- package/dist/mcp-server/src/tunnel/client.d.ts.map +1 -0
- package/dist/mcp-server/src/tunnel/client.js +100 -0
- package/dist/mcp-server/src/tunnel/client.js.map +1 -0
- package/dist/mcp-server/src/tunnel/index.d.ts +6 -0
- package/dist/mcp-server/src/tunnel/index.d.ts.map +1 -0
- package/dist/mcp-server/src/tunnel/index.js +28 -0
- package/dist/mcp-server/src/tunnel/index.js.map +1 -0
- package/dist/mcp-server/src/utils/errors.d.ts +28 -0
- package/dist/mcp-server/src/utils/errors.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/errors.js +66 -0
- package/dist/mcp-server/src/utils/errors.js.map +1 -0
- package/dist/mcp-server/src/utils/exec.d.ts +7 -0
- package/dist/mcp-server/src/utils/exec.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/exec.js +22 -0
- package/dist/mcp-server/src/utils/exec.js.map +1 -0
- package/dist/mcp-server/src/utils/ip.d.ts +6 -0
- package/dist/mcp-server/src/utils/ip.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/ip.js +33 -0
- package/dist/mcp-server/src/utils/ip.js.map +1 -0
- package/dist/mcp-server/src/utils/logger.d.ts +20 -0
- package/dist/mcp-server/src/utils/logger.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/logger.js +41 -0
- package/dist/mcp-server/src/utils/logger.js.map +1 -0
- package/dist/shared/src/contractor.types.d.ts +20 -0
- package/dist/shared/src/contractor.types.d.ts.map +1 -0
- package/dist/shared/src/contractor.types.js +3 -0
- package/dist/shared/src/contractor.types.js.map +1 -0
- package/dist/shared/src/gig.types.d.ts +32 -0
- package/dist/shared/src/gig.types.d.ts.map +1 -0
- package/dist/shared/src/gig.types.js +21 -0
- package/dist/shared/src/gig.types.js.map +1 -0
- package/dist/shared/src/index.d.ts +5 -0
- package/dist/shared/src/index.d.ts.map +1 -0
- package/dist/shared/src/index.js +21 -0
- package/dist/shared/src/index.js.map +1 -0
- package/dist/shared/src/mcp-tool.types.d.ts +45 -0
- package/dist/shared/src/mcp-tool.types.d.ts.map +1 -0
- package/dist/shared/src/mcp-tool.types.js +3 -0
- package/dist/shared/src/mcp-tool.types.js.map +1 -0
- package/dist/shared/src/platform-api.types.d.ts +73 -0
- package/dist/shared/src/platform-api.types.d.ts.map +1 -0
- package/dist/shared/src/platform-api.types.js +3 -0
- package/dist/shared/src/platform-api.types.js.map +1 -0
- package/package.json +41 -0
- package/src/bin.ts +7 -0
- package/src/cli/setup.ts +317 -0
- package/src/config/defaults.ts +21 -0
- package/src/config/env.ts +74 -0
- package/src/config/index.ts +2 -0
- package/src/context/generator.ts +71 -0
- package/src/context/index.ts +6 -0
- package/src/context/templates.ts +41 -0
- package/src/git/branch.ts +46 -0
- package/src/git/diff.ts +34 -0
- package/src/git/index.ts +4 -0
- package/src/git/merge.ts +36 -0
- package/src/git/worktree.ts +42 -0
- package/src/http-wrapper.ts +94 -0
- package/src/index.ts +32 -0
- package/src/platform-client/client.ts +93 -0
- package/src/platform-client/index.ts +4 -0
- package/src/platform-client/mock-client.ts +92 -0
- package/src/platform-client/polling.ts +53 -0
- package/src/platform-client/types.ts +9 -0
- package/src/provisioning/authorized-keys.ts +52 -0
- package/src/provisioning/cleanup.ts +106 -0
- package/src/provisioning/index.ts +13 -0
- package/src/provisioning/linux-user.ts +66 -0
- package/src/provisioning/privileged.ts +128 -0
- package/src/provisioning/ssh-config.ts +197 -0
- package/src/provisioning/tmux-session.ts +136 -0
- package/src/server.ts +111 -0
- package/src/state/gig-store.ts +56 -0
- package/src/state/index.ts +3 -0
- package/src/state/persistence.ts +42 -0
- package/src/state/types.ts +14 -0
- package/src/tools/dismiss-human.ts +103 -0
- package/src/tools/index.ts +9 -0
- package/src/tools/list-humans.ts +54 -0
- package/src/tools/message-human.ts +28 -0
- package/src/tools/schemas/dismiss-human.schema.ts +21 -0
- package/src/tools/schemas/list-humans.schema.ts +6 -0
- package/src/tools/schemas/message-human.schema.ts +8 -0
- package/src/tools/schemas/summon-human.schema.ts +19 -0
- package/src/tools/summon-human.ts +180 -0
- package/src/tunnel/client.ts +116 -0
- package/src/tunnel/index.ts +26 -0
- package/src/utils/errors.ts +64 -0
- package/src/utils/exec.ts +29 -0
- package/src/utils/ip.ts +31 -0
- package/src/utils/logger.ts +55 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Quick HTTP wrapper around the MCP tools for testing.
|
|
4
|
+
* Exposes summon_human, dismiss_human, list_humans, message_human as REST endpoints.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const express_1 = __importDefault(require("express"));
|
|
11
|
+
const env_js_1 = require("./config/env.js");
|
|
12
|
+
const gig_store_js_1 = require("./state/gig-store.js");
|
|
13
|
+
const persistence_js_1 = require("./state/persistence.js");
|
|
14
|
+
const mock_client_js_1 = require("./platform-client/mock-client.js");
|
|
15
|
+
const client_js_1 = require("./platform-client/client.js");
|
|
16
|
+
const index_js_1 = require("./tools/index.js");
|
|
17
|
+
const env = (0, env_js_1.getEnv)();
|
|
18
|
+
const gigStore = new gig_store_js_1.GigStore();
|
|
19
|
+
const persistence = new persistence_js_1.StatePersistence(env.STATE_FILE_PATH);
|
|
20
|
+
const platformClient = env.USE_MOCK_PLATFORM
|
|
21
|
+
? new mock_client_js_1.MockPlatformClient()
|
|
22
|
+
: new client_js_1.HttpPlatformClient(env.PLATFORM_API_URL, env.PLATFORM_API_KEY);
|
|
23
|
+
const deps = { platformClient, gigStore };
|
|
24
|
+
const app = (0, express_1.default)();
|
|
25
|
+
app.use(express_1.default.json());
|
|
26
|
+
app.get("/health", (_req, res) => {
|
|
27
|
+
res.json({ status: "ok", service: "human-agents-http", gigs: gigStore.list().length });
|
|
28
|
+
});
|
|
29
|
+
app.post("/summon", async (req, res) => {
|
|
30
|
+
try {
|
|
31
|
+
const result = await (0, index_js_1.summonHuman)(req.body, deps);
|
|
32
|
+
await persistence.save(gigStore);
|
|
33
|
+
res.json(result);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
res.status(500).json({ error: err.message });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
app.post("/dismiss", async (req, res) => {
|
|
40
|
+
try {
|
|
41
|
+
const result = await (0, index_js_1.dismissHuman)(req.body, deps);
|
|
42
|
+
await persistence.save(gigStore);
|
|
43
|
+
res.json(result);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
res.status(500).json({ error: err.message });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
app.get("/list", async (_req, res) => {
|
|
50
|
+
try {
|
|
51
|
+
const result = await (0, index_js_1.listHumans)(gigStore);
|
|
52
|
+
res.json(result);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
res.status(500).json({ error: err.message });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
app.post("/message", async (req, res) => {
|
|
59
|
+
try {
|
|
60
|
+
const result = await (0, index_js_1.messageHuman)(req.body, gigStore);
|
|
61
|
+
res.json(result);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
res.status(500).json({ error: err.message });
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const PORT = parseInt(process.env.HTTP_PORT ?? "9999", 10);
|
|
68
|
+
async function start() {
|
|
69
|
+
await persistence.load(gigStore);
|
|
70
|
+
app.listen(PORT, () => {
|
|
71
|
+
console.log(`Human-agents HTTP wrapper on port ${PORT}`);
|
|
72
|
+
console.log(` Mock platform: ${env.USE_MOCK_PLATFORM}`);
|
|
73
|
+
console.log(` VM IP: ${env.VM_EXTERNAL_IP}`);
|
|
74
|
+
console.log(`\nEndpoints:`);
|
|
75
|
+
console.log(` POST /summon — summon a contractor`);
|
|
76
|
+
console.log(` POST /dismiss — dismiss a contractor`);
|
|
77
|
+
console.log(` GET /list — list active contractors`);
|
|
78
|
+
console.log(` POST /message — message a contractor`);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
start().catch((err) => {
|
|
82
|
+
console.error("Failed to start:", err);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=http-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-wrapper.js","sourceRoot":"","sources":["../../../src/http-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
4
|
+
const server_js_1 = require("./server.js");
|
|
5
|
+
const logger_js_1 = require("./utils/logger.js");
|
|
6
|
+
async function main() {
|
|
7
|
+
logger_js_1.logger.info("Starting human-agents MCP server");
|
|
8
|
+
const server = await (0, server_js_1.createServer)();
|
|
9
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
10
|
+
await server.connect(transport);
|
|
11
|
+
logger_js_1.logger.info("MCP server running on stdio transport");
|
|
12
|
+
// Handle graceful shutdown
|
|
13
|
+
process.on("SIGINT", async () => {
|
|
14
|
+
logger_js_1.logger.info("Received SIGINT, shutting down");
|
|
15
|
+
await server.close();
|
|
16
|
+
process.exit(0);
|
|
17
|
+
});
|
|
18
|
+
process.on("SIGTERM", async () => {
|
|
19
|
+
logger_js_1.logger.info("Received SIGTERM, shutting down");
|
|
20
|
+
await server.close();
|
|
21
|
+
process.exit(0);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
main().catch((error) => {
|
|
25
|
+
logger_js_1.logger.error("Fatal error", { error: String(error) });
|
|
26
|
+
process.exit(1);
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;AAAA,wEAAiF;AACjF,2CAA2C;AAC3C,iDAA2C;AAE3C,KAAK,UAAU,IAAI;IACjB,kBAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAY,GAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,kBAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAErD,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,kBAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,kBAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,kBAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CreateGigRequest, CreateGigResponse, GigStatusResponse, CompleteGigRequest, CompleteGigResponse } from "./types.js";
|
|
2
|
+
export interface PlatformClient {
|
|
3
|
+
createGig(request: CreateGigRequest): Promise<CreateGigResponse>;
|
|
4
|
+
getGigStatus(gigId: string): Promise<GigStatusResponse>;
|
|
5
|
+
markReady(gigId: string, sshCommand: string): Promise<void>;
|
|
6
|
+
completeGig(request: CompleteGigRequest): Promise<CompleteGigResponse>;
|
|
7
|
+
}
|
|
8
|
+
export declare class HttpPlatformClient implements PlatformClient {
|
|
9
|
+
private http;
|
|
10
|
+
constructor(baseUrl: string, apiKey: string);
|
|
11
|
+
createGig(request: CreateGigRequest): Promise<CreateGigResponse>;
|
|
12
|
+
getGigStatus(gigId: string): Promise<GigStatusResponse>;
|
|
13
|
+
markReady(gigId: string, sshCommand: string): Promise<void>;
|
|
14
|
+
completeGig(request: CompleteGigRequest): Promise<CompleteGigResponse>;
|
|
15
|
+
private wrapError;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/platform-client/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACxE;AAED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,IAAI,CAAgB;gBAEhB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAWrC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAahE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWvD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,WAAW,CACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAgB/B,OAAO,CAAC,SAAS;CASlB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HttpPlatformClient = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const errors_js_1 = require("../utils/errors.js");
|
|
9
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
10
|
+
class HttpPlatformClient {
|
|
11
|
+
http;
|
|
12
|
+
constructor(baseUrl, apiKey) {
|
|
13
|
+
this.http = axios_1.default.create({
|
|
14
|
+
baseURL: baseUrl,
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${apiKey}`,
|
|
17
|
+
"Content-Type": "application/json",
|
|
18
|
+
},
|
|
19
|
+
timeout: 10_000,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async createGig(request) {
|
|
23
|
+
try {
|
|
24
|
+
const { data } = await this.http.post("/gigs", request);
|
|
25
|
+
logger_js_1.logger.info("Gig created on platform", { gigId: data.gigId });
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw this.wrapError("Failed to create gig", error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async getGigStatus(gigId) {
|
|
33
|
+
try {
|
|
34
|
+
const { data } = await this.http.get(`/gigs/${gigId}/status`);
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
throw this.wrapError(`Failed to get gig status: ${gigId}`, error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async markReady(gigId, sshCommand) {
|
|
42
|
+
try {
|
|
43
|
+
await this.http.post(`/gigs/${gigId}/ready`, { sshCommand });
|
|
44
|
+
logger_js_1.logger.info("Gig marked as ready", { gigId });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw this.wrapError(`Failed to mark gig ready: ${gigId}`, error);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async completeGig(request) {
|
|
51
|
+
try {
|
|
52
|
+
const { data } = await this.http.post(`/gigs/${request.gigId}/complete`, request);
|
|
53
|
+
logger_js_1.logger.info("Gig completed on platform", { gigId: request.gigId });
|
|
54
|
+
return data;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw this.wrapError(`Failed to complete gig: ${request.gigId}`, error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
wrapError(message, error) {
|
|
61
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
62
|
+
return new errors_js_1.PlatformApiError(`${message}: ${error.message}`, error.response?.status);
|
|
63
|
+
}
|
|
64
|
+
return new errors_js_1.PlatformApiError(message);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.HttpPlatformClient = HttpPlatformClient;
|
|
68
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/platform-client/client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD;AAClD,kDAAsD;AACtD,kDAA4C;AAgB5C,MAAa,kBAAkB;IACrB,IAAI,CAAgB;IAE5B,YAAY,OAAe,EAAE,MAAc;QACzC,IAAI,CAAC,IAAI,GAAG,eAAK,CAAC,MAAM,CAAC;YACvB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;YACD,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAyB;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,OAAO,EACP,OAAO,CACR,CAAC;YACF,kBAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAClC,SAAS,KAAK,SAAS,CACxB,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,SAAS,CAAC,6BAA6B,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,UAAkB;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7D,kBAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,SAAS,CAAC,6BAA6B,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAA2B;QAE3B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,SAAS,OAAO,CAAC,KAAK,WAAW,EACjC,OAAO,CACR,CAAC;YACF,kBAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,SAAS,CAClB,2BAA2B,OAAO,CAAC,KAAK,EAAE,EAC1C,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,OAAe,EAAE,KAAc;QAC/C,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,4BAAgB,CACzB,GAAG,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,EAC9B,KAAK,CAAC,QAAQ,EAAE,MAAM,CACvB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,4BAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF;AA1ED,gDA0EC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platform-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,mBAAmB,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pollForAssignment = exports.MockPlatformClient = exports.HttpPlatformClient = void 0;
|
|
4
|
+
var client_js_1 = require("./client.js");
|
|
5
|
+
Object.defineProperty(exports, "HttpPlatformClient", { enumerable: true, get: function () { return client_js_1.HttpPlatformClient; } });
|
|
6
|
+
var mock_client_js_1 = require("./mock-client.js");
|
|
7
|
+
Object.defineProperty(exports, "MockPlatformClient", { enumerable: true, get: function () { return mock_client_js_1.MockPlatformClient; } });
|
|
8
|
+
var polling_js_1 = require("./polling.js");
|
|
9
|
+
Object.defineProperty(exports, "pollForAssignment", { enumerable: true, get: function () { return polling_js_1.pollForAssignment; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/platform-client/index.ts"],"names":[],"mappings":";;;AAAA,yCAAsE;AAAxC,+GAAA,kBAAkB,OAAA;AAChD,mDAAsD;AAA7C,oHAAA,kBAAkB,OAAA;AAC3B,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PlatformClient } from "./client.js";
|
|
2
|
+
import type { CreateGigRequest, CreateGigResponse, GigStatusResponse, CompleteGigRequest, CompleteGigResponse } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* In-memory mock platform client for Phase 1 standalone testing.
|
|
5
|
+
* A "mock contractor" auto-accepts gigs after a configurable delay.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MockPlatformClient implements PlatformClient {
|
|
8
|
+
/** Delay in ms before a mock contractor auto-accepts a gig. */
|
|
9
|
+
private readonly autoAcceptDelayMs;
|
|
10
|
+
/** Mock contractor info. */
|
|
11
|
+
private readonly mockContractor;
|
|
12
|
+
private gigs;
|
|
13
|
+
private nextId;
|
|
14
|
+
constructor(
|
|
15
|
+
/** Delay in ms before a mock contractor auto-accepts a gig. */
|
|
16
|
+
autoAcceptDelayMs?: number,
|
|
17
|
+
/** Mock contractor info. */
|
|
18
|
+
mockContractor?: {
|
|
19
|
+
name: string;
|
|
20
|
+
pubkey: string;
|
|
21
|
+
rate: number;
|
|
22
|
+
});
|
|
23
|
+
createGig(request: CreateGigRequest): Promise<CreateGigResponse>;
|
|
24
|
+
getGigStatus(gigId: string): Promise<GigStatusResponse>;
|
|
25
|
+
markReady(gigId: string, sshCommand: string): Promise<void>;
|
|
26
|
+
completeGig(request: CompleteGigRequest): Promise<CompleteGigResponse>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=mock-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-client.d.ts","sourceRoot":"","sources":["../../../../src/platform-client/mock-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAKrD,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,4BAA4B;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,MAAM,CAAK;;IAGjB,+DAA+D;IAC9C,iBAAiB,SAAQ;IAC1C,4BAA4B;IACX,cAAc;;;;KAK9B;IAGG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsBhE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAevD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,WAAW,CACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;CAQhC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockPlatformClient = void 0;
|
|
4
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
5
|
+
/**
|
|
6
|
+
* In-memory mock platform client for Phase 1 standalone testing.
|
|
7
|
+
* A "mock contractor" auto-accepts gigs after a configurable delay.
|
|
8
|
+
*/
|
|
9
|
+
class MockPlatformClient {
|
|
10
|
+
autoAcceptDelayMs;
|
|
11
|
+
mockContractor;
|
|
12
|
+
gigs = new Map();
|
|
13
|
+
nextId = 1;
|
|
14
|
+
constructor(
|
|
15
|
+
/** Delay in ms before a mock contractor auto-accepts a gig. */
|
|
16
|
+
autoAcceptDelayMs = 5_000,
|
|
17
|
+
/** Mock contractor info. */
|
|
18
|
+
mockContractor = {
|
|
19
|
+
name: "mock-contractor",
|
|
20
|
+
pubkey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleMockKeyForTesting mock@test",
|
|
21
|
+
rate: 50,
|
|
22
|
+
}) {
|
|
23
|
+
this.autoAcceptDelayMs = autoAcceptDelayMs;
|
|
24
|
+
this.mockContractor = mockContractor;
|
|
25
|
+
}
|
|
26
|
+
async createGig(request) {
|
|
27
|
+
const id = `mock-gig-${this.nextId++}`;
|
|
28
|
+
const gig = { id, status: "OPEN" };
|
|
29
|
+
this.gigs.set(id, gig);
|
|
30
|
+
// Auto-accept after delay
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
const g = this.gigs.get(id);
|
|
33
|
+
if (g && g.status === "OPEN") {
|
|
34
|
+
g.status = "ASSIGNED";
|
|
35
|
+
g.assignedAt = Date.now();
|
|
36
|
+
logger_js_1.logger.info("[MOCK] Contractor auto-accepted gig", { gigId: id });
|
|
37
|
+
}
|
|
38
|
+
}, this.autoAcceptDelayMs);
|
|
39
|
+
logger_js_1.logger.info("[MOCK] Gig created", {
|
|
40
|
+
gigId: id,
|
|
41
|
+
reason: request.reason,
|
|
42
|
+
});
|
|
43
|
+
return { gigId: id, status: "OPEN" };
|
|
44
|
+
}
|
|
45
|
+
async getGigStatus(gigId) {
|
|
46
|
+
const gig = this.gigs.get(gigId);
|
|
47
|
+
if (!gig) {
|
|
48
|
+
return { gigId, status: "CANCELLED" };
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
gigId,
|
|
52
|
+
status: gig.status,
|
|
53
|
+
contractor: gig.status === "ASSIGNED" || gig.status === "IN_PROGRESS"
|
|
54
|
+
? this.mockContractor
|
|
55
|
+
: undefined,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async markReady(gigId, sshCommand) {
|
|
59
|
+
const gig = this.gigs.get(gigId);
|
|
60
|
+
if (gig) {
|
|
61
|
+
gig.status = "IN_PROGRESS";
|
|
62
|
+
logger_js_1.logger.info("[MOCK] Gig marked ready", { gigId, sshCommand });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async completeGig(request) {
|
|
66
|
+
const gig = this.gigs.get(request.gigId);
|
|
67
|
+
if (gig) {
|
|
68
|
+
gig.status = "COMPLETED";
|
|
69
|
+
}
|
|
70
|
+
logger_js_1.logger.info("[MOCK] Gig completed", { gigId: request.gigId });
|
|
71
|
+
return { gigId: request.gigId, status: "COMPLETED" };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.MockPlatformClient = MockPlatformClient;
|
|
75
|
+
//# sourceMappingURL=mock-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-client.js","sourceRoot":"","sources":["../../../../src/platform-client/mock-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PlatformClient } from "./client.js";
|
|
2
|
+
import type { GigStatusResponse } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Poll GET /gigs/{id}/status until a contractor is assigned.
|
|
5
|
+
* Returns the status response with contractor info.
|
|
6
|
+
* Throws PlatformApiError if polling times out.
|
|
7
|
+
*/
|
|
8
|
+
export declare function pollForAssignment(client: PlatformClient, gigId: string): Promise<GigStatusResponse>;
|
|
9
|
+
//# sourceMappingURL=polling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../../../src/platform-client/polling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAkC5B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pollForAssignment = pollForAssignment;
|
|
4
|
+
const errors_js_1 = require("../utils/errors.js");
|
|
5
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
6
|
+
const env_js_1 = require("../config/env.js");
|
|
7
|
+
/**
|
|
8
|
+
* Poll GET /gigs/{id}/status until a contractor is assigned.
|
|
9
|
+
* Returns the status response with contractor info.
|
|
10
|
+
* Throws PlatformApiError if polling times out.
|
|
11
|
+
*/
|
|
12
|
+
async function pollForAssignment(client, gigId) {
|
|
13
|
+
const env = (0, env_js_1.getEnv)();
|
|
14
|
+
const intervalMs = env.POLL_INTERVAL_MS;
|
|
15
|
+
const timeoutMs = env.POLL_TIMEOUT_MS;
|
|
16
|
+
const deadline = Date.now() + timeoutMs;
|
|
17
|
+
while (Date.now() < deadline) {
|
|
18
|
+
const status = await client.getGigStatus(gigId);
|
|
19
|
+
// Both the real API (Prisma enums) and the mock client return
|
|
20
|
+
// uppercase values per `human-layer/shared/src/gig.types.ts`.
|
|
21
|
+
if ((status.status === "ASSIGNED" || status.status === "IN_PROGRESS") &&
|
|
22
|
+
status.contractor) {
|
|
23
|
+
logger_js_1.logger.info("Contractor assigned", {
|
|
24
|
+
gigId,
|
|
25
|
+
contractorName: status.contractor.name,
|
|
26
|
+
});
|
|
27
|
+
return status;
|
|
28
|
+
}
|
|
29
|
+
if (status.status === "CANCELLED") {
|
|
30
|
+
throw new errors_js_1.PlatformApiError(`Gig was cancelled: ${gigId}`);
|
|
31
|
+
}
|
|
32
|
+
logger_js_1.logger.debug("Polling for contractor assignment...", { gigId });
|
|
33
|
+
await sleep(intervalMs);
|
|
34
|
+
}
|
|
35
|
+
throw new errors_js_1.PlatformApiError(`Timed out waiting for contractor assignment after ${timeoutMs}ms`);
|
|
36
|
+
}
|
|
37
|
+
function sleep(ms) {
|
|
38
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=polling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.js","sourceRoot":"","sources":["../../../../src/platform-client/polling.ts"],"names":[],"mappings":";;AAWA,8CAqCC;AA9CD,kDAAsD;AACtD,kDAA4C;AAC5C,6CAA0C;AAE1C;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CACrC,MAAsB,EACtB,KAAa;IAEb,MAAM,GAAG,GAAG,IAAA,eAAM,GAAE,CAAC;IACrB,MAAM,UAAU,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACxC,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhD,8DAA8D;QAC9D,8DAA8D;QAC9D,IACE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC;YACjE,MAAM,CAAC,UAAU,EACjB,CAAC;YACD,kBAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACjC,KAAK;gBACL,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;aACvC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,4BAAgB,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,kBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,4BAAgB,CACxB,qDAAqD,SAAS,IAAI,CACnE,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platform-client/types.ts"],"names":[],"mappings":"AACA,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,2CAA2C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platform-client/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write a public key to a user's authorized_keys file.
|
|
3
|
+
*
|
|
4
|
+
* Goes through the privileged helpers because the per-contractor home
|
|
5
|
+
* directory is owned by root immediately after `useradd`. After
|
|
6
|
+
* writing the file (as root) we chown it to the contractor so sshd
|
|
7
|
+
* accepts it.
|
|
8
|
+
*/
|
|
9
|
+
export declare function writeAuthorizedKey(username: string, pubkey: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Remove the authorized_keys file for a user.
|
|
12
|
+
*/
|
|
13
|
+
export declare function removeAuthorizedKey(username: string): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=authorized-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorized-keys.d.ts","sourceRoot":"","sources":["../../../../src/provisioning/authorized-keys.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAazE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeAuthorizedKey = writeAuthorizedKey;
|
|
4
|
+
exports.removeAuthorizedKey = removeAuthorizedKey;
|
|
5
|
+
const privileged_js_1 = require("./privileged.js");
|
|
6
|
+
const errors_js_1 = require("../utils/errors.js");
|
|
7
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
8
|
+
/**
|
|
9
|
+
* Write a public key to a user's authorized_keys file.
|
|
10
|
+
*
|
|
11
|
+
* Goes through the privileged helpers because the per-contractor home
|
|
12
|
+
* directory is owned by root immediately after `useradd`. After
|
|
13
|
+
* writing the file (as root) we chown it to the contractor so sshd
|
|
14
|
+
* accepts it.
|
|
15
|
+
*/
|
|
16
|
+
async function writeAuthorizedKey(username, pubkey) {
|
|
17
|
+
const keyPath = `/home/${username}/.ssh/authorized_keys`;
|
|
18
|
+
try {
|
|
19
|
+
// Validate pubkey format (basic check)
|
|
20
|
+
if (!pubkey.startsWith("ssh-") && !pubkey.startsWith("ecdsa-")) {
|
|
21
|
+
throw new Error(`Invalid public key format: ${pubkey.slice(0, 20)}...`);
|
|
22
|
+
}
|
|
23
|
+
await (0, privileged_js_1.writePrivilegedFile)(keyPath, pubkey.trim() + "\n", 0o600);
|
|
24
|
+
await (0, privileged_js_1.chownPrivileged)(`${username}:${username}`, keyPath);
|
|
25
|
+
logger_js_1.logger.info("Authorized key written", { user: username });
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new errors_js_1.ProvisioningError(`Failed to write authorized key for ${username}: ${error}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Remove the authorized_keys file for a user.
|
|
33
|
+
*/
|
|
34
|
+
async function removeAuthorizedKey(username) {
|
|
35
|
+
const keyPath = `/home/${username}/.ssh/authorized_keys`;
|
|
36
|
+
try {
|
|
37
|
+
await (0, privileged_js_1.writePrivilegedFile)(keyPath, "", 0o600);
|
|
38
|
+
logger_js_1.logger.info("Authorized key removed", { user: username });
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// File might not exist if provisioning was partial
|
|
42
|
+
logger_js_1.logger.warn("Failed to remove authorized key (may not exist)", {
|
|
43
|
+
user: username,
|
|
44
|
+
error: String(error),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=authorized-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorized-keys.js","sourceRoot":"","sources":["../../../../src/provisioning/authorized-keys.ts"],"names":[],"mappings":";;AAYA,gDAqBC;AAKD,kDAaC;AAnDD,mDAAuE;AACvE,kDAAuD;AACvD,kDAA4C;AAE5C;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,MAAc;IAEd,MAAM,OAAO,GAAG,SAAS,QAAQ,uBAAuB,CAAC;IAEzD,IAAI,CAAC;QACH,uCAAuC;QACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,IAAA,mCAAmB,EAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,IAAA,+BAAe,EAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QAE1D,kBAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,6BAAiB,CACzB,sCAAsC,QAAQ,KAAK,KAAK,EAAE,CAC3D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,OAAO,GAAG,SAAS,QAAQ,uBAAuB,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,IAAA,mCAAmB,EAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9C,kBAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,kBAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;YAC7D,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface CleanupTarget {
|
|
2
|
+
username: string;
|
|
3
|
+
tmuxSession: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Aggressive cleanup sequence for dismissing a contractor.
|
|
7
|
+
* Each step is independent and wrapped in try/catch — partial failures
|
|
8
|
+
* don't prevent the remaining steps from executing.
|
|
9
|
+
*
|
|
10
|
+
* Order matters:
|
|
11
|
+
* 1. Kill tmux session (with warning if connected)
|
|
12
|
+
* 2. Kill all user processes
|
|
13
|
+
* 3. Remove SSH pubkey
|
|
14
|
+
* 4. Remove ForceCommand from sshd_config
|
|
15
|
+
* 5. Reload sshd (happens inside removeForceCommand)
|
|
16
|
+
* 6. Lock the account
|
|
17
|
+
*/
|
|
18
|
+
export declare function cleanupContractor(target: CleanupTarget): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../../src/provisioning/cleanup.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
|