@ai2aim.ai/hivemind-sdk 1.0.1
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/README.md +655 -0
- package/dist/cli-config.d.ts +12 -0
- package/dist/cli-config.d.ts.map +1 -0
- package/dist/cli-config.js +93 -0
- package/dist/cli-config.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +309 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +576 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +871 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +553 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1,93 @@
|
|
|
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.RC_FILENAME_EXPORT = void 0;
|
|
7
|
+
exports.loadCliConfig = loadCliConfig;
|
|
8
|
+
exports.maskConfig = maskConfig;
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const RC_FILENAME = ".hivemindrc.json";
|
|
12
|
+
const ENV_PREFIX = "HIVEMIND_";
|
|
13
|
+
function env(key) {
|
|
14
|
+
return process.env[`${ENV_PREFIX}${key}`] ?? process.env[key];
|
|
15
|
+
}
|
|
16
|
+
function envBool(key) {
|
|
17
|
+
const v = env(key);
|
|
18
|
+
if (v === undefined)
|
|
19
|
+
return undefined;
|
|
20
|
+
return v === "1" || v.toLowerCase() === "true" || v === "yes";
|
|
21
|
+
}
|
|
22
|
+
function envInt(key) {
|
|
23
|
+
const v = env(key);
|
|
24
|
+
if (v === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
const n = parseInt(v, 10);
|
|
27
|
+
return Number.isNaN(n) ? undefined : n;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load config from env (HIVEMIND_*) and optional .hivemindrc.json in cwd.
|
|
31
|
+
* Env overrides file. Returns null if baseUrl or iapClientId is missing (all endpoints are IAP-protected).
|
|
32
|
+
*/
|
|
33
|
+
function loadCliConfig(cwd = process.cwd()) {
|
|
34
|
+
const rcPath = node_path_1.default.join(cwd, RC_FILENAME);
|
|
35
|
+
let fileConfig = {};
|
|
36
|
+
if (node_fs_1.default.existsSync(rcPath)) {
|
|
37
|
+
try {
|
|
38
|
+
const raw = node_fs_1.default.readFileSync(rcPath, "utf-8");
|
|
39
|
+
fileConfig = JSON.parse(raw);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// ignore invalid json
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const baseUrl = env("BASE_URL") ??
|
|
46
|
+
fileConfig.baseUrl;
|
|
47
|
+
const iapClientId = (env("IAP_CLIENT_ID") ?? process.env.IAP_CLIENT_ID) ??
|
|
48
|
+
fileConfig.iapClientId;
|
|
49
|
+
if (!baseUrl || !iapClientId)
|
|
50
|
+
return null;
|
|
51
|
+
const config = {
|
|
52
|
+
baseUrl,
|
|
53
|
+
iapClientId,
|
|
54
|
+
apiPrefix: env("API_PREFIX") ??
|
|
55
|
+
fileConfig.apiPrefix ??
|
|
56
|
+
"/v1",
|
|
57
|
+
apiKey: env("API_KEY") ??
|
|
58
|
+
fileConfig.apiKey,
|
|
59
|
+
adminKey: env("ADMIN_KEY") ??
|
|
60
|
+
fileConfig.adminKey,
|
|
61
|
+
webhookSecret: env("WEBHOOK_SECRET") ??
|
|
62
|
+
fileConfig.webhookSecret,
|
|
63
|
+
iapServiceAccountKeyPath: (env("IAP_SA_KEY_PATH") ?? process.env.GOOGLE_SA_KEY_PATH) ??
|
|
64
|
+
fileConfig.iapServiceAccountKeyPath,
|
|
65
|
+
employeeId: env("EMPLOYEE_ID") ??
|
|
66
|
+
fileConfig.employeeId,
|
|
67
|
+
timeoutMs: envInt("TIMEOUT_MS") ??
|
|
68
|
+
fileConfig.timeoutMs ??
|
|
69
|
+
30_000,
|
|
70
|
+
insecure: envBool("INSECURE") ?? fileConfig.insecure ?? false,
|
|
71
|
+
};
|
|
72
|
+
return config;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Return config with secrets masked for display.
|
|
76
|
+
*/
|
|
77
|
+
function maskConfig(config) {
|
|
78
|
+
const mask = (s) => s ? (s.length > 8 ? s.slice(0, 4) + "***" + s.slice(-2) : "***") : undefined;
|
|
79
|
+
return {
|
|
80
|
+
baseUrl: config.baseUrl,
|
|
81
|
+
apiPrefix: config.apiPrefix,
|
|
82
|
+
apiKey: config.apiKey ? mask(config.apiKey) : undefined,
|
|
83
|
+
adminKey: config.adminKey ? "[set]" : undefined,
|
|
84
|
+
webhookSecret: config.webhookSecret ? "[set]" : undefined,
|
|
85
|
+
iapClientId: config.iapClientId ? mask(config.iapClientId) : undefined,
|
|
86
|
+
iapServiceAccountKeyPath: config.iapServiceAccountKeyPath ?? undefined,
|
|
87
|
+
employeeId: config.employeeId,
|
|
88
|
+
timeoutMs: config.timeoutMs,
|
|
89
|
+
insecure: config.insecure,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
exports.RC_FILENAME_EXPORT = RC_FILENAME;
|
|
93
|
+
//# sourceMappingURL=cli-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-config.js","sourceRoot":"","sources":["../src/cli-config.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const client_1 = require("./client");
|
|
11
|
+
const cli_config_1 = require("./cli-config");
|
|
12
|
+
const program = new commander_1.Command();
|
|
13
|
+
program
|
|
14
|
+
.name("hivemind")
|
|
15
|
+
.description("CLI for the Hivemind API")
|
|
16
|
+
.version("1.0.0");
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// init
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
program
|
|
21
|
+
.command("init")
|
|
22
|
+
.description("Initialize Hivemind config in the current directory")
|
|
23
|
+
.option("-d, --dir <path>", "Directory to create config in", process.cwd())
|
|
24
|
+
.option("--env-only", "Only create .env.example, no .hivemindrc.json")
|
|
25
|
+
.option("--rc-only", "Only create .hivemindrc.json, no .env.example")
|
|
26
|
+
.action((opts) => {
|
|
27
|
+
const dir = node_path_1.default.resolve(opts.dir);
|
|
28
|
+
if (!node_fs_1.default.existsSync(dir)) {
|
|
29
|
+
console.error("Error: Directory does not exist:", dir);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
const rcPath = node_path_1.default.join(dir, cli_config_1.RC_FILENAME_EXPORT);
|
|
33
|
+
const envExamplePath = node_path_1.default.join(dir, ".env.example");
|
|
34
|
+
const rcTemplate = {
|
|
35
|
+
baseUrl: "https://your-api-url.com",
|
|
36
|
+
iapClientId: "xxx.apps.googleusercontent.com",
|
|
37
|
+
apiPrefix: "/v1",
|
|
38
|
+
apiKey: "vtx_org_xxx",
|
|
39
|
+
// adminKey: "your-admin-key",
|
|
40
|
+
// iapServiceAccountKeyPath: "./sa-key.json",
|
|
41
|
+
// insecure: false,
|
|
42
|
+
// timeoutMs: 30000,
|
|
43
|
+
};
|
|
44
|
+
if (!opts.envOnly) {
|
|
45
|
+
if (node_fs_1.default.existsSync(rcPath)) {
|
|
46
|
+
console.log("Exists:", rcPath, "(skipped)");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
node_fs_1.default.writeFileSync(rcPath, JSON.stringify(rcTemplate, null, 2), "utf-8");
|
|
50
|
+
console.log("Created:", rcPath);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!opts.rcOnly) {
|
|
54
|
+
const envLines = [
|
|
55
|
+
"# Hivemind API (all endpoints are IAP-protected)",
|
|
56
|
+
"HIVEMIND_BASE_URL=https://your-api-url.com",
|
|
57
|
+
"IAP_CLIENT_ID=xxx.apps.googleusercontent.com",
|
|
58
|
+
"HIVEMIND_API_KEY=vtx_org_xxx",
|
|
59
|
+
"# HIVEMIND_ADMIN_KEY=your-admin-key",
|
|
60
|
+
"# HIVEMIND_API_PREFIX=/v1",
|
|
61
|
+
"# GOOGLE_SA_KEY_PATH=./sa-key.json",
|
|
62
|
+
"# HIVEMIND_INSECURE=false",
|
|
63
|
+
"# HIVEMIND_TIMEOUT_MS=30000",
|
|
64
|
+
].join("\n");
|
|
65
|
+
if (node_fs_1.default.existsSync(envExamplePath)) {
|
|
66
|
+
console.log("Exists:", envExamplePath, "(skipped)");
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
node_fs_1.default.writeFileSync(envExamplePath, envLines, "utf-8");
|
|
70
|
+
console.log("Created:", envExamplePath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
console.log("\nNext: set HIVEMIND_BASE_URL and IAP_CLIENT_ID (and HIVEMIND_API_KEY for org calls), then run hivemind health");
|
|
74
|
+
});
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// config
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
program
|
|
79
|
+
.command("config")
|
|
80
|
+
.description("Show resolved config (secrets masked)")
|
|
81
|
+
.option("-d, --dir <path>", "Directory to look for .hivemindrc.json", process.cwd())
|
|
82
|
+
.action((opts) => {
|
|
83
|
+
const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
84
|
+
if (!config) {
|
|
85
|
+
console.error("No config found. Set HIVEMIND_BASE_URL and IAP_CLIENT_ID (or run hivemind init and edit .hivemindrc.json).");
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
console.log(JSON.stringify((0, cli_config_1.maskConfig)(config), null, 2));
|
|
89
|
+
});
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// health
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
program
|
|
94
|
+
.command("health")
|
|
95
|
+
.description("Call the API health endpoint")
|
|
96
|
+
.option("-d, --dir <path>", "Directory to look for config", process.cwd())
|
|
97
|
+
.option("-u, --url <url>", "Override base URL")
|
|
98
|
+
.action(async (opts) => {
|
|
99
|
+
let config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
100
|
+
if (opts.url) {
|
|
101
|
+
if (config) {
|
|
102
|
+
config = { ...config, baseUrl: opts.url };
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const iapId = process.env.IAP_CLIENT_ID ?? process.env.HIVEMIND_IAP_CLIENT_ID;
|
|
106
|
+
if (!iapId) {
|
|
107
|
+
console.error("IAP_CLIENT_ID is required (all endpoints are IAP-protected).");
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
config = { baseUrl: opts.url, iapClientId: iapId };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!config?.baseUrl || !config?.iapClientId) {
|
|
114
|
+
console.error("Set HIVEMIND_BASE_URL and IAP_CLIENT_ID, or use --url with IAP_CLIENT_ID in env.");
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
const client = new client_1.HivemindClient(config);
|
|
118
|
+
try {
|
|
119
|
+
const result = await client.health();
|
|
120
|
+
console.log(JSON.stringify(result, null, 2));
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (err instanceof client_1.HivemindError) {
|
|
124
|
+
console.error("Health check failed:", err.statusCode, err.detail);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.error("Health check failed:", err);
|
|
128
|
+
}
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// helper
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
const helper = program
|
|
136
|
+
.command("helper")
|
|
137
|
+
.description("Helper utilities for config and connection");
|
|
138
|
+
helper
|
|
139
|
+
.command("validate")
|
|
140
|
+
.description("Validate config and optionally test connection")
|
|
141
|
+
.option("-d, --dir <path>", "Directory for config", process.cwd())
|
|
142
|
+
.option("--skip-ping", "Do not call health endpoint")
|
|
143
|
+
.action(async (opts) => {
|
|
144
|
+
const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
145
|
+
if (!config) {
|
|
146
|
+
console.error("No config. Run hivemind init and set HIVEMIND_BASE_URL and IAP_CLIENT_ID.");
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
console.log("Config: baseUrl =", config.baseUrl, "apiKey =", config.apiKey ? "[set]" : "[not set]");
|
|
150
|
+
if (!opts.skipPing) {
|
|
151
|
+
const client = new client_1.HivemindClient(config);
|
|
152
|
+
try {
|
|
153
|
+
const result = await client.health();
|
|
154
|
+
console.log("Connection OK:", result.service, result.status);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
console.error("Connection failed:", err instanceof Error ? err.message : err);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log("Skipped connection test (--skip-ping)");
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
helper
|
|
166
|
+
.command("env")
|
|
167
|
+
.description("Print env var template for copy-paste")
|
|
168
|
+
.action(() => {
|
|
169
|
+
const lines = [
|
|
170
|
+
"export HIVEMIND_BASE_URL=https://your-api-url.com",
|
|
171
|
+
"export HIVEMIND_API_KEY=vtx_org_xxx",
|
|
172
|
+
"# export HIVEMIND_ADMIN_KEY=your-admin-key",
|
|
173
|
+
"# export IAP_CLIENT_ID=xxx.apps.googleusercontent.com",
|
|
174
|
+
"# export GOOGLE_SA_KEY_PATH=./sa-key.json",
|
|
175
|
+
"# export HIVEMIND_INSECURE=false",
|
|
176
|
+
];
|
|
177
|
+
console.log(lines.join("\n"));
|
|
178
|
+
});
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
// query (quick RAG query from CLI)
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
program
|
|
183
|
+
.command("query <org_id> <question>")
|
|
184
|
+
.description("Run a RAG query (requires API key)")
|
|
185
|
+
.option("-d, --dir <path>", "Directory for config", process.cwd())
|
|
186
|
+
.action(async (orgId, question, opts) => {
|
|
187
|
+
const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
188
|
+
if (!config?.baseUrl) {
|
|
189
|
+
console.error("No config. Set HIVEMIND_BASE_URL, IAP_CLIENT_ID, and HIVEMIND_API_KEY for query.");
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
if (!config.apiKey) {
|
|
193
|
+
console.error("HIVEMIND_API_KEY required for query.");
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
const client = new client_1.HivemindClient(config);
|
|
197
|
+
try {
|
|
198
|
+
const result = await client.query(orgId, { query: question });
|
|
199
|
+
console.log(result.answer ?? JSON.stringify(result, null, 2));
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
if (err instanceof client_1.HivemindError) {
|
|
203
|
+
console.error("Query failed:", err.statusCode, err.detail);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
console.error("Query failed:", err);
|
|
207
|
+
}
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
// org (admin: create org from CLI)
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
program
|
|
215
|
+
.command("org:create <org_id> <name>")
|
|
216
|
+
.description("Create an organization (admin key required)")
|
|
217
|
+
.option("-d, --dir <path>", "Directory for config", process.cwd())
|
|
218
|
+
.option("-t, --tier <tier>", "Tier: free | standard | premium | enterprise", "standard")
|
|
219
|
+
.action(async (orgId, name, opts) => {
|
|
220
|
+
const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
221
|
+
if (!config?.baseUrl || !config.adminKey) {
|
|
222
|
+
console.error("Set HIVEMIND_BASE_URL, IAP_CLIENT_ID, and HIVEMIND_ADMIN_KEY (or adminKey in .hivemindrc.json).");
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
const client = new client_1.HivemindClient(config);
|
|
226
|
+
try {
|
|
227
|
+
const result = await client.createOrganization({
|
|
228
|
+
org_id: orgId,
|
|
229
|
+
name,
|
|
230
|
+
tier: opts.tier,
|
|
231
|
+
});
|
|
232
|
+
console.log("Organization created.");
|
|
233
|
+
console.log("API Key (save securely):", result.api_key);
|
|
234
|
+
console.log(JSON.stringify(result.organization, null, 2));
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
if (err instanceof client_1.HivemindError) {
|
|
238
|
+
console.error("Create failed:", err.statusCode, err.detail);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
console.error("Create failed:", err);
|
|
242
|
+
}
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// scrape
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
program
|
|
250
|
+
.command("scrape <urls...>")
|
|
251
|
+
.description("Submit URLs to scrape and optionally wait for results")
|
|
252
|
+
.option("-d, --dir <path>", "Directory for config", process.cwd())
|
|
253
|
+
.option("--wait", "Wait for scrape to complete and print results")
|
|
254
|
+
.option("--timeout <ms>", "Max wait time in ms when using --wait", "120000")
|
|
255
|
+
.action(async (urls, opts) => {
|
|
256
|
+
const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
257
|
+
if (!config?.baseUrl) {
|
|
258
|
+
console.error("No config. Set HIVEMIND_BASE_URL and IAP_CLIENT_ID.");
|
|
259
|
+
process.exit(1);
|
|
260
|
+
}
|
|
261
|
+
const client = new client_1.HivemindClient(config);
|
|
262
|
+
try {
|
|
263
|
+
if (opts.wait) {
|
|
264
|
+
const result = await client.scrapeAndWait(urls, 2000, parseInt(opts.timeout, 10));
|
|
265
|
+
console.log(JSON.stringify(result, null, 2));
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
const result = await client.scrape({ urls });
|
|
269
|
+
console.log("Task ID:", result.task_id, "Status:", result.status);
|
|
270
|
+
console.log("Check: hivemind scrape:status", result.task_id);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
if (err instanceof client_1.HivemindError) {
|
|
275
|
+
console.error("Scrape failed:", err.statusCode, err.detail);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
console.error("Scrape failed:", err);
|
|
279
|
+
}
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
program
|
|
284
|
+
.command("scrape:status <task_id>")
|
|
285
|
+
.description("Get scraping task status and result")
|
|
286
|
+
.option("-d, --dir <path>", "Directory for config", process.cwd())
|
|
287
|
+
.action(async (taskId, opts) => {
|
|
288
|
+
const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
|
|
289
|
+
if (!config?.baseUrl) {
|
|
290
|
+
console.error("No config. Set HIVEMIND_BASE_URL and IAP_CLIENT_ID.");
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
const client = new client_1.HivemindClient(config);
|
|
294
|
+
try {
|
|
295
|
+
const result = await client.getScrapeStatus(taskId);
|
|
296
|
+
console.log(JSON.stringify(result, null, 2));
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
if (err instanceof client_1.HivemindError) {
|
|
300
|
+
console.error("Status failed:", err.statusCode, err.detail);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
console.error("Status failed:", err);
|
|
304
|
+
}
|
|
305
|
+
process.exit(1);
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
program.parse();
|
|
309
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|