@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.
Files changed (65) hide show
  1. package/dist/_chunks/assign.mjs +1 -1
  2. package/dist/_chunks/assign.mjs.map +1 -1
  3. package/dist/_chunks/assignments-delete.mjs +1 -1
  4. package/dist/_chunks/assignments-delete.mjs.map +1 -1
  5. package/dist/_chunks/calculate.mjs +1 -1
  6. package/dist/_chunks/calculate.mjs.map +1 -1
  7. package/dist/_chunks/cancel.mjs +1 -1
  8. package/dist/_chunks/cancel.mjs.map +1 -1
  9. package/dist/_chunks/config.mjs +5 -5
  10. package/dist/_chunks/config.mjs.map +1 -1
  11. package/dist/_chunks/constants.mjs +2 -2
  12. package/dist/_chunks/constants.mjs.map +1 -1
  13. package/dist/_chunks/criteria-delete.mjs +1 -1
  14. package/dist/_chunks/criteria-delete.mjs.map +1 -1
  15. package/dist/_chunks/criteria-update.mjs +1 -1
  16. package/dist/_chunks/criteria-update.mjs.map +1 -1
  17. package/dist/_chunks/delete.mjs +1 -1
  18. package/dist/_chunks/delete.mjs.map +1 -1
  19. package/dist/_chunks/delete2.mjs +1 -1
  20. package/dist/_chunks/delete2.mjs.map +1 -1
  21. package/dist/_chunks/delete3.mjs +1 -1
  22. package/dist/_chunks/delete3.mjs.map +1 -1
  23. package/dist/_chunks/delete4.mjs +1 -1
  24. package/dist/_chunks/delete4.mjs.map +1 -1
  25. package/dist/_chunks/delete5.mjs +1 -1
  26. package/dist/_chunks/delete5.mjs.map +1 -1
  27. package/dist/_chunks/get.mjs +1 -1
  28. package/dist/_chunks/get.mjs.map +1 -1
  29. package/dist/_chunks/get2.mjs +1 -1
  30. package/dist/_chunks/get2.mjs.map +1 -1
  31. package/dist/_chunks/get3.mjs +2 -2
  32. package/dist/_chunks/get3.mjs.map +1 -1
  33. package/dist/_chunks/get4.mjs +1 -1
  34. package/dist/_chunks/get4.mjs.map +1 -1
  35. package/dist/_chunks/invitations-cancel.mjs +1 -1
  36. package/dist/_chunks/invitations-cancel.mjs.map +1 -1
  37. package/dist/_chunks/judges-remove.mjs +1 -1
  38. package/dist/_chunks/judges-remove.mjs.map +1 -1
  39. package/dist/_chunks/login.mjs +4 -4
  40. package/dist/_chunks/login.mjs.map +1 -1
  41. package/dist/_chunks/org.mjs +1 -1
  42. package/dist/_chunks/org.mjs.map +1 -1
  43. package/dist/_chunks/publish.mjs +1 -1
  44. package/dist/_chunks/publish.mjs.map +1 -1
  45. package/dist/_chunks/result.mjs +1 -1
  46. package/dist/_chunks/result.mjs.map +1 -1
  47. package/dist/_chunks/results.mjs +1 -1
  48. package/dist/_chunks/results.mjs.map +1 -1
  49. package/dist/_chunks/submissions.mjs +1 -1
  50. package/dist/_chunks/submissions.mjs.map +1 -1
  51. package/dist/_chunks/unassign.mjs +1 -1
  52. package/dist/_chunks/unassign.mjs.map +1 -1
  53. package/dist/_chunks/unpublish.mjs +1 -1
  54. package/dist/_chunks/unpublish.mjs.map +1 -1
  55. package/dist/_chunks/update.mjs +1 -1
  56. package/dist/_chunks/update.mjs.map +1 -1
  57. package/dist/_chunks/update2.mjs +1 -1
  58. package/dist/_chunks/update2.mjs.map +1 -1
  59. package/dist/_chunks/update3.mjs +1 -1
  60. package/dist/_chunks/update3.mjs.map +1 -1
  61. package/dist/_chunks/update4.mjs +1 -1
  62. package/dist/_chunks/update4.mjs.map +1 -1
  63. package/dist/cli.mjs +8 -8
  64. package/dist/cli.mjs.map +1 -1
  65. package/package.json +3 -3
