@agi-ventures-canada/hackathon-cli 0.1.0 → 0.1.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/dist/_chunks/assign.mjs +1 -1
- package/dist/_chunks/assign.mjs.map +1 -1
- package/dist/_chunks/assignments-delete.mjs +1 -1
- package/dist/_chunks/assignments-delete.mjs.map +1 -1
- package/dist/_chunks/calculate.mjs +1 -1
- package/dist/_chunks/calculate.mjs.map +1 -1
- package/dist/_chunks/cancel.mjs +1 -1
- package/dist/_chunks/cancel.mjs.map +1 -1
- package/dist/_chunks/config.mjs +5 -5
- package/dist/_chunks/config.mjs.map +1 -1
- package/dist/_chunks/constants.mjs +2 -2
- package/dist/_chunks/constants.mjs.map +1 -1
- package/dist/_chunks/criteria-delete.mjs +1 -1
- package/dist/_chunks/criteria-delete.mjs.map +1 -1
- package/dist/_chunks/criteria-update.mjs +1 -1
- package/dist/_chunks/criteria-update.mjs.map +1 -1
- package/dist/_chunks/delete.mjs +1 -1
- package/dist/_chunks/delete.mjs.map +1 -1
- package/dist/_chunks/delete2.mjs +1 -1
- package/dist/_chunks/delete2.mjs.map +1 -1
- package/dist/_chunks/delete3.mjs +1 -1
- package/dist/_chunks/delete3.mjs.map +1 -1
- package/dist/_chunks/delete4.mjs +1 -1
- package/dist/_chunks/delete4.mjs.map +1 -1
- package/dist/_chunks/delete5.mjs +1 -1
- package/dist/_chunks/delete5.mjs.map +1 -1
- package/dist/_chunks/get.mjs +1 -1
- package/dist/_chunks/get.mjs.map +1 -1
- package/dist/_chunks/get2.mjs +1 -1
- package/dist/_chunks/get2.mjs.map +1 -1
- package/dist/_chunks/get3.mjs +2 -2
- package/dist/_chunks/get3.mjs.map +1 -1
- package/dist/_chunks/get4.mjs +1 -1
- package/dist/_chunks/get4.mjs.map +1 -1
- package/dist/_chunks/invitations-cancel.mjs +1 -1
- package/dist/_chunks/invitations-cancel.mjs.map +1 -1
- package/dist/_chunks/judges-remove.mjs +1 -1
- package/dist/_chunks/judges-remove.mjs.map +1 -1
- package/dist/_chunks/login.mjs +4 -4
- package/dist/_chunks/login.mjs.map +1 -1
- package/dist/_chunks/org.mjs +1 -1
- package/dist/_chunks/org.mjs.map +1 -1
- package/dist/_chunks/publish.mjs +1 -1
- package/dist/_chunks/publish.mjs.map +1 -1
- package/dist/_chunks/result.mjs +1 -1
- package/dist/_chunks/result.mjs.map +1 -1
- package/dist/_chunks/results.mjs +1 -1
- package/dist/_chunks/results.mjs.map +1 -1
- package/dist/_chunks/submissions.mjs +1 -1
- package/dist/_chunks/submissions.mjs.map +1 -1
- package/dist/_chunks/unassign.mjs +1 -1
- package/dist/_chunks/unassign.mjs.map +1 -1
- package/dist/_chunks/unpublish.mjs +1 -1
- package/dist/_chunks/unpublish.mjs.map +1 -1
- package/dist/_chunks/update.mjs +1 -1
- package/dist/_chunks/update.mjs.map +1 -1
- package/dist/_chunks/update2.mjs +1 -1
- package/dist/_chunks/update2.mjs.map +1 -1
- package/dist/_chunks/update3.mjs +1 -1
- package/dist/_chunks/update3.mjs.map +1 -1
- package/dist/_chunks/update4.mjs +1 -1
- package/dist/_chunks/update4.mjs.map +1 -1
- package/dist/cli.mjs +8 -8
- package/dist/cli.mjs.map +1 -1
- package/package.json +3 -3
package/dist/_chunks/assign.mjs
CHANGED
|
@@ -14,7 +14,7 @@ function parseAssignOptions(args) {
|
|
|
14
14
|
}
|
|
15
15
|
async function runPrizesAssign(client, hackathonId, prizeId, args) {
|
|
16
16
|
if (!prizeId) {
|
|
17
|
-
console.error("Usage:
|
|
17
|
+
console.error("Usage: hackathon prizes assign <hackathon-id> <prize-id> --submission <id>");
|
|
18
18
|
process.exit(1);
|
|
19
19
|
}
|
|
20
20
|
const options = parseAssignOptions(args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assign.mjs","names":[],"sources":["../../src/commands/prizes/assign.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface AssignOptions {\n submission?: string\n json?: boolean\n}\n\nexport function parseAssignOptions(args: string[]): AssignOptions {\n const options: AssignOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--submission\":\n options.submission = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runPrizesAssign(\n client: OatmealClient,\n hackathonId: string,\n prizeId: string,\n args: string[]\n): Promise<void> {\n if (!prizeId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"assign.mjs","names":[],"sources":["../../src/commands/prizes/assign.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface AssignOptions {\n submission?: string\n json?: boolean\n}\n\nexport function parseAssignOptions(args: string[]): AssignOptions {\n const options: AssignOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--submission\":\n options.submission = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runPrizesAssign(\n client: OatmealClient,\n hackathonId: string,\n prizeId: string,\n args: string[]\n): Promise<void> {\n if (!prizeId) {\n console.error(\"Usage: hackathon prizes assign <hackathon-id> <prize-id> --submission <id>\")\n process.exit(1)\n }\n\n const options = parseAssignOptions(args)\n\n if (!options.submission) {\n console.error(\"Error: --submission is required\")\n process.exit(1)\n }\n\n const result = await client.post(\n `/api/dashboard/hackathons/${hackathonId}/prizes/${prizeId}/assign`,\n { submission_id: options.submission }\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Assigned prize ${prizeId} to submission ${options.submission}`))\n}\n"],"mappings":";;AAQA,SAAgB,mBAAmB,MAA+B;CAChE,MAAM,UAAyB,EAAE;AACjC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,aAAa,KAAK,EAAE;AAC5B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,gBACpB,QACA,aACA,SACA,MACe;AACf,KAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,6EAA6E;AAC3F,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,mBAAmB,KAAK;AAExC,KAAI,CAAC,QAAQ,YAAY;AACvB,UAAQ,MAAM,kCAAkC;AAChD,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,KAC1B,6BAA6B,YAAY,UAAU,QAAQ,UAC3D,EAAE,eAAe,QAAQ,YAAY,CACtC;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,kBAAkB,QAAQ,iBAAiB,QAAQ,aAAa,CAAC"}
|
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/judging/assignments-delete.ts
|
|
4
4
|
async function runAssignmentsDelete(client, hackathonId, assignmentId, options) {
|
|
5
5
|
if (!assignmentId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon judging assignments delete <hackathon-id> <assignment-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assignments-delete.mjs","names":[],"sources":["../../src/commands/judging/assignments-delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runAssignmentsDelete(\n client: OatmealClient,\n hackathonId: string,\n assignmentId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!assignmentId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"assignments-delete.mjs","names":[],"sources":["../../src/commands/judging/assignments-delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runAssignmentsDelete(\n client: OatmealClient,\n hackathonId: string,\n assignmentId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!assignmentId) {\n console.error(\"Usage: hackathon judging assignments delete <hackathon-id> <assignment-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete assignment ${assignmentId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(\n `/api/dashboard/hackathons/${hackathonId}/judging/assignments/${assignmentId}`\n )\n console.log(formatSuccess(`Deleted assignment ${assignmentId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,qBACpB,QACA,aACA,cACA,SACe;AACf,KAAI,CAAC,cAAc;AACjB,UAAQ,MAAM,6EAA6E;AAC3F,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,qBAAqB,aAAa,IAAI,CAAC;AAClF,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OACX,6BAA6B,YAAY,uBAAuB,eACjE;AACD,SAAQ,IAAI,cAAc,sBAAsB,eAAe,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
|
|
|
2
2
|
//#region src/commands/results/calculate.ts
|
|
3
3
|
async function runResultsCalculate(client, hackathonId, options) {
|
|
4
4
|
if (!hackathonId) {
|
|
5
|
-
console.error("Usage:
|
|
5
|
+
console.error("Usage: hackathon results calculate <hackathon-id>");
|
|
6
6
|
process.exit(1);
|
|
7
7
|
}
|
|
8
8
|
const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/results/calculate`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate.mjs","names":[],"sources":["../../src/commands/results/calculate.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\nexport async function runResultsCalculate(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"calculate.mjs","names":[],"sources":["../../src/commands/results/calculate.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\nexport async function runResultsCalculate(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage: hackathon results calculate <hackathon-id>\")\n process.exit(1)\n }\n\n const result = await client.post<{ message: string }>(\n `/api/dashboard/hackathons/${hackathonId}/results/calculate`\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(result.message ?? \"Results calculated\"))\n}\n"],"mappings":";;AAGA,eAAsB,oBACpB,QACA,aACA,SACe;AACf,KAAI,CAAC,aAAa;AAChB,UAAQ,MAAM,oDAAoD;AAClE,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,KAC1B,6BAA6B,YAAY,oBAC1C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,OAAO,WAAW,qBAAqB,CAAC"}
|
package/dist/_chunks/cancel.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/jobs/cancel.ts
|
|
4
4
|
async function runJobsCancel(client, jobId, options) {
|
|
5
5
|
if (!jobId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon jobs cancel <job-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel.mjs","names":[],"sources":["../../src/commands/jobs/cancel.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runJobsCancel(\n client: OatmealClient,\n jobId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!jobId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"cancel.mjs","names":[],"sources":["../../src/commands/jobs/cancel.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runJobsCancel(\n client: OatmealClient,\n jobId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!jobId) {\n console.error(\"Usage: hackathon jobs cancel <job-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Cancel job ${jobId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.post(`/api/v1/jobs/${jobId}/cancel`)\n console.log(formatSuccess(`Cancelled job ${jobId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,cACpB,QACA,OACA,SACe;AACf,KAAI,CAAC,OAAO;AACV,UAAQ,MAAM,wCAAwC;AACtD,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,cAAc,MAAM,IAAI,CAAC;AACpE,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,KAAK,gBAAgB,MAAM,SAAS;AACjD,SAAQ,IAAI,cAAc,iBAAiB,QAAQ,CAAC"}
|
package/dist/_chunks/config.mjs
CHANGED
|
@@ -14,7 +14,7 @@ var ApiError = class extends Error {
|
|
|
14
14
|
};
|
|
15
15
|
var AuthError = class extends Error {
|
|
16
16
|
constructor(message) {
|
|
17
|
-
super(message ?? "Not authenticated. Run \"
|
|
17
|
+
super(message ?? "Not authenticated. Run \"hackathon login\" first.");
|
|
18
18
|
this.name = "AuthError";
|
|
19
19
|
}
|
|
20
20
|
};
|
|
@@ -35,11 +35,11 @@ var ScopeError = class extends ApiError {
|
|
|
35
35
|
//#endregion
|
|
36
36
|
//#region src/config.ts
|
|
37
37
|
function loadConfig() {
|
|
38
|
-
const envKey = process.env.
|
|
39
|
-
const envUrl = process.env.
|
|
38
|
+
const envKey = process.env.HACKATHON_API_KEY;
|
|
39
|
+
const envUrl = process.env.HACKATHON_BASE_URL;
|
|
40
40
|
if (envKey) return {
|
|
41
41
|
apiKey: envKey,
|
|
42
|
-
baseUrl: envUrl ?? "https://
|
|
42
|
+
baseUrl: envUrl ?? "https://getoatmeal.com"
|
|
43
43
|
};
|
|
44
44
|
if (!existsSync(CONFIG_FILE)) return null;
|
|
45
45
|
try {
|
|
@@ -51,7 +51,7 @@ function loadConfig() {
|
|
|
51
51
|
baseUrl: envUrl ?? parsed.baseUrl
|
|
52
52
|
};
|
|
53
53
|
} catch {
|
|
54
|
-
throw new ConfigError(`Invalid config file at ${CONFIG_FILE}. Delete it and run "
|
|
54
|
+
throw new ConfigError(`Invalid config file at ${CONFIG_FILE}. Delete it and run "hackathon login" again.`);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
function saveConfig(config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":[],"sources":["../../src/errors.ts","../../src/config.ts"],"sourcesContent":["export class ApiError extends Error {\n constructor(\n public status: number,\n message: string,\n public hint?: string\n ) {\n super(message)\n this.name = \"ApiError\"\n }\n\n toString() {\n return `[${this.status}] ${this.message}`\n }\n}\n\nexport class AuthError extends Error {\n constructor(message?: string) {\n super(message ?? 'Not authenticated. Run \"
|
|
1
|
+
{"version":3,"file":"config.mjs","names":[],"sources":["../../src/errors.ts","../../src/config.ts"],"sourcesContent":["export class ApiError extends Error {\n constructor(\n public status: number,\n message: string,\n public hint?: string\n ) {\n super(message)\n this.name = \"ApiError\"\n }\n\n toString() {\n return `[${this.status}] ${this.message}`\n }\n}\n\nexport class AuthError extends Error {\n constructor(message?: string) {\n super(message ?? 'Not authenticated. Run \"hackathon login\" first.')\n this.name = \"AuthError\"\n }\n}\n\nexport class ConfigError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"ConfigError\"\n }\n}\n\nexport class ScopeError extends ApiError {\n constructor(\n public requiredScope: string,\n public currentScopes?: string[]\n ) {\n super(\n 403,\n `Missing required scope: ${requiredScope}`,\n `Your API key needs the \"${requiredScope}\" scope. Create a new key with the required scope at your dashboard.`\n )\n this.name = \"ScopeError\"\n }\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\"\nimport { CONFIG_DIR, CONFIG_FILE, DEFAULT_BASE_URL } from \"./constants.js\"\nimport { ConfigError } from \"./errors.js\"\nimport type { CliConfig } from \"./types.js\"\n\nexport function loadConfig(): CliConfig | null {\n const envKey = process.env.HACKATHON_API_KEY\n const envUrl = process.env.HACKATHON_BASE_URL\n\n if (envKey) {\n return {\n apiKey: envKey,\n baseUrl: envUrl ?? DEFAULT_BASE_URL,\n }\n }\n\n if (!existsSync(CONFIG_FILE)) {\n return null\n }\n\n try {\n const raw = readFileSync(CONFIG_FILE, \"utf-8\")\n const parsed = JSON.parse(raw) as CliConfig\n return {\n ...parsed,\n apiKey: envKey ?? parsed.apiKey,\n baseUrl: envUrl ?? parsed.baseUrl,\n }\n } catch {\n throw new ConfigError(\n `Invalid config file at ${CONFIG_FILE}. Delete it and run \"hackathon login\" again.`\n )\n }\n}\n\nexport function saveConfig(config: CliConfig): void {\n if (!existsSync(CONFIG_DIR)) {\n mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 })\n }\n\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + \"\\n\", {\n mode: 0o600,\n })\n}\n\nexport function clearConfig(): void {\n if (existsSync(CONFIG_FILE)) {\n unlinkSync(CONFIG_FILE)\n }\n}\n"],"mappings":";;;AAAA,IAAa,WAAb,cAA8B,MAAM;CAClC,YACE,QACA,SACA,MACA;AACA,QAAM,QAAQ;AAJP,OAAA,SAAA;AAEA,OAAA,OAAA;AAGP,OAAK,OAAO;;CAGd,WAAW;AACT,SAAO,IAAI,KAAK,OAAO,IAAI,KAAK;;;AAIpC,IAAa,YAAb,cAA+B,MAAM;CACnC,YAAY,SAAkB;AAC5B,QAAM,WAAW,oDAAkD;AACnE,OAAK,OAAO;;;AAIhB,IAAa,cAAb,cAAiC,MAAM;CACrC,YAAY,SAAiB;AAC3B,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAIhB,IAAa,aAAb,cAAgC,SAAS;CACvC,YACE,eACA,eACA;AACA,QACE,KACA,2BAA2B,iBAC3B,2BAA2B,cAAc,sEAC1C;AAPM,OAAA,gBAAA;AACA,OAAA,gBAAA;AAOP,OAAK,OAAO;;;;;AClChB,SAAgB,aAA+B;CAC7C,MAAM,SAAS,QAAQ,IAAI;CAC3B,MAAM,SAAS,QAAQ,IAAI;AAE3B,KAAI,OACF,QAAO;EACL,QAAQ;EACR,SAAS,UAAA;EACV;AAGH,KAAI,CAAC,WAAW,YAAY,CAC1B,QAAO;AAGT,KAAI;EACF,MAAM,MAAM,aAAa,aAAa,QAAQ;EAC9C,MAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,SAAO;GACL,GAAG;GACH,QAAQ,UAAU,OAAO;GACzB,SAAS,UAAU,OAAO;GAC3B;SACK;AACN,QAAM,IAAI,YACR,0BAA0B,YAAY,8CACvC;;;AAIL,SAAgB,WAAW,QAAyB;AAClD,KAAI,CAAC,WAAW,WAAW,CACzB,WAAU,YAAY;EAAE,WAAW;EAAM,MAAM;EAAO,CAAC;AAGzD,eAAc,aAAa,KAAK,UAAU,QAAQ,MAAM,EAAE,GAAG,MAAM,EACjE,MAAM,KACP,CAAC;;AAGJ,SAAgB,cAAoB;AAClC,KAAI,WAAW,YAAY,CACzB,YAAW,YAAY"}
|
|
@@ -2,8 +2,8 @@ import { homedir } from "node:os";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
//#region src/constants.ts
|
|
4
4
|
const VERSION = "0.1.0";
|
|
5
|
-
const DEFAULT_BASE_URL = "https://
|
|
6
|
-
const CONFIG_DIR = join(homedir(), ".
|
|
5
|
+
const DEFAULT_BASE_URL = "https://getoatmeal.com";
|
|
6
|
+
const CONFIG_DIR = join(homedir(), ".hackathon");
|
|
7
7
|
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
8
8
|
const REQUEST_TIMEOUT_MS = 3e4;
|
|
9
9
|
const POLL_INTERVAL_MS = 2e3;
|
|
@@ -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\nexport const VERSION = \"0.1.0\"\nexport const DEFAULT_BASE_URL = \"https://
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["import { homedir } from \"node:os\"\nimport { join } from \"node:path\"\n\nexport const VERSION = \"0.1.0\"\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 = 300_000\n"],"mappings":";;;AAGA,MAAa,UAAU;AACvB,MAAa,mBAAmB;AAChC,MAAa,aAAa,KAAK,SAAS,EAAE,aAAa;AACvD,MAAa,cAAc,KAAK,YAAY,cAAc;AAC1D,MAAa,qBAAqB;AAClC,MAAa,mBAAmB;AAChC,MAAa,kBAAkB"}
|
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/judging/criteria-delete.ts
|
|
4
4
|
async function runCriteriaDelete(client, hackathonId, criteriaId, options) {
|
|
5
5
|
if (!criteriaId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon judging criteria delete <hackathon-id> <criteria-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria-delete.mjs","names":[],"sources":["../../src/commands/judging/criteria-delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runCriteriaDelete(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!criteriaId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"criteria-delete.mjs","names":[],"sources":["../../src/commands/judging/criteria-delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runCriteriaDelete(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!criteriaId) {\n console.error(\"Usage: hackathon judging criteria delete <hackathon-id> <criteria-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete criteria ${criteriaId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}`\n )\n console.log(formatSuccess(`Deleted criteria ${criteriaId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,kBACpB,QACA,aACA,YACA,SACe;AACf,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,wEAAwE;AACtF,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,mBAAmB,WAAW,IAAI,CAAC;AAC9E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OACX,6BAA6B,YAAY,oBAAoB,aAC9D;AACD,SAAQ,IAAI,cAAc,oBAAoB,aAAa,CAAC"}
|
|
@@ -23,7 +23,7 @@ function parseCriteriaUpdateOptions(args) {
|
|
|
23
23
|
}
|
|
24
24
|
async function runCriteriaUpdate(client, hackathonId, criteriaId, args) {
|
|
25
25
|
if (!criteriaId) {
|
|
26
|
-
console.error("Usage:
|
|
26
|
+
console.error("Usage: hackathon judging criteria update <hackathon-id> <criteria-id> [--name ...] [--max-score ...]");
|
|
27
27
|
process.exit(1);
|
|
28
28
|
}
|
|
29
29
|
const options = parseCriteriaUpdateOptions(args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria-update.mjs","names":[],"sources":["../../src/commands/judging/criteria-update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaUpdateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n json?: boolean\n}\n\nexport function parseCriteriaUpdateOptions(args: string[]): CriteriaUpdateOptions {\n const options: CriteriaUpdateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--name\":\n options.name = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--max-score\":\n options.maxScore = parseInt(args[++i], 10)\n break\n case \"--weight\":\n options.weight = parseFloat(args[++i])\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runCriteriaUpdate(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n args: string[]\n): Promise<void> {\n if (!criteriaId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"criteria-update.mjs","names":[],"sources":["../../src/commands/judging/criteria-update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaUpdateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n json?: boolean\n}\n\nexport function parseCriteriaUpdateOptions(args: string[]): CriteriaUpdateOptions {\n const options: CriteriaUpdateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--name\":\n options.name = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--max-score\":\n options.maxScore = parseInt(args[++i], 10)\n break\n case \"--weight\":\n options.weight = parseFloat(args[++i])\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runCriteriaUpdate(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n args: string[]\n): Promise<void> {\n if (!criteriaId) {\n console.error(\"Usage: hackathon judging criteria update <hackathon-id> <criteria-id> [--name ...] [--max-score ...]\")\n process.exit(1)\n }\n\n const options = parseCriteriaUpdateOptions(args)\n const body: Record<string, unknown> = {}\n if (options.name) body.name = options.name\n if (options.description) body.description = options.description\n if (options.maxScore !== undefined) body.max_score = options.maxScore\n if (options.weight !== undefined) body.weight = options.weight\n\n if (Object.keys(body).length === 0) {\n console.error(\"Error: provide at least one field to update\")\n process.exit(1)\n }\n\n const criteria = await client.patch<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}`,\n body\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Updated criteria \"${criteria.name}\"`))\n}\n"],"mappings":";;AAYA,SAAgB,2BAA2B,MAAuC;CAChF,MAAM,UAAiC,EAAE;AACzC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,WAAW,SAAS,KAAK,EAAE,IAAI,GAAG;AAC1C;EACF,KAAK;AACH,WAAQ,SAAS,WAAW,KAAK,EAAE,GAAG;AACtC;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,aACA,YACA,MACe;AACf,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,uGAAuG;AACrH,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,2BAA2B,KAAK;CAChD,MAAM,OAAgC,EAAE;AACxC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AACpD,KAAI,QAAQ,aAAa,KAAA,EAAW,MAAK,YAAY,QAAQ;AAC7D,KAAI,QAAQ,WAAW,KAAA,EAAW,MAAK,SAAS,QAAQ;AAExD,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,MAC5B,6BAA6B,YAAY,oBAAoB,cAC7D,KACD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,GAAG,CAAC"}
|
package/dist/_chunks/delete.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import * as p from "@clack/prompts";
|
|
|
4
4
|
//#region src/commands/hackathons/delete.ts
|
|
5
5
|
async function runHackathonsDelete(client, idOrSlug, options) {
|
|
6
6
|
if (!idOrSlug) {
|
|
7
|
-
console.error("Usage:
|
|
7
|
+
console.error("Usage: hackathon hackathons delete <id-or-slug>");
|
|
8
8
|
process.exit(1);
|
|
9
9
|
}
|
|
10
10
|
const id = await resolveHackathonId(client, idOrSlug);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.mjs","names":[],"sources":["../../src/commands/hackathons/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\nexport async function runHackathonsDelete(\n client: OatmealClient,\n idOrSlug: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"delete.mjs","names":[],"sources":["../../src/commands/hackathons/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\nexport async function runHackathonsDelete(\n client: OatmealClient,\n idOrSlug: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage: hackathon hackathons delete <id-or-slug>\")\n process.exit(1)\n }\n\n const id = await resolveHackathonId(client, idOrSlug)\n\n if (!options.yes) {\n const confirm = await p.confirm({\n message: `Delete hackathon ${idOrSlug}? This cannot be undone.`,\n })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/dashboard/hackathons/${id}`)\n console.log(formatSuccess(`Deleted hackathon ${idOrSlug}`))\n}\n"],"mappings":";;;;AAKA,eAAsB,oBACpB,QACA,UACA,SACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,MAAM,kDAAkD;AAChE,UAAQ,KAAK,EAAE;;CAGjB,MAAM,KAAK,MAAM,mBAAmB,QAAQ,SAAS;AAErD,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAC9B,SAAS,oBAAoB,SAAS,2BACvC,CAAC;AACF,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,6BAA6B,KAAK;AACtD,SAAQ,IAAI,cAAc,qBAAqB,WAAW,CAAC"}
|
package/dist/_chunks/delete2.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/judge-display/delete.ts
|
|
4
4
|
async function runJudgeDisplayDelete(client, hackathonId, profileId, options) {
|
|
5
5
|
if (!profileId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon judge-display delete <hackathon-id> <profile-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete2.mjs","names":[],"sources":["../../src/commands/judge-display/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runJudgeDisplayDelete(\n client: OatmealClient,\n hackathonId: string,\n profileId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!profileId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"delete2.mjs","names":[],"sources":["../../src/commands/judge-display/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runJudgeDisplayDelete(\n client: OatmealClient,\n hackathonId: string,\n profileId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!profileId) {\n console.error(\"Usage: hackathon judge-display delete <hackathon-id> <profile-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete judge display profile ${profileId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(\n `/api/dashboard/hackathons/${hackathonId}/judges/display/${profileId}`\n )\n console.log(formatSuccess(`Deleted judge display profile ${profileId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,sBACpB,QACA,aACA,WACA,SACe;AACf,KAAI,CAAC,WAAW;AACd,UAAQ,MAAM,oEAAoE;AAClF,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,gCAAgC,UAAU,IAAI,CAAC;AAC1F,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OACX,6BAA6B,YAAY,kBAAkB,YAC5D;AACD,SAAQ,IAAI,cAAc,iCAAiC,YAAY,CAAC"}
|
package/dist/_chunks/delete3.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/prizes/delete.ts
|
|
4
4
|
async function runPrizesDelete(client, hackathonId, prizeId, options) {
|
|
5
5
|
if (!prizeId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon prizes delete <hackathon-id> <prize-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete3.mjs","names":[],"sources":["../../src/commands/prizes/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runPrizesDelete(\n client: OatmealClient,\n hackathonId: string,\n prizeId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!prizeId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"delete3.mjs","names":[],"sources":["../../src/commands/prizes/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runPrizesDelete(\n client: OatmealClient,\n hackathonId: string,\n prizeId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!prizeId) {\n console.error(\"Usage: hackathon prizes delete <hackathon-id> <prize-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete prize ${prizeId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/dashboard/hackathons/${hackathonId}/prizes/${prizeId}`)\n console.log(formatSuccess(`Deleted prize ${prizeId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,gBACpB,QACA,aACA,SACA,SACe;AACf,KAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,2DAA2D;AACzE,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,gBAAgB,QAAQ,IAAI,CAAC;AACxE,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,6BAA6B,YAAY,UAAU,UAAU;AACjF,SAAQ,IAAI,cAAc,iBAAiB,UAAU,CAAC"}
|
package/dist/_chunks/delete4.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/schedules/delete.ts
|
|
4
4
|
async function runSchedulesDelete(client, scheduleId, options) {
|
|
5
5
|
if (!scheduleId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon schedules delete <schedule-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete4.mjs","names":[],"sources":["../../src/commands/schedules/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runSchedulesDelete(\n client: OatmealClient,\n scheduleId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!scheduleId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"delete4.mjs","names":[],"sources":["../../src/commands/schedules/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runSchedulesDelete(\n client: OatmealClient,\n scheduleId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!scheduleId) {\n console.error(\"Usage: hackathon schedules delete <schedule-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete schedule ${scheduleId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/dashboard/schedules/${scheduleId}`)\n console.log(formatSuccess(`Deleted schedule ${scheduleId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,mBACpB,QACA,YACA,SACe;AACf,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,kDAAkD;AAChE,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,mBAAmB,WAAW,IAAI,CAAC;AAC9E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,4BAA4B,aAAa;AAC7D,SAAQ,IAAI,cAAc,oBAAoB,aAAa,CAAC"}
|
package/dist/_chunks/delete5.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/webhooks/delete.ts
|
|
4
4
|
async function runWebhooksDelete(client, webhookId, options) {
|
|
5
5
|
if (!webhookId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon webhooks delete <webhook-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete5.mjs","names":[],"sources":["../../src/commands/webhooks/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runWebhooksDelete(\n client: OatmealClient,\n webhookId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!webhookId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"delete5.mjs","names":[],"sources":["../../src/commands/webhooks/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runWebhooksDelete(\n client: OatmealClient,\n webhookId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!webhookId) {\n console.error(\"Usage: hackathon webhooks delete <webhook-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete webhook ${webhookId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/v1/webhooks/${webhookId}`)\n console.log(formatSuccess(`Deleted webhook ${webhookId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,kBACpB,QACA,WACA,SACe;AACf,KAAI,CAAC,WAAW;AACd,UAAQ,MAAM,gDAAgD;AAC9D,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,kBAAkB,UAAU,IAAI,CAAC;AAC5E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,oBAAoB,YAAY;AACpD,SAAQ,IAAI,cAAc,mBAAmB,YAAY,CAAC"}
|
package/dist/_chunks/get.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { t as resolveHackathonId } from "./resolve.mjs";
|
|
|
3
3
|
//#region src/commands/hackathons/get.ts
|
|
4
4
|
async function runHackathonsGet(client, idOrSlug, options) {
|
|
5
5
|
if (!idOrSlug) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon hackathons get <id-or-slug>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
const id = await resolveHackathonId(client, idOrSlug);
|
package/dist/_chunks/get.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.mjs","names":[],"sources":["../../src/commands/hackathons/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\nexport async function runHackathonsGet(\n client: OatmealClient,\n idOrSlug: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"get.mjs","names":[],"sources":["../../src/commands/hackathons/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\nexport async function runHackathonsGet(\n client: OatmealClient,\n idOrSlug: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage: hackathon hackathons get <id-or-slug>\")\n process.exit(1)\n }\n\n const id = await resolveHackathonId(client, idOrSlug)\n const hackathon = await client.get<Hackathon>(`/api/dashboard/hackathons/${id}`)\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(\n formatDetail([\n { label: \"ID\", value: hackathon.id },\n { label: \"Name\", value: hackathon.name },\n { label: \"Slug\", value: hackathon.slug },\n { label: \"Status\", value: hackathon.status },\n { label: \"Description\", value: hackathon.description },\n { label: \"Starts\", value: hackathon.starts_at },\n { label: \"Ends\", value: hackathon.ends_at },\n { label: \"Registration Opens\", value: hackathon.registration_opens_at },\n { label: \"Registration Closes\", value: hackathon.registration_closes_at },\n { label: \"Created\", value: hackathon.created_at },\n ])\n )\n}\n"],"mappings":";;;AAKA,eAAsB,iBACpB,QACA,UACA,SACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,MAAM,+CAA+C;AAC7D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,KAAK,MAAM,mBAAmB,QAAQ,SAAS;CACrD,MAAM,YAAY,MAAM,OAAO,IAAe,6BAA6B,KAAK;AAEhF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,SAAQ,IACN,aAAa;EACX;GAAE,OAAO;GAAM,OAAO,UAAU;GAAI;EACpC;GAAE,OAAO;GAAQ,OAAO,UAAU;GAAM;EACxC;GAAE,OAAO;GAAQ,OAAO,UAAU;GAAM;EACxC;GAAE,OAAO;GAAU,OAAO,UAAU;GAAQ;EAC5C;GAAE,OAAO;GAAe,OAAO,UAAU;GAAa;EACtD;GAAE,OAAO;GAAU,OAAO,UAAU;GAAW;EAC/C;GAAE,OAAO;GAAQ,OAAO,UAAU;GAAS;EAC3C;GAAE,OAAO;GAAsB,OAAO,UAAU;GAAuB;EACvE;GAAE,OAAO;GAAuB,OAAO,UAAU;GAAwB;EACzE;GAAE,OAAO;GAAW,OAAO,UAAU;;EACtC,CAAC,CACH"}
|
package/dist/_chunks/get2.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { n as formatJson, t as formatDetail } from "../cli.mjs";
|
|
|
2
2
|
//#region src/commands/jobs/get.ts
|
|
3
3
|
async function runJobsGet(client, jobId, options) {
|
|
4
4
|
if (!jobId) {
|
|
5
|
-
console.error("Usage:
|
|
5
|
+
console.error("Usage: hackathon jobs get <job-id>");
|
|
6
6
|
process.exit(1);
|
|
7
7
|
}
|
|
8
8
|
const job = await client.get(`/api/dashboard/jobs/${jobId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get2.mjs","names":[],"sources":["../../src/commands/jobs/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { Job } from \"../../types.js\"\n\nexport async function runJobsGet(\n client: OatmealClient,\n jobId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!jobId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"get2.mjs","names":[],"sources":["../../src/commands/jobs/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { Job } from \"../../types.js\"\n\nexport async function runJobsGet(\n client: OatmealClient,\n jobId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!jobId) {\n console.error(\"Usage: hackathon jobs get <job-id>\")\n process.exit(1)\n }\n\n const job = await client.get<Job>(`/api/dashboard/jobs/${jobId}`)\n\n if (options.json) {\n console.log(formatJson(job))\n return\n }\n\n console.log(\n formatDetail([\n { label: \"ID\", value: job.id },\n { label: \"Type\", value: job.type },\n { label: \"Status\", value: job.status },\n { label: \"Created\", value: job.created_at },\n { label: \"Completed\", value: job.completed_at },\n { label: \"Error\", value: job.error },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,WACpB,QACA,OACA,SACe;AACf,KAAI,CAAC,OAAO;AACV,UAAQ,MAAM,qCAAqC;AACnD,UAAQ,KAAK,EAAE;;CAGjB,MAAM,MAAM,MAAM,OAAO,IAAS,uBAAuB,QAAQ;AAEjE,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,IAAI,CAAC;AAC5B;;AAGF,SAAQ,IACN,aAAa;EACX;GAAE,OAAO;GAAM,OAAO,IAAI;GAAI;EAC9B;GAAE,OAAO;GAAQ,OAAO,IAAI;GAAM;EAClC;GAAE,OAAO;GAAU,OAAO,IAAI;GAAQ;EACtC;GAAE,OAAO;GAAW,OAAO,IAAI;GAAY;EAC3C;GAAE,OAAO;GAAa,OAAO,IAAI;GAAc;EAC/C;GAAE,OAAO;GAAS,OAAO,IAAI;;EAC9B,CAAC,CACH"}
|
package/dist/_chunks/get3.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { i as formatTable, n as formatJson } from "../cli.mjs";
|
|
|
2
2
|
//#region src/commands/results/get.ts
|
|
3
3
|
async function runResultsGet(client, hackathonId, options) {
|
|
4
4
|
if (!hackathonId) {
|
|
5
|
-
console.error("Usage:
|
|
5
|
+
console.error("Usage: hackathon results get <hackathon-id>");
|
|
6
6
|
process.exit(1);
|
|
7
7
|
}
|
|
8
8
|
const data = await client.get(`/api/dashboard/hackathons/${hackathonId}/results`);
|
|
@@ -11,7 +11,7 @@ async function runResultsGet(client, hackathonId, options) {
|
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
if (!data.rankings?.length) {
|
|
14
|
-
console.log("No results available. Run '
|
|
14
|
+
console.log("No results available. Run 'hackathon results calculate <id>' first.");
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
17
|
console.log(formatTable(data.rankings, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get3.mjs","names":[],"sources":["../../src/commands/results/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { ResultsData } from \"../../types.js\"\n\nexport async function runResultsGet(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"get3.mjs","names":[],"sources":["../../src/commands/results/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { ResultsData } from \"../../types.js\"\n\nexport async function runResultsGet(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage: hackathon results get <hackathon-id>\")\n process.exit(1)\n }\n\n const data = await client.get<ResultsData>(\n `/api/dashboard/hackathons/${hackathonId}/results`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.rankings?.length) {\n console.log(\"No results available. Run 'hackathon results calculate <id>' first.\")\n return\n }\n\n console.log(\n formatTable(data.rankings, [\n { key: \"rank\", label: \"#\" },\n { key: \"submission_name\", label: \"Submission\" },\n { key: \"team_name\", label: \"Team\" },\n { key: \"total_score\", label: \"Score\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,cACpB,QACA,aACA,SACe;AACf,KAAI,CAAC,aAAa;AAChB,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,UAC1C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,UAAU,QAAQ;AAC1B,UAAQ,IAAI,sEAAsE;AAClF;;AAGF,SAAQ,IACN,YAAY,KAAK,UAAU;EACzB;GAAE,KAAK;GAAQ,OAAO;GAAK;EAC3B;GAAE,KAAK;GAAmB,OAAO;GAAc;EAC/C;GAAE,KAAK;GAAa,OAAO;GAAQ;EACnC;GAAE,KAAK;GAAe,OAAO;;EAC9B,CAAC,CACH"}
|
package/dist/_chunks/get4.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { n as formatJson, t as formatDetail } from "../cli.mjs";
|
|
|
2
2
|
//#region src/commands/schedules/get.ts
|
|
3
3
|
async function runSchedulesGet(client, scheduleId, options) {
|
|
4
4
|
if (!scheduleId) {
|
|
5
|
-
console.error("Usage:
|
|
5
|
+
console.error("Usage: hackathon schedules get <schedule-id>");
|
|
6
6
|
process.exit(1);
|
|
7
7
|
}
|
|
8
8
|
const schedule = await client.get(`/api/dashboard/schedules/${scheduleId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get4.mjs","names":[],"sources":["../../src/commands/schedules/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { Schedule } from \"../../types.js\"\n\nexport async function runSchedulesGet(\n client: OatmealClient,\n scheduleId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!scheduleId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"get4.mjs","names":[],"sources":["../../src/commands/schedules/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { Schedule } from \"../../types.js\"\n\nexport async function runSchedulesGet(\n client: OatmealClient,\n scheduleId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!scheduleId) {\n console.error(\"Usage: hackathon schedules get <schedule-id>\")\n process.exit(1)\n }\n\n const schedule = await client.get<Schedule>(`/api/dashboard/schedules/${scheduleId}`)\n\n if (options.json) {\n console.log(formatJson(schedule))\n return\n }\n\n console.log(\n formatDetail([\n { label: \"ID\", value: schedule.id },\n { label: \"Name\", value: schedule.name },\n { label: \"Cron\", value: schedule.cron_expression },\n { label: \"Enabled\", value: String(schedule.enabled) },\n { label: \"Last Run\", value: schedule.last_run_at },\n { label: \"Next Run\", value: schedule.next_run_at },\n { label: \"Created\", value: schedule.created_at },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,gBACpB,QACA,YACA,SACe;AACf,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,+CAA+C;AAC7D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,IAAc,4BAA4B,aAAa;AAErF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IACN,aAAa;EACX;GAAE,OAAO;GAAM,OAAO,SAAS;GAAI;EACnC;GAAE,OAAO;GAAQ,OAAO,SAAS;GAAM;EACvC;GAAE,OAAO;GAAQ,OAAO,SAAS;GAAiB;EAClD;GAAE,OAAO;GAAW,OAAO,OAAO,SAAS,QAAA;GAAU;EACrD;GAAE,OAAO;GAAY,OAAO,SAAS;GAAa;EAClD;GAAE,OAAO;GAAY,OAAO,SAAS;GAAa;EAClD;GAAE,OAAO;GAAW,OAAO,SAAS;;EACrC,CAAC,CACH"}
|
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/judging/invitations-cancel.ts
|
|
4
4
|
async function runInvitationsCancel(client, hackathonId, invitationId, options) {
|
|
5
5
|
if (!invitationId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon judging invitations cancel <hackathon-id> <invitation-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitations-cancel.mjs","names":[],"sources":["../../src/commands/judging/invitations-cancel.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runInvitationsCancel(\n client: OatmealClient,\n hackathonId: string,\n invitationId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!invitationId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"invitations-cancel.mjs","names":[],"sources":["../../src/commands/judging/invitations-cancel.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runInvitationsCancel(\n client: OatmealClient,\n hackathonId: string,\n invitationId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!invitationId) {\n console.error(\"Usage: hackathon judging invitations cancel <hackathon-id> <invitation-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Cancel invitation ${invitationId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(\n `/api/dashboard/hackathons/${hackathonId}/judging/invitations/${invitationId}`\n )\n console.log(formatSuccess(`Cancelled invitation ${invitationId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,qBACpB,QACA,aACA,cACA,SACe;AACf,KAAI,CAAC,cAAc;AACjB,UAAQ,MAAM,6EAA6E;AAC3F,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,qBAAqB,aAAa,IAAI,CAAC;AAClF,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OACX,6BAA6B,YAAY,uBAAuB,eACjE;AACD,SAAQ,IAAI,cAAc,wBAAwB,eAAe,CAAC"}
|
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/judging/judges-remove.ts
|
|
4
4
|
async function runJudgesRemove(client, hackathonId, participantId, options) {
|
|
5
5
|
if (!participantId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon judging judges remove <hackathon-id> <participant-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judges-remove.mjs","names":[],"sources":["../../src/commands/judging/judges-remove.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runJudgesRemove(\n client: OatmealClient,\n hackathonId: string,\n participantId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!participantId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"judges-remove.mjs","names":[],"sources":["../../src/commands/judging/judges-remove.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runJudgesRemove(\n client: OatmealClient,\n hackathonId: string,\n participantId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!participantId) {\n console.error(\"Usage: hackathon judging judges remove <hackathon-id> <participant-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Remove judge ${participantId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(\n `/api/dashboard/hackathons/${hackathonId}/judging/judges/${participantId}`\n )\n console.log(formatSuccess(`Removed judge ${participantId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,gBACpB,QACA,aACA,eACA,SACe;AACf,KAAI,CAAC,eAAe;AAClB,UAAQ,MAAM,yEAAyE;AACvF,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,gBAAgB,cAAc,IAAI,CAAC;AAC9E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OACX,6BAA6B,YAAY,kBAAkB,gBAC5D;AACD,SAAQ,IAAI,cAAc,iBAAiB,gBAAgB,CAAC"}
|
package/dist/_chunks/login.mjs
CHANGED
|
@@ -26,15 +26,15 @@ function parseLoginOptions(args) {
|
|
|
26
26
|
}
|
|
27
27
|
async function runLogin(args) {
|
|
28
28
|
const options = parseLoginOptions(args);
|
|
29
|
-
const baseUrl = options.baseUrl ?? "https://
|
|
30
|
-
if (loadConfig() && !options.yes && !options.apiKey && !process.env.
|
|
29
|
+
const baseUrl = options.baseUrl ?? "https://getoatmeal.com";
|
|
30
|
+
if (loadConfig() && !options.yes && !options.apiKey && !process.env.HACKATHON_API_KEY) {
|
|
31
31
|
const overwrite = await p.confirm({ message: "You are already logged in. Overwrite existing config?" });
|
|
32
32
|
if (p.isCancel(overwrite) || !overwrite) {
|
|
33
33
|
p.log.info("Login cancelled.");
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
const key = options.apiKey ?? process.env.
|
|
37
|
+
const key = options.apiKey ?? process.env.HACKATHON_API_KEY;
|
|
38
38
|
if (key) {
|
|
39
39
|
await validateAndSaveKey(key, baseUrl);
|
|
40
40
|
return;
|
|
@@ -100,7 +100,7 @@ async function validateAndSaveKey(apiKey, baseUrl) {
|
|
|
100
100
|
keyId: whoami.keyId,
|
|
101
101
|
scopes: whoami.scopes
|
|
102
102
|
});
|
|
103
|
-
p.log.success(`Logged in! Key saved to ~/.
|
|
103
|
+
p.log.success(`Logged in! Key saved to ~/.hackathon/config.json`);
|
|
104
104
|
p.log.info(`Tenant: ${whoami.tenantId}`);
|
|
105
105
|
p.log.info(`Scopes: ${whoami.scopes.join(", ")}`);
|
|
106
106
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.mjs","names":[],"sources":["../../src/commands/login.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\"\nimport { execSync } from \"node:child_process\"\nimport * as p from \"@clack/prompts\"\nimport { OatmealClient } from \"../client.js\"\nimport { loadConfig, saveConfig } from \"../config.js\"\nimport { AUTH_TIMEOUT_MS, DEFAULT_BASE_URL, POLL_INTERVAL_MS } from \"../constants.js\"\nimport type { CliConfig, WhoAmIResponse } from \"../types.js\"\n\ninterface LoginOptions {\n apiKey?: string\n noBrowser?: boolean\n baseUrl?: string\n yes?: boolean\n}\n\nexport function parseLoginOptions(args: string[]): LoginOptions {\n const options: LoginOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--api-key\":\n options.apiKey = args[++i]\n break\n case \"--no-browser\":\n options.noBrowser = true\n break\n case \"--base-url\":\n options.baseUrl = args[++i]\n break\n case \"--yes\":\n case \"-y\":\n options.yes = true\n break\n }\n }\n return options\n}\n\nexport async function runLogin(args: string[]): Promise<void> {\n const options = parseLoginOptions(args)\n const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL\n\n const existingConfig = loadConfig()\n if (existingConfig && !options.yes && !options.apiKey && !process.env.
|
|
1
|
+
{"version":3,"file":"login.mjs","names":[],"sources":["../../src/commands/login.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\"\nimport { execSync } from \"node:child_process\"\nimport * as p from \"@clack/prompts\"\nimport { OatmealClient } from \"../client.js\"\nimport { loadConfig, saveConfig } from \"../config.js\"\nimport { AUTH_TIMEOUT_MS, DEFAULT_BASE_URL, POLL_INTERVAL_MS } from \"../constants.js\"\nimport type { CliConfig, WhoAmIResponse } from \"../types.js\"\n\ninterface LoginOptions {\n apiKey?: string\n noBrowser?: boolean\n baseUrl?: string\n yes?: boolean\n}\n\nexport function parseLoginOptions(args: string[]): LoginOptions {\n const options: LoginOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--api-key\":\n options.apiKey = args[++i]\n break\n case \"--no-browser\":\n options.noBrowser = true\n break\n case \"--base-url\":\n options.baseUrl = args[++i]\n break\n case \"--yes\":\n case \"-y\":\n options.yes = true\n break\n }\n }\n return options\n}\n\nexport async function runLogin(args: string[]): Promise<void> {\n const options = parseLoginOptions(args)\n const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL\n\n const existingConfig = loadConfig()\n if (existingConfig && !options.yes && !options.apiKey && !process.env.HACKATHON_API_KEY) {\n const overwrite = await p.confirm({\n message: \"You are already logged in. Overwrite existing config?\",\n })\n if (p.isCancel(overwrite) || !overwrite) {\n p.log.info(\"Login cancelled.\")\n return\n }\n }\n\n const key = options.apiKey ?? process.env.HACKATHON_API_KEY\n if (key) {\n await validateAndSaveKey(key, baseUrl)\n return\n }\n\n if (options.noBrowser || !process.stdout.isTTY) {\n const pastedKey = await p.password({ message: \"Paste your API key:\" })\n if (p.isCancel(pastedKey)) {\n p.log.info(\"Login cancelled.\")\n return\n }\n await validateAndSaveKey(pastedKey, baseUrl)\n return\n }\n\n const deviceToken = randomBytes(32).toString(\"hex\")\n const authUrl = `${baseUrl}/cli-auth?token=${deviceToken}`\n\n p.log.info(`Opening browser to sign in...`)\n p.log.info(authUrl)\n\n try {\n openBrowser(authUrl)\n } catch {\n p.log.warn(\"Could not open browser. Visit the URL above manually.\")\n }\n\n const spinner = p.spinner()\n spinner.start(\"Waiting for authentication...\")\n\n try {\n const apiKey = await pollForKey(baseUrl, deviceToken)\n spinner.stop(\"Authenticated!\")\n await validateAndSaveKey(apiKey, baseUrl)\n } catch (error) {\n spinner.stop(\"Authentication failed.\")\n throw error\n }\n}\n\nfunction openBrowser(url: string): void {\n const platform = process.platform\n const cmd =\n platform === \"darwin\"\n ? \"open\"\n : platform === \"win32\"\n ? \"start\"\n : \"xdg-open\"\n execSync(`${cmd} \"${url}\"`, { stdio: \"ignore\" })\n}\n\nasync function pollForKey(baseUrl: string, deviceToken: string): Promise<string> {\n const client = new OatmealClient({ baseUrl })\n const start = Date.now()\n\n while (Date.now() - start < AUTH_TIMEOUT_MS) {\n const result = await client.get<{ status: string; apiKey?: string }>(\n \"/api/public/cli-auth/poll\",\n { params: { token: deviceToken } }\n )\n\n if (result.status === \"complete\" && result.apiKey) {\n return result.apiKey\n }\n\n if (result.status === \"expired\") {\n throw new Error(\"Authentication session expired. Please try again.\")\n }\n\n await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS))\n }\n\n throw new Error(\"Authentication timed out after 5 minutes. Please try again.\")\n}\n\nasync function validateAndSaveKey(apiKey: string, baseUrl: string): Promise<void> {\n const client = new OatmealClient({ baseUrl, apiKey })\n\n const spinner = p.spinner()\n spinner.start(\"Validating API key...\")\n\n try {\n const whoami = await client.get<WhoAmIResponse>(\"/api/v1/whoami\")\n spinner.stop(\"Key validated!\")\n\n const config: CliConfig = {\n apiKey,\n baseUrl,\n tenantId: whoami.tenantId,\n keyId: whoami.keyId,\n scopes: whoami.scopes,\n }\n\n saveConfig(config)\n\n p.log.success(`Logged in! Key saved to ~/.hackathon/config.json`)\n p.log.info(`Tenant: ${whoami.tenantId}`)\n p.log.info(`Scopes: ${whoami.scopes.join(\", \")}`)\n } catch (error) {\n spinner.stop(\"Validation failed.\")\n throw error\n }\n}\n"],"mappings":";;;;;;;AAeA,SAAgB,kBAAkB,MAA8B;CAC9D,MAAM,UAAwB,EAAE;AAChC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE;AACxB;EACF,KAAK;AACH,WAAQ,YAAY;AACpB;EACF,KAAK;AACH,WAAQ,UAAU,KAAK,EAAE;AACzB;EACF,KAAK;EACL,KAAK;AACH,WAAQ,MAAM;AACd;;AAGN,QAAO;;AAGT,eAAsB,SAAS,MAA+B;CAC5D,MAAM,UAAU,kBAAkB,KAAK;CACvC,MAAM,UAAU,QAAQ,WAAA;AAGxB,KADuB,YAAY,IACb,CAAC,QAAQ,OAAO,CAAC,QAAQ,UAAU,CAAC,QAAQ,IAAI,mBAAmB;EACvF,MAAM,YAAY,MAAM,EAAE,QAAQ,EAChC,SAAS,yDACV,CAAC;AACF,MAAI,EAAE,SAAS,UAAU,IAAI,CAAC,WAAW;AACvC,KAAE,IAAI,KAAK,mBAAmB;AAC9B;;;CAIJ,MAAM,MAAM,QAAQ,UAAU,QAAQ,IAAI;AAC1C,KAAI,KAAK;AACP,QAAM,mBAAmB,KAAK,QAAQ;AACtC;;AAGF,KAAI,QAAQ,aAAa,CAAC,QAAQ,OAAO,OAAO;EAC9C,MAAM,YAAY,MAAM,EAAE,SAAS,EAAE,SAAS,uBAAuB,CAAC;AACtE,MAAI,EAAE,SAAS,UAAU,EAAE;AACzB,KAAE,IAAI,KAAK,mBAAmB;AAC9B;;AAEF,QAAM,mBAAmB,WAAW,QAAQ;AAC5C;;CAGF,MAAM,cAAc,YAAY,GAAG,CAAC,SAAS,MAAM;CACnD,MAAM,UAAU,GAAG,QAAQ,kBAAkB;AAE7C,GAAE,IAAI,KAAK,gCAAgC;AAC3C,GAAE,IAAI,KAAK,QAAQ;AAEnB,KAAI;AACF,cAAY,QAAQ;SACd;AACN,IAAE,IAAI,KAAK,wDAAwD;;CAGrE,MAAM,UAAU,EAAE,SAAS;AAC3B,SAAQ,MAAM,gCAAgC;AAE9C,KAAI;EACF,MAAM,SAAS,MAAM,WAAW,SAAS,YAAY;AACrD,UAAQ,KAAK,iBAAiB;AAC9B,QAAM,mBAAmB,QAAQ,QAAQ;UAClC,OAAO;AACd,UAAQ,KAAK,yBAAyB;AACtC,QAAM;;;AAIV,SAAS,YAAY,KAAmB;CACtC,MAAM,WAAW,QAAQ;AAOzB,UAAS,GALP,aAAa,WACT,SACA,aAAa,UACX,UACA,WACQ,IAAI,IAAI,IAAI,EAAE,OAAO,UAAU,CAAC;;AAGlD,eAAe,WAAW,SAAiB,aAAsC;CAC/E,MAAM,SAAS,IAAI,cAAc,EAAE,SAAS,CAAC;CAC7C,MAAM,QAAQ,KAAK,KAAK;AAExB,QAAO,KAAK,KAAK,GAAG,QAAQ,iBAAiB;EAC3C,MAAM,SAAS,MAAM,OAAO,IAC1B,6BACA,EAAE,QAAQ,EAAE,OAAO,aAAa,EAAE,CACnC;AAED,MAAI,OAAO,WAAW,cAAc,OAAO,OACzC,QAAO,OAAO;AAGhB,MAAI,OAAO,WAAW,UACpB,OAAM,IAAI,MAAM,oDAAoD;AAGtE,QAAM,IAAI,SAAS,YAAY,WAAW,SAAS,iBAAiB,CAAC;;AAGvE,OAAM,IAAI,MAAM,8DAA8D;;AAGhF,eAAe,mBAAmB,QAAgB,SAAgC;CAChF,MAAM,SAAS,IAAI,cAAc;EAAE;EAAS;EAAQ,CAAC;CAErD,MAAM,UAAU,EAAE,SAAS;AAC3B,SAAQ,MAAM,wBAAwB;AAEtC,KAAI;EACF,MAAM,SAAS,MAAM,OAAO,IAAoB,iBAAiB;AACjE,UAAQ,KAAK,iBAAiB;AAU9B,aAR0B;GACxB;GACA;GACA,UAAU,OAAO;GACjB,OAAO,OAAO;GACd,QAAQ,OAAO;GAChB,CAEiB;AAElB,IAAE,IAAI,QAAQ,mDAAmD;AACjE,IAAE,IAAI,KAAK,WAAW,OAAO,WAAW;AACxC,IAAE,IAAI,KAAK,WAAW,OAAO,OAAO,KAAK,KAAK,GAAG;UAC1C,OAAO;AACd,UAAQ,KAAK,qBAAqB;AAClC,QAAM"}
|
package/dist/_chunks/org.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { n as formatJson, t as formatDetail } from "../cli.mjs";
|
|
|
2
2
|
//#region src/commands/browse/org.ts
|
|
3
3
|
async function runBrowseOrg(client, slug, options) {
|
|
4
4
|
if (!slug) {
|
|
5
|
-
console.error("Usage:
|
|
5
|
+
console.error("Usage: hackathon browse org <slug>");
|
|
6
6
|
process.exit(1);
|
|
7
7
|
}
|
|
8
8
|
const data = await client.get(`/api/public/orgs/${encodeURIComponent(slug)}`);
|
package/dist/_chunks/org.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.mjs","names":[],"sources":["../../src/commands/browse/org.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { OrgProfile } from \"../../types.js\"\n\nexport async function runBrowseOrg(\n client: OatmealClient,\n slug: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!slug) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"org.mjs","names":[],"sources":["../../src/commands/browse/org.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatDetail, formatJson } from \"../../output.js\"\nimport type { OrgProfile } from \"../../types.js\"\n\nexport async function runBrowseOrg(\n client: OatmealClient,\n slug: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!slug) {\n console.error(\"Usage: hackathon browse org <slug>\")\n process.exit(1)\n }\n\n const data = await client.get<OrgProfile>(\n `/api/public/orgs/${encodeURIComponent(slug)}`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n console.log(\n formatDetail([\n { label: \"Name\", value: data.name },\n { label: \"Slug\", value: data.slug },\n { label: \"Description\", value: data.description },\n { label: \"Hackathons\", value: String(data.hackathon_count ?? 0) },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,aACpB,QACA,MACA,SACe;AACf,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,qCAAqC;AACnD,UAAQ,KAAK,EAAE;;CAGjB,MAAM,OAAO,MAAM,OAAO,IACxB,oBAAoB,mBAAmB,KAAK,GAC7C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,SAAQ,IACN,aAAa;EACX;GAAE,OAAO;GAAQ,OAAO,KAAK;GAAM;EACnC;GAAE,OAAO;GAAQ,OAAO,KAAK;GAAM;EACnC;GAAE,OAAO;GAAe,OAAO,KAAK;GAAa;EACjD;GAAE,OAAO;GAAc,OAAO,OAAO,KAAK,mBAAmB,EAAA;;EAC9D,CAAC,CACH"}
|
package/dist/_chunks/publish.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import * as p from "@clack/prompts";
|
|
|
3
3
|
//#region src/commands/results/publish.ts
|
|
4
4
|
async function runResultsPublish(client, hackathonId, options) {
|
|
5
5
|
if (!hackathonId) {
|
|
6
|
-
console.error("Usage:
|
|
6
|
+
console.error("Usage: hackathon results publish <hackathon-id>");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
if (!options.yes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.mjs","names":[],"sources":["../../src/commands/results/publish.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runResultsPublish(\n client: OatmealClient,\n hackathonId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage:
|
|
1
|
+
{"version":3,"file":"publish.mjs","names":[],"sources":["../../src/commands/results/publish.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runResultsPublish(\n client: OatmealClient,\n hackathonId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage: hackathon results publish <hackathon-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({\n message: \"Publish results? This will make them visible to participants.\",\n })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.post(`/api/dashboard/hackathons/${hackathonId}/results/publish`)\n console.log(formatSuccess(\"Results published\"))\n}\n"],"mappings":";;;AAIA,eAAsB,kBACpB,QACA,aACA,SACe;AACf,KAAI,CAAC,aAAa;AAChB,UAAQ,MAAM,kDAAkD;AAChE,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAC9B,SAAS,iEACV,CAAC;AACF,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,KAAK,6BAA6B,YAAY,kBAAkB;AAC7E,SAAQ,IAAI,cAAc,oBAAoB,CAAC"}
|
package/dist/_chunks/result.mjs
CHANGED
|
@@ -15,7 +15,7 @@ function parseJobResultOptions(args) {
|
|
|
15
15
|
}
|
|
16
16
|
async function runJobsResult(client, jobId, args) {
|
|
17
17
|
if (!jobId) {
|
|
18
|
-
console.error("Usage:
|
|
18
|
+
console.error("Usage: hackathon jobs result <job-id>");
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
21
|
if (parseJobResultOptions(args).poll) {
|