@agi-ventures-canada/hackathon-cli 0.1.5 → 0.1.7
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/_chunks/activity.mjs +82 -0
- package/dist/_chunks/activity.mjs.map +1 -0
- package/dist/_chunks/constants.mjs +2 -2
- package/dist/_chunks/constants.mjs.map +1 -1
- package/dist/_chunks/update-check.mjs +2 -2
- package/dist/_chunks/update-check.mjs.map +1 -1
- package/dist/cli.mjs +7 -1
- package/dist/cli.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { i as formatTable, n as formatJson } from "../cli.mjs";
|
|
2
|
+
import { t as resolveHackathonId } from "./resolve.mjs";
|
|
3
|
+
//#region src/commands/hackathons/activity.ts
|
|
4
|
+
function parseArgs(args) {
|
|
5
|
+
const options = {};
|
|
6
|
+
for (let i = 0; i < args.length; i++) switch (args[i]) {
|
|
7
|
+
case "--json":
|
|
8
|
+
options.json = true;
|
|
9
|
+
break;
|
|
10
|
+
case "--limit":
|
|
11
|
+
options.limit = parseInt(args[++i]);
|
|
12
|
+
break;
|
|
13
|
+
case "--offset":
|
|
14
|
+
options.offset = parseInt(args[++i]);
|
|
15
|
+
break;
|
|
16
|
+
case "--action":
|
|
17
|
+
options.action = args[++i];
|
|
18
|
+
break;
|
|
19
|
+
case "--resource-type":
|
|
20
|
+
options.resourceType = args[++i];
|
|
21
|
+
break;
|
|
22
|
+
case "--since":
|
|
23
|
+
options.since = args[++i];
|
|
24
|
+
break;
|
|
25
|
+
case "--until":
|
|
26
|
+
options.until = args[++i];
|
|
27
|
+
break;
|
|
28
|
+
case "--sort":
|
|
29
|
+
options.sort = args[++i];
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
return options;
|
|
33
|
+
}
|
|
34
|
+
async function runHackathonsActivity(client, idOrSlug, args) {
|
|
35
|
+
if (!idOrSlug) {
|
|
36
|
+
console.error("Usage: hackathon events activity <id-or-slug> [--limit N] [--offset N] [--action filter] [--resource-type type] [--since ISO] [--until ISO] [--sort asc|desc]");
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const options = parseArgs(args);
|
|
40
|
+
const id = await resolveHackathonId(client, idOrSlug);
|
|
41
|
+
const params = new URLSearchParams();
|
|
42
|
+
if (options.limit) params.set("limit", String(options.limit));
|
|
43
|
+
if (options.offset) params.set("offset", String(options.offset));
|
|
44
|
+
if (options.action) params.set("action", options.action);
|
|
45
|
+
if (options.resourceType) params.set("resource_type", options.resourceType);
|
|
46
|
+
if (options.since) params.set("since", options.since);
|
|
47
|
+
if (options.until) params.set("until", options.until);
|
|
48
|
+
if (options.sort) params.set("sort", options.sort);
|
|
49
|
+
const qs = params.toString();
|
|
50
|
+
const data = await client.get(`/api/v1/hackathons/${id}/activity${qs ? `?${qs}` : ""}`);
|
|
51
|
+
if (options.json) {
|
|
52
|
+
console.log(formatJson(data));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!data.logs?.length) {
|
|
56
|
+
console.log("No activity recorded for this event.");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
console.log(`${data.total} total events\n`);
|
|
60
|
+
console.log(formatTable(data.logs, [
|
|
61
|
+
{
|
|
62
|
+
key: "action",
|
|
63
|
+
label: "Action"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: "resourceType",
|
|
67
|
+
label: "Resource"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: "actorType",
|
|
71
|
+
label: "Actor"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: "createdAt",
|
|
75
|
+
label: "Time"
|
|
76
|
+
}
|
|
77
|
+
]));
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
export { runHackathonsActivity };
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=activity.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.mjs","names":[],"sources":["../../src/commands/hackathons/activity.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\ntype ActivityLog = {\n id: string\n action: string\n resourceType: string\n resourceId: string | null\n actorType: string\n metadata: Record<string, unknown> | null\n createdAt: string\n}\n\ntype ActivityResponse = {\n logs: ActivityLog[]\n total: number\n}\n\ntype ActivityOptions = {\n json?: boolean\n limit?: number\n offset?: number\n action?: string\n resourceType?: string\n since?: string\n until?: string\n sort?: string\n}\n\nfunction parseArgs(args: string[]): ActivityOptions {\n const options: ActivityOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--json\":\n options.json = true\n break\n case \"--limit\":\n options.limit = parseInt(args[++i])\n break\n case \"--offset\":\n options.offset = parseInt(args[++i])\n break\n case \"--action\":\n options.action = args[++i]\n break\n case \"--resource-type\":\n options.resourceType = args[++i]\n break\n case \"--since\":\n options.since = args[++i]\n break\n case \"--until\":\n options.until = args[++i]\n break\n case \"--sort\":\n options.sort = args[++i]\n break\n }\n }\n return options\n}\n\nexport async function runHackathonsActivity(\n client: OatmealClient,\n idOrSlug: string,\n args: string[]\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage: hackathon events activity <id-or-slug> [--limit N] [--offset N] [--action filter] [--resource-type type] [--since ISO] [--until ISO] [--sort asc|desc]\")\n process.exit(1)\n }\n\n const options = parseArgs(args)\n const id = await resolveHackathonId(client, idOrSlug)\n\n const params = new URLSearchParams()\n if (options.limit) params.set(\"limit\", String(options.limit))\n if (options.offset) params.set(\"offset\", String(options.offset))\n if (options.action) params.set(\"action\", options.action)\n if (options.resourceType) params.set(\"resource_type\", options.resourceType)\n if (options.since) params.set(\"since\", options.since)\n if (options.until) params.set(\"until\", options.until)\n if (options.sort) params.set(\"sort\", options.sort)\n\n const qs = params.toString()\n const data = await client.get<ActivityResponse>(`/api/v1/hackathons/${id}/activity${qs ? `?${qs}` : \"\"}`)\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.logs?.length) {\n console.log(\"No activity recorded for this event.\")\n return\n }\n\n console.log(`${data.total} total events\\n`)\n console.log(\n formatTable(data.logs, [\n { key: \"action\", label: \"Action\" },\n { key: \"resourceType\", label: \"Resource\" },\n { key: \"actorType\", label: \"Actor\" },\n { key: \"createdAt\", label: \"Time\" },\n ])\n )\n}\n"],"mappings":";;;AA8BA,SAAS,UAAU,MAAiC;CAClD,MAAM,UAA2B,EAAE;AACnC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO;AACf;EACF,KAAK;AACH,WAAQ,QAAQ,SAAS,KAAK,EAAE,GAAG;AACnC;EACF,KAAK;AACH,WAAQ,SAAS,SAAS,KAAK,EAAE,GAAG;AACpC;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE;AACxB;EACF,KAAK;AACH,WAAQ,eAAe,KAAK,EAAE;AAC9B;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;;AAGN,QAAO;;AAGT,eAAsB,sBACpB,QACA,UACA,MACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,MAAM,gKAAgK;AAC9K,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,UAAU,KAAK;CAC/B,MAAM,KAAK,MAAM,mBAAmB,QAAQ,SAAS;CAErD,MAAM,SAAS,IAAI,iBAAiB;AACpC,KAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;AAC7D,KAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,OAAO,QAAQ,OAAO,CAAC;AAChE,KAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO;AACxD,KAAI,QAAQ,aAAc,QAAO,IAAI,iBAAiB,QAAQ,aAAa;AAC3E,KAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM;AACrD,KAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM;AACrD,KAAI,QAAQ,KAAM,QAAO,IAAI,QAAQ,QAAQ,KAAK;CAElD,MAAM,KAAK,OAAO,UAAU;CAC5B,MAAM,OAAO,MAAM,OAAO,IAAsB,sBAAsB,GAAG,WAAW,KAAK,IAAI,OAAO,KAAK;AAEzG,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,MAAM,QAAQ;AACtB,UAAQ,IAAI,uCAAuC;AACnD;;AAGF,SAAQ,IAAI,GAAG,KAAK,MAAM,iBAAiB;AAC3C,SAAQ,IACN,YAAY,KAAK,MAAM;EACrB;GAAE,KAAK;GAAU,OAAO;GAAU;EAClC;GAAE,KAAK;GAAgB,OAAO;GAAY;EAC1C;GAAE,KAAK;GAAa,OAAO;GAAS;EACpC;GAAE,KAAK;GAAa,OAAO;;EAC5B,CAAC,CACH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
1
2
|
import { homedir } from "node:os";
|
|
2
3
|
import { join } from "node:path";
|
|
3
|
-
|
|
4
|
-
const VERSION = "0.1.0";
|
|
4
|
+
const VERSION = createRequire(import.meta.url)("../package.json").version;
|
|
5
5
|
const DEFAULT_BASE_URL = "https://getoatmeal.com";
|
|
6
6
|
const CONFIG_DIR = join(homedir(), ".hackathon");
|
|
7
7
|
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["import { homedir } from \"node:os\"\nimport { join } from \"node:path\"\n\
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["import { homedir } from \"node:os\"\nimport { join } from \"node:path\"\nimport { createRequire } from \"node:module\"\n\nconst require = createRequire(import.meta.url)\nconst pkg = require(\"../package.json\") as { version: string }\n\nexport const VERSION = pkg.version\nexport const DEFAULT_BASE_URL = \"https://getoatmeal.com\"\nexport const CONFIG_DIR = join(homedir(), \".hackathon\")\nexport const CONFIG_FILE = join(CONFIG_DIR, \"config.json\")\nexport const REQUEST_TIMEOUT_MS = 30_000\nexport const POLL_INTERVAL_MS = 2_000\nexport const AUTH_TIMEOUT_MS = 600_000\n"],"mappings":";;;AAOA,MAAa,UAHG,cAAc,OAAO,KAAK,IAAI,CAC1B,kBAAkB,CAEX;AAC3B,MAAa,mBAAmB;AAChC,MAAa,aAAa,KAAK,SAAS,EAAE,aAAa;AACvD,MAAa,cAAc,KAAK,YAAY,cAAc;AAC1D,MAAa,qBAAqB;AAClC,MAAa,mBAAmB;AAChC,MAAa,kBAAkB"}
|
|
@@ -65,7 +65,7 @@ async function checkForUpdate() {
|
|
|
65
65
|
const cache = readCache();
|
|
66
66
|
const now = Date.now();
|
|
67
67
|
if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {
|
|
68
|
-
if (compareVersions(
|
|
68
|
+
if (compareVersions(VERSION, cache.latestVersion) < 0) return {
|
|
69
69
|
current: VERSION,
|
|
70
70
|
latest: cache.latestVersion
|
|
71
71
|
};
|
|
@@ -77,7 +77,7 @@ async function checkForUpdate() {
|
|
|
77
77
|
lastChecked: now,
|
|
78
78
|
latestVersion: latest
|
|
79
79
|
});
|
|
80
|
-
if (compareVersions(
|
|
80
|
+
if (compareVersions(VERSION, latest) < 0) return {
|
|
81
81
|
current: VERSION,
|
|
82
82
|
latest
|
|
83
83
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.mjs","names":["PACKAGE_NAME"],"sources":["../../src/invocation.ts","../../src/update-check.ts"],"sourcesContent":["const PACKAGE_NAME = \"@agi-ventures-canada/hackathon-cli\"\n\nexport type InvocationMode = \"global\" | \"local-bun-script\" | \"bunx\" | \"npx\"\n\nexport function detectInvocationMode(): InvocationMode {\n const npmCommand = process.env.npm_command ?? \"\"\n const execPath = process.env.npm_execpath ?? \"\"\n const lifecycleEvent = process.env.npm_lifecycle_event ?? \"\"\n const launcher = process.env._ ?? \"\"\n const argv1 = process.argv[1] ?? \"\"\n\n if (\n (npmCommand === \"run-script\" && /bun/.test(execPath)) ||\n /packages\\/cli\\/src\\/cli\\.ts$/.test(argv1) ||\n /packages\\/cli\\/dist\\/cli\\.mjs$/.test(argv1)\n ) {\n return \"local-bun-script\"\n }\n\n if (\n lifecycleEvent === \"bunx\" ||\n npmCommand === \"bunx\" ||\n /bunx/.test(launcher)\n ) {\n return \"bunx\"\n }\n\n if (npmCommand === \"exec\" || /npm/.test(execPath)) {\n return \"npx\"\n }\n\n return \"global\"\n}\n\nexport function formatUpdateHint(): string {\n switch (detectInvocationMode()) {\n case \"local-bun-script\":\n return `Update this repo to get the new CLI version, or install the published CLI with \\`bun install -g ${PACKAGE_NAME}@latest\\`.`\n case \"bunx\":\n return `Run \\`bunx ${PACKAGE_NAME} update\\` to update.`\n case \"npx\":\n return `Run \\`npx ${PACKAGE_NAME} update\\` to update.`\n default:\n return \"Run `hackathon update` to update.\"\n }\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\"\nimport { join } from \"node:path\"\nimport { CONFIG_DIR, VERSION } from \"./constants.js\"\nimport { formatUpdateHint } from \"./invocation.js\"\n\nconst PACKAGE_NAME = \"@agi-ventures-canada/hackathon-cli\"\nconst CHECK_FILE = join(CONFIG_DIR, \"update-check.json\")\nconst CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000 // 4 hours\n\ninterface UpdateCheckCache {\n lastChecked: number\n latestVersion: string\n}\n\nfunction readCache(): UpdateCheckCache | null {\n if (!existsSync(CHECK_FILE)) return null\n try {\n return JSON.parse(readFileSync(CHECK_FILE, \"utf-8\")) as UpdateCheckCache\n } catch {\n return null\n }\n}\n\nfunction writeCache(data: UpdateCheckCache): void {\n try {\n writeFileSync(CHECK_FILE, JSON.stringify(data) + \"\\n\", { mode: 0o600 })\n } catch {\n // Silently ignore write failures\n }\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 3000)\n const res = await fetch(\n `https://registry.npmjs.org/${PACKAGE_NAME}/latest`,\n { signal: controller.signal }\n )\n clearTimeout(timeout)\n if (!res.ok) return null\n const data = (await res.json()) as { version?: string }\n return data.version ?? null\n } catch {\n return null\n }\n}\n\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split(\".\").map(Number)\n const pb = b.split(\".\").map(Number)\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return -1\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return 1\n }\n return 0\n}\n\nexport interface UpdateInfo {\n current: string\n latest: string\n}\n\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n const cache = readCache()\n const now = Date.now()\n\n if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {\n if (compareVersions(VERSION, cache.latestVersion) < 0) {\n return { current: VERSION, latest: cache.latestVersion }\n }\n return null\n }\n\n const latest = await fetchLatestVersion()\n if (!latest) return null\n\n writeCache({ lastChecked: now, latestVersion: latest })\n\n if (compareVersions(VERSION, latest) < 0) {\n return { current: VERSION, latest }\n }\n return null\n}\n\nexport function formatUpdateNotice(info: UpdateInfo): string {\n return `\\nUpdate available: ${info.current} → ${info.latest}\\n${formatUpdateHint()}`\n}\n"],"mappings":";;;;AAAA,MAAMA,iBAAe;AAIrB,SAAgB,uBAAuC;CACrD,MAAM,aAAa,QAAQ,IAAI,eAAe;CAC9C,MAAM,WAAW,QAAQ,IAAI,gBAAgB;CAC7C,MAAM,iBAAiB,QAAQ,IAAI,uBAAuB;CAC1D,MAAM,WAAW,QAAQ,IAAI,KAAK;CAClC,MAAM,QAAQ,QAAQ,KAAK,MAAM;AAEjC,KACG,eAAe,gBAAgB,MAAM,KAAK,SAAS,IACpD,+BAA+B,KAAK,MAAM,IAC1C,iCAAiC,KAAK,MAAM,CAE5C,QAAO;AAGT,KACE,mBAAmB,UACnB,eAAe,UACf,OAAO,KAAK,SAAS,CAErB,QAAO;AAGT,KAAI,eAAe,UAAU,MAAM,KAAK,SAAS,CAC/C,QAAO;AAGT,QAAO;;AAGT,SAAgB,mBAA2B;AACzC,SAAQ,sBAAsB,EAA9B;EACE,KAAK,mBACH,QAAO,mGAAmGA,eAAa;EACzH,KAAK,OACH,QAAO,cAAcA,eAAa;EACpC,KAAK,MACH,QAAO,aAAaA,eAAa;EACnC,QACE,QAAO;;;;;ACtCb,MAAM,eAAe;AACrB,MAAM,aAAa,KAAK,YAAY,oBAAoB;AACxD,MAAM,oBAAoB,QAAc;AAOxC,SAAS,YAAqC;AAC5C,KAAI,CAAC,WAAW,WAAW,CAAE,QAAO;AACpC,KAAI;AACF,SAAO,KAAK,MAAM,aAAa,YAAY,QAAQ,CAAC;SAC9C;AACN,SAAO;;;AAIX,SAAS,WAAW,MAA8B;AAChD,KAAI;AACF,gBAAc,YAAY,KAAK,UAAU,KAAK,GAAG,MAAM,EAAE,MAAM,KAAO,CAAC;SACjE;;AAKV,eAAe,qBAA6C;AAC1D,KAAI;EACF,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,UAAU,iBAAiB,WAAW,OAAO,EAAE,IAAK;EAC1D,MAAM,MAAM,MAAM,MAChB,8BAA8B,aAAa,UAC3C,EAAE,QAAQ,WAAW,QAAQ,CAC9B;AACD,eAAa,QAAQ;AACrB,MAAI,CAAC,IAAI,GAAI,QAAO;AAEpB,UADc,MAAM,IAAI,MAAM,EAClB,WAAW;SACjB;AACN,SAAO;;;AAIX,SAAS,gBAAgB,GAAW,GAAmB;CACrD,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,OAAO;CACnC,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,OAAO;AACnC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,OAAK,GAAG,MAAM,MAAM,GAAG,MAAM,GAAI,QAAO;AACxC,OAAK,GAAG,MAAM,MAAM,GAAG,MAAM,GAAI,QAAO;;AAE1C,QAAO;;AAQT,eAAsB,iBAA6C;CACjE,MAAM,QAAQ,WAAW;CACzB,MAAM,MAAM,KAAK,KAAK;AAEtB,KAAI,SAAS,MAAM,MAAM,cAAc,mBAAmB;AACxD,MAAI,
|
|
1
|
+
{"version":3,"file":"update-check.mjs","names":["PACKAGE_NAME"],"sources":["../../src/invocation.ts","../../src/update-check.ts"],"sourcesContent":["const PACKAGE_NAME = \"@agi-ventures-canada/hackathon-cli\"\n\nexport type InvocationMode = \"global\" | \"local-bun-script\" | \"bunx\" | \"npx\"\n\nexport function detectInvocationMode(): InvocationMode {\n const npmCommand = process.env.npm_command ?? \"\"\n const execPath = process.env.npm_execpath ?? \"\"\n const lifecycleEvent = process.env.npm_lifecycle_event ?? \"\"\n const launcher = process.env._ ?? \"\"\n const argv1 = process.argv[1] ?? \"\"\n\n if (\n (npmCommand === \"run-script\" && /bun/.test(execPath)) ||\n /packages\\/cli\\/src\\/cli\\.ts$/.test(argv1) ||\n /packages\\/cli\\/dist\\/cli\\.mjs$/.test(argv1)\n ) {\n return \"local-bun-script\"\n }\n\n if (\n lifecycleEvent === \"bunx\" ||\n npmCommand === \"bunx\" ||\n /bunx/.test(launcher)\n ) {\n return \"bunx\"\n }\n\n if (npmCommand === \"exec\" || /npm/.test(execPath)) {\n return \"npx\"\n }\n\n return \"global\"\n}\n\nexport function formatUpdateHint(): string {\n switch (detectInvocationMode()) {\n case \"local-bun-script\":\n return `Update this repo to get the new CLI version, or install the published CLI with \\`bun install -g ${PACKAGE_NAME}@latest\\`.`\n case \"bunx\":\n return `Run \\`bunx ${PACKAGE_NAME} update\\` to update.`\n case \"npx\":\n return `Run \\`npx ${PACKAGE_NAME} update\\` to update.`\n default:\n return \"Run `hackathon update` to update.\"\n }\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\"\nimport { join } from \"node:path\"\nimport { CONFIG_DIR, VERSION } from \"./constants.js\"\nimport { formatUpdateHint } from \"./invocation.js\"\n\nconst PACKAGE_NAME = \"@agi-ventures-canada/hackathon-cli\"\nconst CHECK_FILE = join(CONFIG_DIR, \"update-check.json\")\nconst CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000 // 4 hours\n\ninterface UpdateCheckCache {\n lastChecked: number\n latestVersion: string\n}\n\nfunction readCache(): UpdateCheckCache | null {\n if (!existsSync(CHECK_FILE)) return null\n try {\n return JSON.parse(readFileSync(CHECK_FILE, \"utf-8\")) as UpdateCheckCache\n } catch {\n return null\n }\n}\n\nfunction writeCache(data: UpdateCheckCache): void {\n try {\n writeFileSync(CHECK_FILE, JSON.stringify(data) + \"\\n\", { mode: 0o600 })\n } catch {\n // Silently ignore write failures\n }\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 3000)\n const res = await fetch(\n `https://registry.npmjs.org/${PACKAGE_NAME}/latest`,\n { signal: controller.signal }\n )\n clearTimeout(timeout)\n if (!res.ok) return null\n const data = (await res.json()) as { version?: string }\n return data.version ?? null\n } catch {\n return null\n }\n}\n\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split(\".\").map(Number)\n const pb = b.split(\".\").map(Number)\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return -1\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return 1\n }\n return 0\n}\n\nexport interface UpdateInfo {\n current: string\n latest: string\n}\n\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n const cache = readCache()\n const now = Date.now()\n\n if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {\n if (compareVersions(VERSION, cache.latestVersion) < 0) {\n return { current: VERSION, latest: cache.latestVersion }\n }\n return null\n }\n\n const latest = await fetchLatestVersion()\n if (!latest) return null\n\n writeCache({ lastChecked: now, latestVersion: latest })\n\n if (compareVersions(VERSION, latest) < 0) {\n return { current: VERSION, latest }\n }\n return null\n}\n\nexport function formatUpdateNotice(info: UpdateInfo): string {\n return `\\nUpdate available: ${info.current} → ${info.latest}\\n${formatUpdateHint()}`\n}\n"],"mappings":";;;;AAAA,MAAMA,iBAAe;AAIrB,SAAgB,uBAAuC;CACrD,MAAM,aAAa,QAAQ,IAAI,eAAe;CAC9C,MAAM,WAAW,QAAQ,IAAI,gBAAgB;CAC7C,MAAM,iBAAiB,QAAQ,IAAI,uBAAuB;CAC1D,MAAM,WAAW,QAAQ,IAAI,KAAK;CAClC,MAAM,QAAQ,QAAQ,KAAK,MAAM;AAEjC,KACG,eAAe,gBAAgB,MAAM,KAAK,SAAS,IACpD,+BAA+B,KAAK,MAAM,IAC1C,iCAAiC,KAAK,MAAM,CAE5C,QAAO;AAGT,KACE,mBAAmB,UACnB,eAAe,UACf,OAAO,KAAK,SAAS,CAErB,QAAO;AAGT,KAAI,eAAe,UAAU,MAAM,KAAK,SAAS,CAC/C,QAAO;AAGT,QAAO;;AAGT,SAAgB,mBAA2B;AACzC,SAAQ,sBAAsB,EAA9B;EACE,KAAK,mBACH,QAAO,mGAAmGA,eAAa;EACzH,KAAK,OACH,QAAO,cAAcA,eAAa;EACpC,KAAK,MACH,QAAO,aAAaA,eAAa;EACnC,QACE,QAAO;;;;;ACtCb,MAAM,eAAe;AACrB,MAAM,aAAa,KAAK,YAAY,oBAAoB;AACxD,MAAM,oBAAoB,QAAc;AAOxC,SAAS,YAAqC;AAC5C,KAAI,CAAC,WAAW,WAAW,CAAE,QAAO;AACpC,KAAI;AACF,SAAO,KAAK,MAAM,aAAa,YAAY,QAAQ,CAAC;SAC9C;AACN,SAAO;;;AAIX,SAAS,WAAW,MAA8B;AAChD,KAAI;AACF,gBAAc,YAAY,KAAK,UAAU,KAAK,GAAG,MAAM,EAAE,MAAM,KAAO,CAAC;SACjE;;AAKV,eAAe,qBAA6C;AAC1D,KAAI;EACF,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,UAAU,iBAAiB,WAAW,OAAO,EAAE,IAAK;EAC1D,MAAM,MAAM,MAAM,MAChB,8BAA8B,aAAa,UAC3C,EAAE,QAAQ,WAAW,QAAQ,CAC9B;AACD,eAAa,QAAQ;AACrB,MAAI,CAAC,IAAI,GAAI,QAAO;AAEpB,UADc,MAAM,IAAI,MAAM,EAClB,WAAW;SACjB;AACN,SAAO;;;AAIX,SAAS,gBAAgB,GAAW,GAAmB;CACrD,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,OAAO;CACnC,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,OAAO;AACnC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,OAAK,GAAG,MAAM,MAAM,GAAG,MAAM,GAAI,QAAO;AACxC,OAAK,GAAG,MAAM,MAAM,GAAG,MAAM,GAAI,QAAO;;AAE1C,QAAO;;AAQT,eAAsB,iBAA6C;CACjE,MAAM,QAAQ,WAAW;CACzB,MAAM,MAAM,KAAK,KAAK;AAEtB,KAAI,SAAS,MAAM,MAAM,cAAc,mBAAmB;AACxD,MAAI,gBAAgB,SAAS,MAAM,cAAc,GAAG,EAClD,QAAO;GAAE,SAAS;GAAS,QAAQ,MAAM;GAAe;AAE1D,SAAO;;CAGT,MAAM,SAAS,MAAM,oBAAoB;AACzC,KAAI,CAAC,OAAQ,QAAO;AAEpB,YAAW;EAAE,aAAa;EAAK,eAAe;EAAQ,CAAC;AAEvD,KAAI,gBAAgB,SAAS,OAAO,GAAG,EACrC,QAAO;EAAE,SAAS;EAAS;EAAQ;AAErC,QAAO;;AAGT,SAAgB,mBAAmB,MAA0B;AAC3D,QAAO,uBAAuB,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,kBAAkB"}
|
package/dist/cli.mjs
CHANGED
|
@@ -44,7 +44,7 @@ var OatmealClient = class {
|
|
|
44
44
|
const qs = searchParams.toString();
|
|
45
45
|
if (qs) url += `?${qs}`;
|
|
46
46
|
}
|
|
47
|
-
const headers = {};
|
|
47
|
+
const headers = { "User-Agent": `hackathon-cli/${VERSION}` };
|
|
48
48
|
if (this.apiKey) headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
49
49
|
if (body !== void 0) headers["Content-Type"] = "application/json";
|
|
50
50
|
const controller = new AbortController();
|
|
@@ -222,6 +222,7 @@ const BANNER = `
|
|
|
222
222
|
events create Create a hackathon
|
|
223
223
|
events update <id> Update a hackathon
|
|
224
224
|
events delete <id> Delete a hackathon
|
|
225
|
+
events activity <id> View activity log for a hackathon
|
|
225
226
|
${pc.dim("(alias: hackathons)")}
|
|
226
227
|
|
|
227
228
|
${pc.dim("JUDGING")}
|
|
@@ -395,6 +396,11 @@ async function main() {
|
|
|
395
396
|
await runHackathonsDelete(client, rest[2], { yes: flags.yes });
|
|
396
397
|
break;
|
|
397
398
|
}
|
|
399
|
+
case "activity": {
|
|
400
|
+
const { runHackathonsActivity } = await import("./_chunks/activity.mjs");
|
|
401
|
+
await runHackathonsActivity(client, rest[2], rest.slice(3).concat(flags.json ? ["--json"] : []));
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
398
404
|
default:
|
|
399
405
|
console.error(`Unknown events command: ${sub}. Run "hackathon events --help" for usage.`);
|
|
400
406
|
process.exit(1);
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/client.ts","../src/output.ts","../src/cli.ts"],"sourcesContent":["import { REQUEST_TIMEOUT_MS } from \"./constants.js\"\nimport { ApiError, AuthError, ScopeError } from \"./errors.js\"\n\ninterface ClientOptions {\n baseUrl: string\n apiKey?: string\n}\n\ninterface RequestOptions {\n method?: string\n body?: unknown\n params?: Record<string, string | number | undefined>\n timeout?: number\n}\n\nexport class OatmealClient {\n private baseUrl: string\n private apiKey?: string\n\n constructor(options: ClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\")\n this.apiKey = options.apiKey\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"GET\" })\n }\n\n async post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"POST\", body })\n }\n\n async patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"PATCH\", body })\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"DELETE\" })\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, timeout = REQUEST_TIMEOUT_MS } = options\n\n let url = `${this.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.set(key, String(value))\n }\n }\n const qs = searchParams.toString()\n if (qs) url += `?${qs}`\n }\n\n const headers: Record<string, string> = {}\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`\n }\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await this.fetchWithRetry(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timer)\n\n if (response.status === 204) {\n return undefined as T\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\"\n let data: unknown\n\n if (contentType.includes(\"application/json\")) {\n data = await response.json()\n } else {\n const text = await response.text()\n data = { message: text }\n }\n\n if (!response.ok) {\n this.handleErrorResponse(response.status, data)\n }\n\n return data as T\n } catch (error) {\n clearTimeout(timer)\n if (error instanceof ApiError || error instanceof AuthError || error instanceof ScopeError) {\n throw error\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ApiError(0, `Request timed out after ${timeout / 1000}s`)\n }\n if (error instanceof TypeError && (error.message.includes(\"fetch\") || error.message.includes(\"network\"))) {\n throw new ApiError(0, `Could not connect to ${this.baseUrl}. Is the server running?`)\n }\n throw new ApiError(0, `Network error: ${(error as Error).message}`)\n }\n }\n\n private async fetchWithRetry(\n url: string,\n init: RequestInit,\n retried = false\n ): Promise<Response> {\n const response = await fetch(url, init)\n\n if (response.status === 429 && !retried) {\n const retryAfter = response.headers.get(\"retry-after\")\n const delay = retryAfter ? parseInt(retryAfter, 10) * 1000 : 1000\n await new Promise((resolve) => setTimeout(resolve, Math.min(delay, 10_000)))\n return this.fetchWithRetry(url, init, true)\n }\n\n return response\n }\n\n private handleErrorResponse(status: number, data: unknown): never {\n const body = data as Record<string, unknown>\n const message = (body?.error as string) || (body?.message as string) || `Request failed`\n\n if (status === 401) {\n throw new AuthError(message)\n }\n\n if (status === 403) {\n const scope = body?.requiredScope as string | undefined\n if (scope) {\n throw new ScopeError(scope, body?.currentScopes as string[] | undefined)\n }\n throw new ApiError(403, message)\n }\n\n if (status === 404) {\n throw new ApiError(404, body?.message ? message : \"Resource not found\")\n }\n\n if (status === 429) {\n throw new ApiError(429, \"Rate limited. Please try again later.\", \"Wait a moment before retrying.\")\n }\n\n throw new ApiError(status, message)\n }\n}\n","import pc from \"picocolors\"\n\nconst noColor = !!process.env.NO_COLOR\n\nfunction color<T extends string>(fn: (s: T) => string, s: T): string {\n return noColor ? s : fn(s)\n}\n\ninterface Column<T> {\n key: keyof T\n label: string\n width?: number\n}\n\nexport function formatTable<T extends object>(\n rows: T[],\n columns: Column<T>[]\n): string {\n if (rows.length === 0) {\n return \"\"\n }\n\n const widths = columns.map((col) => {\n const headerWidth = col.label.length\n const maxDataWidth = rows.reduce((max, row) => {\n const val = String(row[col.key] ?? \"\")\n return Math.max(max, val.length)\n }, 0)\n return col.width ?? Math.min(Math.max(headerWidth, maxDataWidth), 50)\n })\n\n const header = columns.map((col, i) => col.label.padEnd(widths[i])).join(\" \")\n const separator = widths.map((w) => \"─\".repeat(w)).join(\"──\")\n\n const dataRows = rows.map((row) =>\n columns\n .map((col, i) => {\n const val = String(row[col.key] ?? \"\")\n return val.length > widths[i] ? val.slice(0, widths[i] - 1) + \"…\" : val.padEnd(widths[i])\n })\n .join(\" \")\n )\n\n return [color(pc.bold, header), separator, ...dataRows].join(\"\\n\")\n}\n\nexport function formatJson(data: unknown): string {\n return JSON.stringify(data, null, 2)\n}\n\nexport function formatDetail(fields: Array<{ label: string; value: string | undefined }>): string {\n const maxLabel = fields.reduce((max, f) => Math.max(max, f.label.length), 0)\n return fields\n .map((f) => `${color(pc.bold, f.label.padEnd(maxLabel))} ${f.value ?? color(pc.dim, \"—\")}`)\n .join(\"\\n\")\n}\n\nexport function formatError(error: { message: string; hint?: string }): string {\n const lines = [color(pc.red, `Error: ${error.message}`)]\n if (error.hint) {\n lines.push(color(pc.dim, `Hint: ${error.hint}`))\n }\n return lines.join(\"\\n\")\n}\n\nexport function formatSuccess(message: string): string {\n return color(pc.green, `✓ ${message}`)\n}\n\nexport function formatWarning(message: string): string {\n return color(pc.yellow, `⚠ ${message}`)\n}\n","import pc from \"picocolors\"\nimport { OatmealClient } from \"./client.js\"\nimport { loadConfig } from \"./config.js\"\nimport { VERSION, DEFAULT_BASE_URL } from \"./constants.js\"\nimport { ApiError, AuthError, ConfigError, ScopeError } from \"./errors.js\"\nimport { formatError } from \"./output.js\"\n\ninterface GlobalFlags {\n json: boolean\n yes: boolean\n baseUrl?: string\n apiKey?: string\n help: boolean\n}\n\nfunction parseGlobalFlags(args: string[]): { flags: GlobalFlags; rest: string[] } {\n const flags: GlobalFlags = { json: false, yes: false, help: false }\n const rest: string[] = []\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--json\":\n flags.json = true\n break\n case \"--yes\":\n case \"-y\":\n flags.yes = true\n break\n case \"--base-url\":\n flags.baseUrl = args[++i]\n break\n case \"--api-key\":\n flags.apiKey = args[++i]\n break\n case \"--help\":\n case \"-h\":\n flags.help = true\n break\n case \"--version\":\n case \"-v\":\n console.log(VERSION)\n process.exit(0)\n break\n default:\n rest.push(args[i])\n }\n }\n\n return { flags, rest }\n}\n\nfunction createPublicClient(flags: GlobalFlags): OatmealClient {\n const config = loadConfig()\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config?.baseUrl ?? DEFAULT_BASE_URL,\n })\n}\n\nfunction createAuthenticatedClient(flags: GlobalFlags): OatmealClient {\n const apiKey = flags.apiKey ?? process.env.HACKATHON_API_KEY\n if (apiKey) {\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? DEFAULT_BASE_URL,\n apiKey,\n })\n }\n\n const config = loadConfig()\n if (!config?.apiKey) {\n throw new AuthError()\n }\n\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config.baseUrl,\n apiKey: config.apiKey,\n })\n}\n\nconst BANNER = `\n ${pc.bold(\"hackathon\")} — CLI for the Oatmeal hackathon platform\n\n ${pc.dim(\"USAGE\")}\n hackathon <command> [options]\n\n ${pc.dim(\"PUBLIC COMMANDS (no auth required)\")}\n browse hackathons Search public hackathons\n browse submissions <slug> View submissions for a hackathon\n browse results <slug> View published results\n browse org <slug> View organization profile\n\n ${pc.dim(\"AUTH\")}\n login Sign in via browser or API key\n logout Remove saved credentials\n whoami Show current auth info\n update Update CLI to latest version\n\n ${pc.dim(\"EVENT MANAGEMENT (auth required)\")}\n events list List your hackathons\n events get <id> Get hackathon details\n events create Create a hackathon\n events update <id> Update a hackathon\n events delete <id> Delete a hackathon\n ${pc.dim(\"(alias: hackathons)\")}\n\n ${pc.dim(\"JUDGING\")}\n judging criteria list <id> List criteria\n judging criteria create <id> Create criteria\n judging criteria update <id> <cid> Update criteria\n judging criteria delete <id> <cid> Delete criteria\n judging judges list <id> List judges\n judging judges add <id> Add a judge\n judging judges remove <id> <pid> Remove a judge\n judging assignments list <id> List assignments\n judging assignments create <id> Create assignment\n judging assignments delete <id> <aid> Delete assignment\n judging auto-assign <id> Auto-assign judges\n judging invitations list <id> List invitations\n judging invitations cancel <id> <iid> Cancel invitation\n judging pick-results <id> View pick results\n\n ${pc.dim(\"PRIZES\")}\n prizes list <id> List prizes\n prizes create <id> Create a prize\n prizes update <id> <pid> Update a prize\n prizes delete <id> <pid> Delete a prize\n prizes reorder <id> Reorder prizes\n prizes assign <id> <pid> Assign prize\n prizes unassign <id> <pid> <sid> Unassign prize\n\n ${pc.dim(\"JUDGE DISPLAY\")}\n judge-display list <id> List display profiles\n judge-display create <id> Create display profile\n judge-display update <id> <jid> Update display profile\n judge-display delete <id> <jid> Delete display profile\n judge-display reorder <id> Reorder profiles\n\n ${pc.dim(\"RESULTS\")}\n results calculate <id> Calculate results\n results get <id> Get detailed results\n results publish <id> Publish results\n results unpublish <id> Unpublish results\n\n ${pc.dim(\"WEBHOOKS\")}\n webhooks list List webhooks\n webhooks create Create a webhook\n webhooks delete <id> Delete a webhook\n\n ${pc.dim(\"JOBS\")}\n jobs list List jobs\n jobs get <id> Get job details\n jobs create Create a job\n jobs result <id> Get job result\n jobs cancel <id> Cancel a job\n\n ${pc.dim(\"SCHEDULES\")}\n schedules list List schedules\n schedules create Create a schedule\n schedules get <id> Get schedule details\n schedules update <id> Update a schedule\n schedules delete <id> Delete a schedule\n\n ${pc.dim(\"ADMIN (requires API key with admin:read, admin:write, admin:scenarios scopes)\")}\n admin stats Platform-wide statistics\n admin hackathons list List all hackathons across tenants\n admin hackathons get <id> Get hackathon details\n admin hackathons update <id> Update any hackathon field\n admin hackathons delete <id> Delete a hackathon (--yes auto-confirms name, skips interactive prompt)\n admin scenarios list List available test scenarios\n admin scenarios run <name> Run a test scenario\n\n ${pc.dim(\"GLOBAL OPTIONS\")}\n --json Output as JSON\n --yes, -y Skip confirmation prompts\n --base-url API base URL\n --api-key API key (overrides config)\n --help, -h Show help\n --version, -v Show version\n`\n\nasync function notifyIfUpdateAvailable(): Promise<void> {\n try {\n const { checkForUpdate, formatUpdateNotice } = await import(\"./update-check.js\")\n const update = await checkForUpdate()\n if (update) {\n console.error(formatUpdateNotice(update))\n }\n } catch {\n // Silently ignore update check failures\n }\n}\n\nasync function main() {\n const { flags, rest } = parseGlobalFlags(process.argv.slice(2))\n\n if (rest.length === 0 || flags.help) {\n console.log(BANNER)\n return\n }\n\n const command = rest[0]\n const sub = rest[1]\n const sub2 = rest[2]\n\n try {\n switch (command) {\n case \"login\": {\n const { runLogin } = await import(\"./commands/login.js\")\n await runLogin(rest.slice(1).concat(flags.yes ? [\"--yes\"] : []).concat(flags.baseUrl ? [\"--base-url\", flags.baseUrl] : []).concat(flags.apiKey ? [\"--api-key\", flags.apiKey] : []))\n break\n }\n\n case \"logout\": {\n const { runLogout } = await import(\"./commands/logout.js\")\n await runLogout()\n break\n }\n\n case \"whoami\": {\n const client = createAuthenticatedClient(flags)\n const { runWhoAmI } = await import(\"./commands/whoami.js\")\n await runWhoAmI(client, { json: flags.json })\n break\n }\n\n case \"update\": {\n const { runUpdate } = await import(\"./commands/update.js\")\n await runUpdate()\n return\n }\n\n case \"browse\": {\n const client = createPublicClient(flags)\n switch (sub) {\n case \"hackathons\": {\n const { runBrowseHackathons } = await import(\"./commands/browse/hackathons.js\")\n await runBrowseHackathons(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"submissions\": {\n const { runBrowseSubmissions } = await import(\"./commands/browse/submissions.js\")\n await runBrowseSubmissions(client, rest[2], { json: flags.json })\n break\n }\n case \"results\": {\n const { runBrowseResults } = await import(\"./commands/browse/results.js\")\n await runBrowseResults(client, rest[2], { json: flags.json })\n break\n }\n case \"org\": {\n const { runBrowseOrg } = await import(\"./commands/browse/org.js\")\n await runBrowseOrg(client, rest[2], { json: flags.json })\n break\n }\n default:\n console.error(`Unknown browse command: ${sub}. Run \"hackathon browse --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"hackathons\":\n case \"events\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runHackathonsList } = await import(\"./commands/hackathons/list.js\")\n await runHackathonsList(client, { json: flags.json })\n break\n }\n case \"get\": {\n const { runHackathonsGet } = await import(\"./commands/hackathons/get.js\")\n await runHackathonsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runHackathonsCreate } = await import(\"./commands/hackathons/create.js\")\n await runHackathonsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runHackathonsUpdate } = await import(\"./commands/hackathons/update.js\")\n await runHackathonsUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runHackathonsDelete } = await import(\"./commands/hackathons/delete.js\")\n await runHackathonsDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown events command: ${sub}. Run \"hackathon events --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"judging\": {\n const client = createAuthenticatedClient(flags)\n const hackathonId = rest[2]\n switch (sub) {\n case \"criteria\":\n switch (sub2) {\n case \"list\": {\n const { runCriteriaList } = await import(\"./commands/judging/criteria-list.js\")\n await runCriteriaList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runCriteriaCreate } = await import(\"./commands/judging/criteria-create.js\")\n await runCriteriaCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runCriteriaUpdate } = await import(\"./commands/judging/criteria-update.js\")\n await runCriteriaUpdate(client, rest[3], rest[4], rest.slice(5).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runCriteriaDelete } = await import(\"./commands/judging/criteria-delete.js\")\n await runCriteriaDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging criteria command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"judges\":\n switch (sub2) {\n case \"list\": {\n const { runJudgesList } = await import(\"./commands/judging/judges-list.js\")\n await runJudgesList(client, rest[3], { json: flags.json })\n break\n }\n case \"add\": {\n const { runJudgesAdd } = await import(\"./commands/judging/judges-add.js\")\n await runJudgesAdd(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"remove\": {\n const { runJudgesRemove } = await import(\"./commands/judging/judges-remove.js\")\n await runJudgesRemove(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging judges command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"assignments\":\n switch (sub2) {\n case \"list\": {\n const { runAssignmentsList } = await import(\"./commands/judging/assignments-list.js\")\n await runAssignmentsList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runAssignmentsCreate } = await import(\"./commands/judging/assignments-create.js\")\n await runAssignmentsCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runAssignmentsDelete } = await import(\"./commands/judging/assignments-delete.js\")\n await runAssignmentsDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging assignments command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"auto-assign\": {\n const { runAutoAssign } = await import(\"./commands/judging/auto-assign.js\")\n await runAutoAssign(client, hackathonId, rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n\n case \"invitations\":\n switch (sub2) {\n case \"list\": {\n const { runInvitationsList } = await import(\"./commands/judging/invitations-list.js\")\n await runInvitationsList(client, rest[3], { json: flags.json })\n break\n }\n case \"cancel\": {\n const { runInvitationsCancel } = await import(\"./commands/judging/invitations-cancel.js\")\n await runInvitationsCancel(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging invitations command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"pick-results\": {\n const { runPickResults } = await import(\"./commands/judging/pick-results.js\")\n await runPickResults(client, hackathonId, { json: flags.json })\n break\n }\n\n default:\n console.error(`Unknown judging command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"prizes\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runPrizesList } = await import(\"./commands/prizes/list.js\")\n await runPrizesList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runPrizesCreate } = await import(\"./commands/prizes/create.js\")\n await runPrizesCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runPrizesUpdate } = await import(\"./commands/prizes/update.js\")\n await runPrizesUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runPrizesDelete } = await import(\"./commands/prizes/delete.js\")\n await runPrizesDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runPrizesReorder } = await import(\"./commands/prizes/reorder.js\")\n await runPrizesReorder(client, rest[2], rest.slice(3))\n break\n }\n case \"assign\": {\n const { runPrizesAssign } = await import(\"./commands/prizes/assign.js\")\n await runPrizesAssign(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"unassign\": {\n const { runPrizesUnassign } = await import(\"./commands/prizes/unassign.js\")\n await runPrizesUnassign(client, rest[2], rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown prizes command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"judge-display\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJudgeDisplayList } = await import(\"./commands/judge-display/list.js\")\n await runJudgeDisplayList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJudgeDisplayCreate } = await import(\"./commands/judge-display/create.js\")\n await runJudgeDisplayCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runJudgeDisplayUpdate } = await import(\"./commands/judge-display/update.js\")\n await runJudgeDisplayUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runJudgeDisplayDelete } = await import(\"./commands/judge-display/delete.js\")\n await runJudgeDisplayDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runJudgeDisplayReorder } = await import(\"./commands/judge-display/reorder.js\")\n await runJudgeDisplayReorder(client, rest[2], rest.slice(3))\n break\n }\n default:\n console.error(`Unknown judge-display command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"results\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"calculate\": {\n const { runResultsCalculate } = await import(\"./commands/results/calculate.js\")\n await runResultsCalculate(client, rest[2], { json: flags.json })\n break\n }\n case \"get\": {\n const { runResultsGet } = await import(\"./commands/results/get.js\")\n await runResultsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"publish\": {\n const { runResultsPublish } = await import(\"./commands/results/publish.js\")\n await runResultsPublish(client, rest[2], { yes: flags.yes })\n break\n }\n case \"unpublish\": {\n const { runResultsUnpublish } = await import(\"./commands/results/unpublish.js\")\n await runResultsUnpublish(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown results command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"webhooks\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runWebhooksList } = await import(\"./commands/webhooks/list.js\")\n await runWebhooksList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runWebhooksCreate } = await import(\"./commands/webhooks/create.js\")\n await runWebhooksCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runWebhooksDelete } = await import(\"./commands/webhooks/delete.js\")\n await runWebhooksDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown webhooks command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"jobs\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJobsList } = await import(\"./commands/jobs/list.js\")\n await runJobsList(client, rest.slice(2), { json: flags.json })\n break\n }\n case \"get\": {\n const { runJobsGet } = await import(\"./commands/jobs/get.js\")\n await runJobsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJobsCreate } = await import(\"./commands/jobs/create.js\")\n await runJobsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"result\": {\n const { runJobsResult } = await import(\"./commands/jobs/result.js\")\n await runJobsResult(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"cancel\": {\n const { runJobsCancel } = await import(\"./commands/jobs/cancel.js\")\n await runJobsCancel(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown jobs command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"schedules\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runSchedulesList } = await import(\"./commands/schedules/list.js\")\n await runSchedulesList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runSchedulesCreate } = await import(\"./commands/schedules/create.js\")\n await runSchedulesCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"get\": {\n const { runSchedulesGet } = await import(\"./commands/schedules/get.js\")\n await runSchedulesGet(client, rest[2], { json: flags.json })\n break\n }\n case \"update\": {\n const { runSchedulesUpdate } = await import(\"./commands/schedules/update.js\")\n await runSchedulesUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runSchedulesDelete } = await import(\"./commands/schedules/delete.js\")\n await runSchedulesDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown schedules command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"admin\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"stats\": {\n const { runAdminStats } = await import(\"./commands/admin/stats.js\")\n await runAdminStats(client, { json: flags.json })\n break\n }\n case \"hackathons\":\n switch (sub2) {\n case \"list\": {\n const { runAdminHackathonsList } = await import(\"./commands/admin/hackathons-list.js\")\n await runAdminHackathonsList(client, rest.slice(3), { json: flags.json })\n break\n }\n case \"get\": {\n const { runAdminHackathonsGet } = await import(\"./commands/admin/hackathons-get.js\")\n await runAdminHackathonsGet(client, rest[3], { json: flags.json })\n break\n }\n case \"update\": {\n const { runAdminHackathonsUpdate } = await import(\"./commands/admin/hackathons-update.js\")\n await runAdminHackathonsUpdate(client, rest[3], rest.slice(4), { json: flags.json })\n break\n }\n case \"delete\": {\n const { runAdminHackathonsDelete } = await import(\"./commands/admin/hackathons-delete.js\")\n await runAdminHackathonsDelete(client, rest[3], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown admin hackathons command: ${sub2}`)\n process.exit(1)\n }\n break\n case \"scenarios\":\n switch (sub2) {\n case \"list\": {\n const { runAdminScenariosList } = await import(\"./commands/admin/scenarios-list.js\")\n await runAdminScenariosList(client, { json: flags.json })\n break\n }\n case \"run\": {\n const { runAdminScenariosRun } = await import(\"./commands/admin/scenarios-run.js\")\n await runAdminScenariosRun(client, rest[3], rest.slice(4), { json: flags.json })\n break\n }\n default:\n console.error(`Unknown admin scenarios command: ${sub2}`)\n process.exit(1)\n }\n break\n default:\n console.error(`Unknown admin command: ${sub}. Run \"hackathon admin --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n default:\n console.error(`Unknown command: ${command}. Run \"hackathon --help\" for usage.`)\n process.exit(1)\n }\n } catch (error) {\n if (error instanceof ScopeError) {\n console.error(formatError({ message: error.message, hint: error.hint }))\n } else if (error instanceof AuthError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ConfigError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ApiError) {\n console.error(formatError({ message: error.toString(), hint: error.hint }))\n } else if (error instanceof Error) {\n console.error(formatError({ message: error.message }))\n } else {\n console.error(formatError({ message: String(error) }))\n }\n process.exit(1)\n } finally {\n await notifyIfUpdateAvailable()\n }\n}\n\nmain()\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/client.ts","../src/output.ts","../src/cli.ts"],"sourcesContent":["import { REQUEST_TIMEOUT_MS, VERSION } from \"./constants.js\"\nimport { ApiError, AuthError, ScopeError } from \"./errors.js\"\n\ninterface ClientOptions {\n baseUrl: string\n apiKey?: string\n}\n\ninterface RequestOptions {\n method?: string\n body?: unknown\n params?: Record<string, string | number | undefined>\n timeout?: number\n}\n\nexport class OatmealClient {\n private baseUrl: string\n private apiKey?: string\n\n constructor(options: ClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\")\n this.apiKey = options.apiKey\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"GET\" })\n }\n\n async post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"POST\", body })\n }\n\n async patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"PATCH\", body })\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"DELETE\" })\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, timeout = REQUEST_TIMEOUT_MS } = options\n\n let url = `${this.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.set(key, String(value))\n }\n }\n const qs = searchParams.toString()\n if (qs) url += `?${qs}`\n }\n\n const headers: Record<string, string> = {\n \"User-Agent\": `hackathon-cli/${VERSION}`,\n }\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`\n }\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await this.fetchWithRetry(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timer)\n\n if (response.status === 204) {\n return undefined as T\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\"\n let data: unknown\n\n if (contentType.includes(\"application/json\")) {\n data = await response.json()\n } else {\n const text = await response.text()\n data = { message: text }\n }\n\n if (!response.ok) {\n this.handleErrorResponse(response.status, data)\n }\n\n return data as T\n } catch (error) {\n clearTimeout(timer)\n if (error instanceof ApiError || error instanceof AuthError || error instanceof ScopeError) {\n throw error\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ApiError(0, `Request timed out after ${timeout / 1000}s`)\n }\n if (error instanceof TypeError && (error.message.includes(\"fetch\") || error.message.includes(\"network\"))) {\n throw new ApiError(0, `Could not connect to ${this.baseUrl}. Is the server running?`)\n }\n throw new ApiError(0, `Network error: ${(error as Error).message}`)\n }\n }\n\n private async fetchWithRetry(\n url: string,\n init: RequestInit,\n retried = false\n ): Promise<Response> {\n const response = await fetch(url, init)\n\n if (response.status === 429 && !retried) {\n const retryAfter = response.headers.get(\"retry-after\")\n const delay = retryAfter ? parseInt(retryAfter, 10) * 1000 : 1000\n await new Promise((resolve) => setTimeout(resolve, Math.min(delay, 10_000)))\n return this.fetchWithRetry(url, init, true)\n }\n\n return response\n }\n\n private handleErrorResponse(status: number, data: unknown): never {\n const body = data as Record<string, unknown>\n const message = (body?.error as string) || (body?.message as string) || `Request failed`\n\n if (status === 401) {\n throw new AuthError(message)\n }\n\n if (status === 403) {\n const scope = body?.requiredScope as string | undefined\n if (scope) {\n throw new ScopeError(scope, body?.currentScopes as string[] | undefined)\n }\n throw new ApiError(403, message)\n }\n\n if (status === 404) {\n throw new ApiError(404, body?.message ? message : \"Resource not found\")\n }\n\n if (status === 429) {\n throw new ApiError(429, \"Rate limited. Please try again later.\", \"Wait a moment before retrying.\")\n }\n\n throw new ApiError(status, message)\n }\n}\n","import pc from \"picocolors\"\n\nconst noColor = !!process.env.NO_COLOR\n\nfunction color<T extends string>(fn: (s: T) => string, s: T): string {\n return noColor ? s : fn(s)\n}\n\ninterface Column<T> {\n key: keyof T\n label: string\n width?: number\n}\n\nexport function formatTable<T extends object>(\n rows: T[],\n columns: Column<T>[]\n): string {\n if (rows.length === 0) {\n return \"\"\n }\n\n const widths = columns.map((col) => {\n const headerWidth = col.label.length\n const maxDataWidth = rows.reduce((max, row) => {\n const val = String(row[col.key] ?? \"\")\n return Math.max(max, val.length)\n }, 0)\n return col.width ?? Math.min(Math.max(headerWidth, maxDataWidth), 50)\n })\n\n const header = columns.map((col, i) => col.label.padEnd(widths[i])).join(\" \")\n const separator = widths.map((w) => \"─\".repeat(w)).join(\"──\")\n\n const dataRows = rows.map((row) =>\n columns\n .map((col, i) => {\n const val = String(row[col.key] ?? \"\")\n return val.length > widths[i] ? val.slice(0, widths[i] - 1) + \"…\" : val.padEnd(widths[i])\n })\n .join(\" \")\n )\n\n return [color(pc.bold, header), separator, ...dataRows].join(\"\\n\")\n}\n\nexport function formatJson(data: unknown): string {\n return JSON.stringify(data, null, 2)\n}\n\nexport function formatDetail(fields: Array<{ label: string; value: string | undefined }>): string {\n const maxLabel = fields.reduce((max, f) => Math.max(max, f.label.length), 0)\n return fields\n .map((f) => `${color(pc.bold, f.label.padEnd(maxLabel))} ${f.value ?? color(pc.dim, \"—\")}`)\n .join(\"\\n\")\n}\n\nexport function formatError(error: { message: string; hint?: string }): string {\n const lines = [color(pc.red, `Error: ${error.message}`)]\n if (error.hint) {\n lines.push(color(pc.dim, `Hint: ${error.hint}`))\n }\n return lines.join(\"\\n\")\n}\n\nexport function formatSuccess(message: string): string {\n return color(pc.green, `✓ ${message}`)\n}\n\nexport function formatWarning(message: string): string {\n return color(pc.yellow, `⚠ ${message}`)\n}\n","import pc from \"picocolors\"\nimport { OatmealClient } from \"./client.js\"\nimport { loadConfig } from \"./config.js\"\nimport { VERSION, DEFAULT_BASE_URL } from \"./constants.js\"\nimport { ApiError, AuthError, ConfigError, ScopeError } from \"./errors.js\"\nimport { formatError } from \"./output.js\"\n\ninterface GlobalFlags {\n json: boolean\n yes: boolean\n baseUrl?: string\n apiKey?: string\n help: boolean\n}\n\nfunction parseGlobalFlags(args: string[]): { flags: GlobalFlags; rest: string[] } {\n const flags: GlobalFlags = { json: false, yes: false, help: false }\n const rest: string[] = []\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--json\":\n flags.json = true\n break\n case \"--yes\":\n case \"-y\":\n flags.yes = true\n break\n case \"--base-url\":\n flags.baseUrl = args[++i]\n break\n case \"--api-key\":\n flags.apiKey = args[++i]\n break\n case \"--help\":\n case \"-h\":\n flags.help = true\n break\n case \"--version\":\n case \"-v\":\n console.log(VERSION)\n process.exit(0)\n break\n default:\n rest.push(args[i])\n }\n }\n\n return { flags, rest }\n}\n\nfunction createPublicClient(flags: GlobalFlags): OatmealClient {\n const config = loadConfig()\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config?.baseUrl ?? DEFAULT_BASE_URL,\n })\n}\n\nfunction createAuthenticatedClient(flags: GlobalFlags): OatmealClient {\n const apiKey = flags.apiKey ?? process.env.HACKATHON_API_KEY\n if (apiKey) {\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? DEFAULT_BASE_URL,\n apiKey,\n })\n }\n\n const config = loadConfig()\n if (!config?.apiKey) {\n throw new AuthError()\n }\n\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config.baseUrl,\n apiKey: config.apiKey,\n })\n}\n\nconst BANNER = `\n ${pc.bold(\"hackathon\")} — CLI for the Oatmeal hackathon platform\n\n ${pc.dim(\"USAGE\")}\n hackathon <command> [options]\n\n ${pc.dim(\"PUBLIC COMMANDS (no auth required)\")}\n browse hackathons Search public hackathons\n browse submissions <slug> View submissions for a hackathon\n browse results <slug> View published results\n browse org <slug> View organization profile\n\n ${pc.dim(\"AUTH\")}\n login Sign in via browser or API key\n logout Remove saved credentials\n whoami Show current auth info\n update Update CLI to latest version\n\n ${pc.dim(\"EVENT MANAGEMENT (auth required)\")}\n events list List your hackathons\n events get <id> Get hackathon details\n events create Create a hackathon\n events update <id> Update a hackathon\n events delete <id> Delete a hackathon\n events activity <id> View activity log for a hackathon\n ${pc.dim(\"(alias: hackathons)\")}\n\n ${pc.dim(\"JUDGING\")}\n judging criteria list <id> List criteria\n judging criteria create <id> Create criteria\n judging criteria update <id> <cid> Update criteria\n judging criteria delete <id> <cid> Delete criteria\n judging judges list <id> List judges\n judging judges add <id> Add a judge\n judging judges remove <id> <pid> Remove a judge\n judging assignments list <id> List assignments\n judging assignments create <id> Create assignment\n judging assignments delete <id> <aid> Delete assignment\n judging auto-assign <id> Auto-assign judges\n judging invitations list <id> List invitations\n judging invitations cancel <id> <iid> Cancel invitation\n judging pick-results <id> View pick results\n\n ${pc.dim(\"PRIZES\")}\n prizes list <id> List prizes\n prizes create <id> Create a prize\n prizes update <id> <pid> Update a prize\n prizes delete <id> <pid> Delete a prize\n prizes reorder <id> Reorder prizes\n prizes assign <id> <pid> Assign prize\n prizes unassign <id> <pid> <sid> Unassign prize\n\n ${pc.dim(\"JUDGE DISPLAY\")}\n judge-display list <id> List display profiles\n judge-display create <id> Create display profile\n judge-display update <id> <jid> Update display profile\n judge-display delete <id> <jid> Delete display profile\n judge-display reorder <id> Reorder profiles\n\n ${pc.dim(\"RESULTS\")}\n results calculate <id> Calculate results\n results get <id> Get detailed results\n results publish <id> Publish results\n results unpublish <id> Unpublish results\n\n ${pc.dim(\"WEBHOOKS\")}\n webhooks list List webhooks\n webhooks create Create a webhook\n webhooks delete <id> Delete a webhook\n\n ${pc.dim(\"JOBS\")}\n jobs list List jobs\n jobs get <id> Get job details\n jobs create Create a job\n jobs result <id> Get job result\n jobs cancel <id> Cancel a job\n\n ${pc.dim(\"SCHEDULES\")}\n schedules list List schedules\n schedules create Create a schedule\n schedules get <id> Get schedule details\n schedules update <id> Update a schedule\n schedules delete <id> Delete a schedule\n\n ${pc.dim(\"ADMIN (requires API key with admin:read, admin:write, admin:scenarios scopes)\")}\n admin stats Platform-wide statistics\n admin hackathons list List all hackathons across tenants\n admin hackathons get <id> Get hackathon details\n admin hackathons update <id> Update any hackathon field\n admin hackathons delete <id> Delete a hackathon (--yes auto-confirms name, skips interactive prompt)\n admin scenarios list List available test scenarios\n admin scenarios run <name> Run a test scenario\n\n ${pc.dim(\"GLOBAL OPTIONS\")}\n --json Output as JSON\n --yes, -y Skip confirmation prompts\n --base-url API base URL\n --api-key API key (overrides config)\n --help, -h Show help\n --version, -v Show version\n`\n\nasync function notifyIfUpdateAvailable(): Promise<void> {\n try {\n const { checkForUpdate, formatUpdateNotice } = await import(\"./update-check.js\")\n const update = await checkForUpdate()\n if (update) {\n console.error(formatUpdateNotice(update))\n }\n } catch {\n // Silently ignore update check failures\n }\n}\n\nasync function main() {\n const { flags, rest } = parseGlobalFlags(process.argv.slice(2))\n\n if (rest.length === 0 || flags.help) {\n console.log(BANNER)\n return\n }\n\n const command = rest[0]\n const sub = rest[1]\n const sub2 = rest[2]\n\n try {\n switch (command) {\n case \"login\": {\n const { runLogin } = await import(\"./commands/login.js\")\n await runLogin(rest.slice(1).concat(flags.yes ? [\"--yes\"] : []).concat(flags.baseUrl ? [\"--base-url\", flags.baseUrl] : []).concat(flags.apiKey ? [\"--api-key\", flags.apiKey] : []))\n break\n }\n\n case \"logout\": {\n const { runLogout } = await import(\"./commands/logout.js\")\n await runLogout()\n break\n }\n\n case \"whoami\": {\n const client = createAuthenticatedClient(flags)\n const { runWhoAmI } = await import(\"./commands/whoami.js\")\n await runWhoAmI(client, { json: flags.json })\n break\n }\n\n case \"update\": {\n const { runUpdate } = await import(\"./commands/update.js\")\n await runUpdate()\n return\n }\n\n case \"browse\": {\n const client = createPublicClient(flags)\n switch (sub) {\n case \"hackathons\": {\n const { runBrowseHackathons } = await import(\"./commands/browse/hackathons.js\")\n await runBrowseHackathons(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"submissions\": {\n const { runBrowseSubmissions } = await import(\"./commands/browse/submissions.js\")\n await runBrowseSubmissions(client, rest[2], { json: flags.json })\n break\n }\n case \"results\": {\n const { runBrowseResults } = await import(\"./commands/browse/results.js\")\n await runBrowseResults(client, rest[2], { json: flags.json })\n break\n }\n case \"org\": {\n const { runBrowseOrg } = await import(\"./commands/browse/org.js\")\n await runBrowseOrg(client, rest[2], { json: flags.json })\n break\n }\n default:\n console.error(`Unknown browse command: ${sub}. Run \"hackathon browse --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"hackathons\":\n case \"events\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runHackathonsList } = await import(\"./commands/hackathons/list.js\")\n await runHackathonsList(client, { json: flags.json })\n break\n }\n case \"get\": {\n const { runHackathonsGet } = await import(\"./commands/hackathons/get.js\")\n await runHackathonsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runHackathonsCreate } = await import(\"./commands/hackathons/create.js\")\n await runHackathonsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runHackathonsUpdate } = await import(\"./commands/hackathons/update.js\")\n await runHackathonsUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runHackathonsDelete } = await import(\"./commands/hackathons/delete.js\")\n await runHackathonsDelete(client, rest[2], { yes: flags.yes })\n break\n }\n case \"activity\": {\n const { runHackathonsActivity } = await import(\"./commands/hackathons/activity.js\")\n await runHackathonsActivity(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n default:\n console.error(`Unknown events command: ${sub}. Run \"hackathon events --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"judging\": {\n const client = createAuthenticatedClient(flags)\n const hackathonId = rest[2]\n switch (sub) {\n case \"criteria\":\n switch (sub2) {\n case \"list\": {\n const { runCriteriaList } = await import(\"./commands/judging/criteria-list.js\")\n await runCriteriaList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runCriteriaCreate } = await import(\"./commands/judging/criteria-create.js\")\n await runCriteriaCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runCriteriaUpdate } = await import(\"./commands/judging/criteria-update.js\")\n await runCriteriaUpdate(client, rest[3], rest[4], rest.slice(5).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runCriteriaDelete } = await import(\"./commands/judging/criteria-delete.js\")\n await runCriteriaDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging criteria command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"judges\":\n switch (sub2) {\n case \"list\": {\n const { runJudgesList } = await import(\"./commands/judging/judges-list.js\")\n await runJudgesList(client, rest[3], { json: flags.json })\n break\n }\n case \"add\": {\n const { runJudgesAdd } = await import(\"./commands/judging/judges-add.js\")\n await runJudgesAdd(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"remove\": {\n const { runJudgesRemove } = await import(\"./commands/judging/judges-remove.js\")\n await runJudgesRemove(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging judges command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"assignments\":\n switch (sub2) {\n case \"list\": {\n const { runAssignmentsList } = await import(\"./commands/judging/assignments-list.js\")\n await runAssignmentsList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runAssignmentsCreate } = await import(\"./commands/judging/assignments-create.js\")\n await runAssignmentsCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runAssignmentsDelete } = await import(\"./commands/judging/assignments-delete.js\")\n await runAssignmentsDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging assignments command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"auto-assign\": {\n const { runAutoAssign } = await import(\"./commands/judging/auto-assign.js\")\n await runAutoAssign(client, hackathonId, rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n\n case \"invitations\":\n switch (sub2) {\n case \"list\": {\n const { runInvitationsList } = await import(\"./commands/judging/invitations-list.js\")\n await runInvitationsList(client, rest[3], { json: flags.json })\n break\n }\n case \"cancel\": {\n const { runInvitationsCancel } = await import(\"./commands/judging/invitations-cancel.js\")\n await runInvitationsCancel(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging invitations command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"pick-results\": {\n const { runPickResults } = await import(\"./commands/judging/pick-results.js\")\n await runPickResults(client, hackathonId, { json: flags.json })\n break\n }\n\n default:\n console.error(`Unknown judging command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"prizes\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runPrizesList } = await import(\"./commands/prizes/list.js\")\n await runPrizesList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runPrizesCreate } = await import(\"./commands/prizes/create.js\")\n await runPrizesCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runPrizesUpdate } = await import(\"./commands/prizes/update.js\")\n await runPrizesUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runPrizesDelete } = await import(\"./commands/prizes/delete.js\")\n await runPrizesDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runPrizesReorder } = await import(\"./commands/prizes/reorder.js\")\n await runPrizesReorder(client, rest[2], rest.slice(3))\n break\n }\n case \"assign\": {\n const { runPrizesAssign } = await import(\"./commands/prizes/assign.js\")\n await runPrizesAssign(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"unassign\": {\n const { runPrizesUnassign } = await import(\"./commands/prizes/unassign.js\")\n await runPrizesUnassign(client, rest[2], rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown prizes command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"judge-display\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJudgeDisplayList } = await import(\"./commands/judge-display/list.js\")\n await runJudgeDisplayList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJudgeDisplayCreate } = await import(\"./commands/judge-display/create.js\")\n await runJudgeDisplayCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runJudgeDisplayUpdate } = await import(\"./commands/judge-display/update.js\")\n await runJudgeDisplayUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runJudgeDisplayDelete } = await import(\"./commands/judge-display/delete.js\")\n await runJudgeDisplayDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runJudgeDisplayReorder } = await import(\"./commands/judge-display/reorder.js\")\n await runJudgeDisplayReorder(client, rest[2], rest.slice(3))\n break\n }\n default:\n console.error(`Unknown judge-display command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"results\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"calculate\": {\n const { runResultsCalculate } = await import(\"./commands/results/calculate.js\")\n await runResultsCalculate(client, rest[2], { json: flags.json })\n break\n }\n case \"get\": {\n const { runResultsGet } = await import(\"./commands/results/get.js\")\n await runResultsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"publish\": {\n const { runResultsPublish } = await import(\"./commands/results/publish.js\")\n await runResultsPublish(client, rest[2], { yes: flags.yes })\n break\n }\n case \"unpublish\": {\n const { runResultsUnpublish } = await import(\"./commands/results/unpublish.js\")\n await runResultsUnpublish(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown results command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"webhooks\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runWebhooksList } = await import(\"./commands/webhooks/list.js\")\n await runWebhooksList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runWebhooksCreate } = await import(\"./commands/webhooks/create.js\")\n await runWebhooksCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runWebhooksDelete } = await import(\"./commands/webhooks/delete.js\")\n await runWebhooksDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown webhooks command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"jobs\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJobsList } = await import(\"./commands/jobs/list.js\")\n await runJobsList(client, rest.slice(2), { json: flags.json })\n break\n }\n case \"get\": {\n const { runJobsGet } = await import(\"./commands/jobs/get.js\")\n await runJobsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJobsCreate } = await import(\"./commands/jobs/create.js\")\n await runJobsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"result\": {\n const { runJobsResult } = await import(\"./commands/jobs/result.js\")\n await runJobsResult(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"cancel\": {\n const { runJobsCancel } = await import(\"./commands/jobs/cancel.js\")\n await runJobsCancel(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown jobs command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"schedules\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runSchedulesList } = await import(\"./commands/schedules/list.js\")\n await runSchedulesList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runSchedulesCreate } = await import(\"./commands/schedules/create.js\")\n await runSchedulesCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"get\": {\n const { runSchedulesGet } = await import(\"./commands/schedules/get.js\")\n await runSchedulesGet(client, rest[2], { json: flags.json })\n break\n }\n case \"update\": {\n const { runSchedulesUpdate } = await import(\"./commands/schedules/update.js\")\n await runSchedulesUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runSchedulesDelete } = await import(\"./commands/schedules/delete.js\")\n await runSchedulesDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown schedules command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"admin\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"stats\": {\n const { runAdminStats } = await import(\"./commands/admin/stats.js\")\n await runAdminStats(client, { json: flags.json })\n break\n }\n case \"hackathons\":\n switch (sub2) {\n case \"list\": {\n const { runAdminHackathonsList } = await import(\"./commands/admin/hackathons-list.js\")\n await runAdminHackathonsList(client, rest.slice(3), { json: flags.json })\n break\n }\n case \"get\": {\n const { runAdminHackathonsGet } = await import(\"./commands/admin/hackathons-get.js\")\n await runAdminHackathonsGet(client, rest[3], { json: flags.json })\n break\n }\n case \"update\": {\n const { runAdminHackathonsUpdate } = await import(\"./commands/admin/hackathons-update.js\")\n await runAdminHackathonsUpdate(client, rest[3], rest.slice(4), { json: flags.json })\n break\n }\n case \"delete\": {\n const { runAdminHackathonsDelete } = await import(\"./commands/admin/hackathons-delete.js\")\n await runAdminHackathonsDelete(client, rest[3], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown admin hackathons command: ${sub2}`)\n process.exit(1)\n }\n break\n case \"scenarios\":\n switch (sub2) {\n case \"list\": {\n const { runAdminScenariosList } = await import(\"./commands/admin/scenarios-list.js\")\n await runAdminScenariosList(client, { json: flags.json })\n break\n }\n case \"run\": {\n const { runAdminScenariosRun } = await import(\"./commands/admin/scenarios-run.js\")\n await runAdminScenariosRun(client, rest[3], rest.slice(4), { json: flags.json })\n break\n }\n default:\n console.error(`Unknown admin scenarios command: ${sub2}`)\n process.exit(1)\n }\n break\n default:\n console.error(`Unknown admin command: ${sub}. Run \"hackathon admin --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n default:\n console.error(`Unknown command: ${command}. Run \"hackathon --help\" for usage.`)\n process.exit(1)\n }\n } catch (error) {\n if (error instanceof ScopeError) {\n console.error(formatError({ message: error.message, hint: error.hint }))\n } else if (error instanceof AuthError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ConfigError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ApiError) {\n console.error(formatError({ message: error.toString(), hint: error.hint }))\n } else if (error instanceof Error) {\n console.error(formatError({ message: error.message }))\n } else {\n console.error(formatError({ message: String(error) }))\n }\n process.exit(1)\n } finally {\n await notifyIfUpdateAvailable()\n }\n}\n\nmain()\n"],"mappings":"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"}
|