@@ -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: oatmeal prizes assign <hackathon-id> <prize-id> --submission <id>");
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: oatmeal 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,2EAA2E;AACzF,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"}
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: oatmeal judging assignments delete <hackathon-id> <assignment-id>");
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: oatmeal 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,2EAA2E;AACzF,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"}
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: oatmeal results calculate <hackathon-id>");
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: oatmeal 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,kDAAkD;AAChE,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"}
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"}
@@ -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: oatmeal jobs cancel <job-id>");
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: oatmeal 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,sCAAsC;AACpD,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"}
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"}
@@ -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 \"oatmeal login\" first.");
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.OATMEAL_API_KEY;
39
- const envUrl = process.env.OATMEAL_BASE_URL;
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://oatmeal.app"
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 "oatmeal login" again.`);
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 \"oatmeal 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.OATMEAL_API_KEY\n const envUrl = process.env.OATMEAL_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 \"oatmeal 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,kDAAgD;AACjE,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,4CACvC;;;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"}
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://oatmeal.app";
6
- const CONFIG_DIR = join(homedir(), ".oatmeal");
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://oatmeal.app\"\nexport const CONFIG_DIR = join(homedir(), \".oatmeal\")\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,WAAW;AACrD,MAAa,cAAc,KAAK,YAAY,cAAc;AAC1D,MAAa,qBAAqB;AAClC,MAAa,mBAAmB;AAChC,MAAa,kBAAkB"}
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: oatmeal judging criteria delete <hackathon-id> <criteria-id>");
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: oatmeal 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,sEAAsE;AACpF,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"}
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: oatmeal judging criteria update <hackathon-id> <criteria-id> [--name ...] [--max-score ...]");
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: oatmeal 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,qGAAqG;AACnH,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"}
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"}
@@ -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: oatmeal hackathons delete <id-or-slug>");
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: oatmeal 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,gDAAgD;AAC9D,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"}
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"}
@@ -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: oatmeal judge-display delete <hackathon-id> <profile-id>");
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: oatmeal 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,kEAAkE;AAChF,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"}
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"}
@@ -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: oatmeal prizes delete <hackathon-id> <prize-id>");
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: oatmeal 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,yDAAyD;AACvE,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"}
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"}
@@ -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: oatmeal schedules delete <schedule-id>");
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: oatmeal 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,gDAAgD;AAC9D,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"}
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"}
@@ -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: oatmeal webhooks delete <webhook-id>");
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: oatmeal 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,8CAA8C;AAC5D,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"}
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"}
@@ -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: oatmeal hackathons get <id-or-slug>");
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);
@@ -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: oatmeal 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,6CAA6C;AAC3D,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"}
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"}
@@ -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: oatmeal jobs get <job-id>");
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: oatmeal 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,mCAAmC;AACjD,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"}
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"}
@@ -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: oatmeal results get <hackathon-id>");
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 'oatmeal results calculate <id>' first.");
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: oatmeal 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 'oatmeal 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,4CAA4C;AAC1D,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,oEAAoE;AAChF;;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"}
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"}
@@ -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: oatmeal schedules get <schedule-id>");
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: oatmeal 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,6CAA6C;AAC3D,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"}
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: oatmeal judging invitations cancel <hackathon-id> <invitation-id>");
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: oatmeal 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,2EAA2E;AACzF,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"}
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: oatmeal judging judges remove <hackathon-id> <participant-id>");
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: oatmeal 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,uEAAuE;AACrF,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"}
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"}
@@ -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://oatmeal.app";
30
- if (loadConfig() && !options.yes && !options.apiKey && !process.env.OATMEAL_API_KEY) {
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.OATMEAL_API_KEY;
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 ~/.oatmeal/config.json`);
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.OATMEAL_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.OATMEAL_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 ~/.oatmeal/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":"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"}
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":"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"}
@@ -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: oatmeal browse org <slug>");
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)}`);
@@ -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: oatmeal 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,mCAAmC;AACjD,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"}
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"}
@@ -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: oatmeal results publish <hackathon-id>");
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: oatmeal 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,gDAAgD;AAC9D,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"}
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"}
@@ -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: oatmeal jobs result <job-id>");
18
+ console.error("Usage: hackathon jobs result <job-id>");
19
19
  process.exit(1);
20
20
  }
21
21
  if (parseJobResultOptions(args).poll) {