@agi-ventures-canada/hackathon-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/bin/cli.mjs +11 -0
  2. package/dist/_chunks/assign.mjs +35 -0
  3. package/dist/_chunks/assign.mjs.map +1 -0
  4. package/dist/_chunks/assignments-create.mjs +37 -0
  5. package/dist/_chunks/assignments-create.mjs.map +1 -0
  6. package/dist/_chunks/assignments-delete.mjs +22 -0
  7. package/dist/_chunks/assignments-delete.mjs.map +1 -0
  8. package/dist/_chunks/assignments-list.mjs +35 -0
  9. package/dist/_chunks/assignments-list.mjs.map +1 -0
  10. package/dist/_chunks/auto-assign.mjs +31 -0
  11. package/dist/_chunks/auto-assign.mjs.map +1 -0
  12. package/dist/_chunks/calculate.mjs +18 -0
  13. package/dist/_chunks/calculate.mjs.map +1 -0
  14. package/dist/_chunks/cancel.mjs +22 -0
  15. package/dist/_chunks/cancel.mjs.map +1 -0
  16. package/dist/_chunks/config.mjs +70 -0
  17. package/dist/_chunks/config.mjs.map +1 -0
  18. package/dist/_chunks/constants.mjs +14 -0
  19. package/dist/_chunks/constants.mjs.map +1 -0
  20. package/dist/_chunks/create.mjs +66 -0
  21. package/dist/_chunks/create.mjs.map +1 -0
  22. package/dist/_chunks/create2.mjs +47 -0
  23. package/dist/_chunks/create2.mjs.map +1 -0
  24. package/dist/_chunks/create3.mjs +51 -0
  25. package/dist/_chunks/create3.mjs.map +1 -0
  26. package/dist/_chunks/create4.mjs +55 -0
  27. package/dist/_chunks/create4.mjs.map +1 -0
  28. package/dist/_chunks/create5.mjs +60 -0
  29. package/dist/_chunks/create5.mjs.map +1 -0
  30. package/dist/_chunks/create6.mjs +57 -0
  31. package/dist/_chunks/create6.mjs.map +1 -0
  32. package/dist/_chunks/criteria-create.mjs +77 -0
  33. package/dist/_chunks/criteria-create.mjs.map +1 -0
  34. package/dist/_chunks/criteria-delete.mjs +22 -0
  35. package/dist/_chunks/criteria-delete.mjs.map +1 -0
  36. package/dist/_chunks/criteria-list.mjs +35 -0
  37. package/dist/_chunks/criteria-list.mjs.map +1 -0
  38. package/dist/_chunks/criteria-update.mjs +49 -0
  39. package/dist/_chunks/criteria-update.mjs.map +1 -0
  40. package/dist/_chunks/delete.mjs +24 -0
  41. package/dist/_chunks/delete.mjs.map +1 -0
  42. package/dist/_chunks/delete2.mjs +22 -0
  43. package/dist/_chunks/delete2.mjs.map +1 -0
  44. package/dist/_chunks/delete3.mjs +22 -0
  45. package/dist/_chunks/delete3.mjs.map +1 -0
  46. package/dist/_chunks/delete4.mjs +22 -0
  47. package/dist/_chunks/delete4.mjs.map +1 -0
  48. package/dist/_chunks/delete5.mjs +22 -0
  49. package/dist/_chunks/delete5.mjs.map +1 -0
  50. package/dist/_chunks/get.mjs +61 -0
  51. package/dist/_chunks/get.mjs.map +1 -0
  52. package/dist/_chunks/get2.mjs +43 -0
  53. package/dist/_chunks/get2.mjs.map +1 -0
  54. package/dist/_chunks/get3.mjs +39 -0
  55. package/dist/_chunks/get3.mjs.map +1 -0
  56. package/dist/_chunks/get4.mjs +47 -0
  57. package/dist/_chunks/get4.mjs.map +1 -0
  58. package/dist/_chunks/hackathons.mjs +64 -0
  59. package/dist/_chunks/hackathons.mjs.map +1 -0
  60. package/dist/_chunks/invitations-cancel.mjs +22 -0
  61. package/dist/_chunks/invitations-cancel.mjs.map +1 -0
  62. package/dist/_chunks/invitations-list.mjs +31 -0
  63. package/dist/_chunks/invitations-list.mjs.map +1 -0
  64. package/dist/_chunks/judges-add.mjs +37 -0
  65. package/dist/_chunks/judges-add.mjs.map +1 -0
  66. package/dist/_chunks/judges-list.mjs +35 -0
  67. package/dist/_chunks/judges-list.mjs.map +1 -0
  68. package/dist/_chunks/judges-remove.mjs +22 -0
  69. package/dist/_chunks/judges-remove.mjs.map +1 -0
  70. package/dist/_chunks/list.mjs +39 -0
  71. package/dist/_chunks/list.mjs.map +1 -0
  72. package/dist/_chunks/list2.mjs +37 -0
  73. package/dist/_chunks/list2.mjs.map +1 -0
  74. package/dist/_chunks/list3.mjs +31 -0
  75. package/dist/_chunks/list3.mjs.map +1 -0
  76. package/dist/_chunks/list4.mjs +35 -0
  77. package/dist/_chunks/list4.mjs.map +1 -0
  78. package/dist/_chunks/list5.mjs +39 -0
  79. package/dist/_chunks/list5.mjs.map +1 -0
  80. package/dist/_chunks/list6.mjs +40 -0
  81. package/dist/_chunks/list6.mjs.map +1 -0
  82. package/dist/_chunks/login.mjs +114 -0
  83. package/dist/_chunks/login.mjs.map +1 -0
  84. package/dist/_chunks/logout.mjs +16 -0
  85. package/dist/_chunks/logout.mjs.map +1 -0
  86. package/dist/_chunks/org.mjs +35 -0
  87. package/dist/_chunks/org.mjs.map +1 -0
  88. package/dist/_chunks/pick-results.mjs +35 -0
  89. package/dist/_chunks/pick-results.mjs.map +1 -0
  90. package/dist/_chunks/publish.mjs +22 -0
  91. package/dist/_chunks/publish.mjs.map +1 -0
  92. package/dist/_chunks/reorder.mjs +16 -0
  93. package/dist/_chunks/reorder.mjs.map +1 -0
  94. package/dist/_chunks/reorder2.mjs +16 -0
  95. package/dist/_chunks/reorder2.mjs.map +1 -0
  96. package/dist/_chunks/resolve.mjs +15 -0
  97. package/dist/_chunks/resolve.mjs.map +1 -0
  98. package/dist/_chunks/result.mjs +46 -0
  99. package/dist/_chunks/result.mjs.map +1 -0
  100. package/dist/_chunks/results.mjs +43 -0
  101. package/dist/_chunks/results.mjs.map +1 -0
  102. package/dist/_chunks/submissions.mjs +35 -0
  103. package/dist/_chunks/submissions.mjs.map +1 -0
  104. package/dist/_chunks/unassign.mjs +22 -0
  105. package/dist/_chunks/unassign.mjs.map +1 -0
  106. package/dist/_chunks/unpublish.mjs +22 -0
  107. package/dist/_chunks/unpublish.mjs.map +1 -0
  108. package/dist/_chunks/update.mjs +47 -0
  109. package/dist/_chunks/update.mjs.map +1 -0
  110. package/dist/_chunks/update2.mjs +45 -0
  111. package/dist/_chunks/update2.mjs.map +1 -0
  112. package/dist/_chunks/update3.mjs +49 -0
  113. package/dist/_chunks/update3.mjs.map +1 -0
  114. package/dist/_chunks/update4.mjs +48 -0
  115. package/dist/_chunks/update4.mjs.map +1 -0
  116. package/dist/_chunks/whoami.mjs +31 -0
  117. package/dist/_chunks/whoami.mjs.map +1 -0
  118. package/dist/cli.d.mts +1 -0
  119. package/dist/cli.mjs +711 -0
  120. package/dist/cli.mjs.map +1 -0
  121. package/package.json +35 -0
package/bin/cli.mjs ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+
3
+ // Enable compile cache for faster subsequent runs (Node.js 22+)
4
+ if (process.features?.module_compile_cache) {
5
+ try {
6
+ const { enableCompileCache } = await import("node:module")
7
+ enableCompileCache?.()
8
+ } catch {}
9
+ }
10
+
11
+ import("../dist/cli.mjs")
@@ -0,0 +1,35 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/prizes/assign.ts
3
+ function parseAssignOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--submission":
7
+ options.submission = args[++i];
8
+ break;
9
+ case "--json":
10
+ options.json = true;
11
+ break;
12
+ }
13
+ return options;
14
+ }
15
+ async function runPrizesAssign(client, hackathonId, prizeId, args) {
16
+ if (!prizeId) {
17
+ console.error("Usage: oatmeal prizes assign <hackathon-id> <prize-id> --submission <id>");
18
+ process.exit(1);
19
+ }
20
+ const options = parseAssignOptions(args);
21
+ if (!options.submission) {
22
+ console.error("Error: --submission is required");
23
+ process.exit(1);
24
+ }
25
+ const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/prizes/${prizeId}/assign`, { submission_id: options.submission });
26
+ if (options.json) {
27
+ console.log(formatJson(result));
28
+ return;
29
+ }
30
+ console.log(formatSuccess(`Assigned prize ${prizeId} to submission ${options.submission}`));
31
+ }
32
+ //#endregion
33
+ export { runPrizesAssign };
34
+
35
+ //# sourceMappingURL=assign.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,37 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/judging/assignments-create.ts
3
+ function parseAssignmentCreateOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--judge":
7
+ options.judge = args[++i];
8
+ break;
9
+ case "--submission":
10
+ options.submission = args[++i];
11
+ break;
12
+ case "--json":
13
+ options.json = true;
14
+ break;
15
+ }
16
+ return options;
17
+ }
18
+ async function runAssignmentsCreate(client, hackathonId, args) {
19
+ const options = parseAssignmentCreateOptions(args);
20
+ if (!options.judge || !options.submission) {
21
+ console.error("Error: --judge and --submission are required");
22
+ process.exit(1);
23
+ }
24
+ const assignment = await client.post(`/api/dashboard/hackathons/${hackathonId}/judging/assignments`, {
25
+ judge_id: options.judge,
26
+ submission_id: options.submission
27
+ });
28
+ if (options.json) {
29
+ console.log(formatJson(assignment));
30
+ return;
31
+ }
32
+ console.log(formatSuccess(`Created assignment ${assignment.id}`));
33
+ }
34
+ //#endregion
35
+ export { runAssignmentsCreate };
36
+
37
+ //# sourceMappingURL=assignments-create.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignments-create.mjs","names":[],"sources":["../../src/commands/judging/assignments-create.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgeAssignment } from \"../../types.js\"\n\ninterface AssignmentCreateOptions {\n judge?: string\n submission?: string\n json?: boolean\n}\n\nexport function parseAssignmentCreateOptions(args: string[]): AssignmentCreateOptions {\n const options: AssignmentCreateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--judge\":\n options.judge = args[++i]\n break\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 runAssignmentsCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseAssignmentCreateOptions(args)\n\n if (!options.judge || !options.submission) {\n console.error(\"Error: --judge and --submission are required\")\n process.exit(1)\n }\n\n const assignment = await client.post<JudgeAssignment>(\n `/api/dashboard/hackathons/${hackathonId}/judging/assignments`,\n { judge_id: options.judge, submission_id: options.submission }\n )\n\n if (options.json) {\n console.log(formatJson(assignment))\n return\n }\n\n console.log(formatSuccess(`Created assignment ${assignment.id}`))\n}\n"],"mappings":";;AAUA,SAAgB,6BAA6B,MAAyC;CACpF,MAAM,UAAmC,EAAE;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,aAAa,KAAK,EAAE;AAC5B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,qBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,6BAA6B,KAAK;AAElD,KAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,YAAY;AACzC,UAAQ,MAAM,+CAA+C;AAC7D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,aAAa,MAAM,OAAO,KAC9B,6BAA6B,YAAY,uBACzC;EAAE,UAAU,QAAQ;EAAO,eAAe,QAAQ;EAAY,CAC/D;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,WAAW,CAAC;AACnC;;AAGF,SAAQ,IAAI,cAAc,sBAAsB,WAAW,KAAK,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/judging/assignments-delete.ts
4
+ async function runAssignmentsDelete(client, hackathonId, assignmentId, options) {
5
+ if (!assignmentId) {
6
+ console.error("Usage: oatmeal judging assignments delete <hackathon-id> <assignment-id>");
7
+ process.exit(1);
8
+ }
9
+ if (!options.yes) {
10
+ const confirm = await p.confirm({ message: `Delete assignment ${assignmentId}?` });
11
+ if (p.isCancel(confirm) || !confirm) {
12
+ p.log.info("Cancelled.");
13
+ return;
14
+ }
15
+ }
16
+ await client.delete(`/api/dashboard/hackathons/${hackathonId}/judging/assignments/${assignmentId}`);
17
+ console.log(formatSuccess(`Deleted assignment ${assignmentId}`));
18
+ }
19
+ //#endregion
20
+ export { runAssignmentsDelete };
21
+
22
+ //# sourceMappingURL=assignments-delete.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,35 @@
1
+ import { i as formatTable, n as formatJson } from "../cli.mjs";
2
+ //#region src/commands/judging/assignments-list.ts
3
+ async function runAssignmentsList(client, hackathonId, options) {
4
+ const data = await client.get(`/api/dashboard/hackathons/${hackathonId}/judging/assignments`);
5
+ if (options.json) {
6
+ console.log(formatJson(data));
7
+ return;
8
+ }
9
+ if (!data.assignments?.length) {
10
+ console.log("No assignments found.");
11
+ return;
12
+ }
13
+ console.log(formatTable(data.assignments, [
14
+ {
15
+ key: "judge_name",
16
+ label: "Judge"
17
+ },
18
+ {
19
+ key: "submission_name",
20
+ label: "Submission"
21
+ },
22
+ {
23
+ key: "status",
24
+ label: "Status"
25
+ },
26
+ {
27
+ key: "scored_at",
28
+ label: "Scored At"
29
+ }
30
+ ]));
31
+ }
32
+ //#endregion
33
+ export { runAssignmentsList };
34
+
35
+ //# sourceMappingURL=assignments-list.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignments-list.mjs","names":[],"sources":["../../src/commands/judging/assignments-list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { JudgeAssignment } from \"../../types.js\"\n\nexport async function runAssignmentsList(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n const data = await client.get<{ assignments: JudgeAssignment[] }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/assignments`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.assignments?.length) {\n console.log(\"No assignments found.\")\n return\n }\n\n console.log(\n formatTable(data.assignments, [\n { key: \"judge_name\", label: \"Judge\" },\n { key: \"submission_name\", label: \"Submission\" },\n { key: \"status\", label: \"Status\" },\n { key: \"scored_at\", label: \"Scored At\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,mBACpB,QACA,aACA,SACe;CACf,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,sBAC1C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,aAAa,QAAQ;AAC7B,UAAQ,IAAI,wBAAwB;AACpC;;AAGF,SAAQ,IACN,YAAY,KAAK,aAAa;EAC5B;GAAE,KAAK;GAAc,OAAO;GAAS;EACrC;GAAE,KAAK;GAAmB,OAAO;GAAc;EAC/C;GAAE,KAAK;GAAU,OAAO;GAAU;EAClC;GAAE,KAAK;GAAa,OAAO;;EAC5B,CAAC,CACH"}
@@ -0,0 +1,31 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/judging/auto-assign.ts
3
+ function parseAutoAssignOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--per-judge":
7
+ options.perJudge = parseInt(args[++i], 10);
8
+ break;
9
+ case "--json":
10
+ options.json = true;
11
+ break;
12
+ }
13
+ return options;
14
+ }
15
+ async function runAutoAssign(client, hackathonId, args) {
16
+ const options = parseAutoAssignOptions(args);
17
+ if (!options.perJudge) {
18
+ console.error("Error: --per-judge is required");
19
+ process.exit(1);
20
+ }
21
+ const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/judging/auto-assign`, { per_judge: options.perJudge });
22
+ if (options.json) {
23
+ console.log(formatJson(result));
24
+ return;
25
+ }
26
+ console.log(formatSuccess(`Created ${result.created} assignments`));
27
+ }
28
+ //#endregion
29
+ export { runAutoAssign };
30
+
31
+ //# sourceMappingURL=auto-assign.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-assign.mjs","names":[],"sources":["../../src/commands/judging/auto-assign.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface AutoAssignOptions {\n perJudge?: number\n json?: boolean\n}\n\nexport function parseAutoAssignOptions(args: string[]): AutoAssignOptions {\n const options: AutoAssignOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--per-judge\":\n options.perJudge = parseInt(args[++i], 10)\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runAutoAssign(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseAutoAssignOptions(args)\n\n if (!options.perJudge) {\n console.error(\"Error: --per-judge is required\")\n process.exit(1)\n }\n\n const result = await client.post<{ created: number }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/auto-assign`,\n { per_judge: options.perJudge }\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Created ${result.created} assignments`))\n}\n"],"mappings":";;AAQA,SAAgB,uBAAuB,MAAmC;CACxE,MAAM,UAA6B,EAAE;AACrC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,WAAW,SAAS,KAAK,EAAE,IAAI,GAAG;AAC1C;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,cACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,uBAAuB,KAAK;AAE5C,KAAI,CAAC,QAAQ,UAAU;AACrB,UAAQ,MAAM,iCAAiC;AAC/C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,KAC1B,6BAA6B,YAAY,uBACzC,EAAE,WAAW,QAAQ,UAAU,CAChC;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,WAAW,OAAO,QAAQ,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/results/calculate.ts
3
+ async function runResultsCalculate(client, hackathonId, options) {
4
+ if (!hackathonId) {
5
+ console.error("Usage: oatmeal results calculate <hackathon-id>");
6
+ process.exit(1);
7
+ }
8
+ const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/results/calculate`);
9
+ if (options.json) {
10
+ console.log(formatJson(result));
11
+ return;
12
+ }
13
+ console.log(formatSuccess(result.message ?? "Results calculated"));
14
+ }
15
+ //#endregion
16
+ export { runResultsCalculate };
17
+
18
+ //# sourceMappingURL=calculate.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,22 @@
1
+ import { r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/jobs/cancel.ts
4
+ async function runJobsCancel(client, jobId, options) {
5
+ if (!jobId) {
6
+ console.error("Usage: oatmeal jobs cancel <job-id>");
7
+ process.exit(1);
8
+ }
9
+ if (!options.yes) {
10
+ const confirm = await p.confirm({ message: `Cancel job ${jobId}?` });
11
+ if (p.isCancel(confirm) || !confirm) {
12
+ p.log.info("Cancelled.");
13
+ return;
14
+ }
15
+ }
16
+ await client.post(`/api/v1/jobs/${jobId}/cancel`);
17
+ console.log(formatSuccess(`Cancelled job ${jobId}`));
18
+ }
19
+ //#endregion
20
+ export { runJobsCancel };
21
+
22
+ //# sourceMappingURL=cancel.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,70 @@
1
+ import { n as CONFIG_DIR, r as CONFIG_FILE } from "./constants.mjs";
2
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
+ //#region src/errors.ts
4
+ var ApiError = class extends Error {
5
+ constructor(status, message, hint) {
6
+ super(message);
7
+ this.status = status;
8
+ this.hint = hint;
9
+ this.name = "ApiError";
10
+ }
11
+ toString() {
12
+ return `[${this.status}] ${this.message}`;
13
+ }
14
+ };
15
+ var AuthError = class extends Error {
16
+ constructor(message) {
17
+ super(message ?? "Not authenticated. Run \"oatmeal login\" first.");
18
+ this.name = "AuthError";
19
+ }
20
+ };
21
+ var ConfigError = class extends Error {
22
+ constructor(message) {
23
+ super(message);
24
+ this.name = "ConfigError";
25
+ }
26
+ };
27
+ var ScopeError = class extends ApiError {
28
+ constructor(requiredScope, currentScopes) {
29
+ super(403, `Missing required scope: ${requiredScope}`, `Your API key needs the "${requiredScope}" scope. Create a new key with the required scope at your dashboard.`);
30
+ this.requiredScope = requiredScope;
31
+ this.currentScopes = currentScopes;
32
+ this.name = "ScopeError";
33
+ }
34
+ };
35
+ //#endregion
36
+ //#region src/config.ts
37
+ function loadConfig() {
38
+ const envKey = process.env.OATMEAL_API_KEY;
39
+ const envUrl = process.env.OATMEAL_BASE_URL;
40
+ if (envKey) return {
41
+ apiKey: envKey,
42
+ baseUrl: envUrl ?? "https://oatmeal.app"
43
+ };
44
+ if (!existsSync(CONFIG_FILE)) return null;
45
+ try {
46
+ const raw = readFileSync(CONFIG_FILE, "utf-8");
47
+ const parsed = JSON.parse(raw);
48
+ return {
49
+ ...parsed,
50
+ apiKey: envKey ?? parsed.apiKey,
51
+ baseUrl: envUrl ?? parsed.baseUrl
52
+ };
53
+ } catch {
54
+ throw new ConfigError(`Invalid config file at ${CONFIG_FILE}. Delete it and run "oatmeal login" again.`);
55
+ }
56
+ }
57
+ function saveConfig(config) {
58
+ if (!existsSync(CONFIG_DIR)) mkdirSync(CONFIG_DIR, {
59
+ recursive: true,
60
+ mode: 448
61
+ });
62
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + "\n", { mode: 384 });
63
+ }
64
+ function clearConfig() {
65
+ if (existsSync(CONFIG_FILE)) unlinkSync(CONFIG_FILE);
66
+ }
67
+ //#endregion
68
+ export { AuthError as a, ApiError as i, loadConfig as n, ConfigError as o, saveConfig as r, ScopeError as s, clearConfig as t };
69
+
70
+ //# sourceMappingURL=config.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,14 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ //#region src/constants.ts
4
+ const VERSION = "0.1.0";
5
+ const DEFAULT_BASE_URL = "https://oatmeal.app";
6
+ const CONFIG_DIR = join(homedir(), ".oatmeal");
7
+ const CONFIG_FILE = join(CONFIG_DIR, "config.json");
8
+ const REQUEST_TIMEOUT_MS = 3e4;
9
+ const POLL_INTERVAL_MS = 2e3;
10
+ const AUTH_TIMEOUT_MS = 3e5;
11
+ //#endregion
12
+ export { POLL_INTERVAL_MS as a, DEFAULT_BASE_URL as i, CONFIG_DIR as n, REQUEST_TIMEOUT_MS as o, CONFIG_FILE as r, VERSION as s, AUTH_TIMEOUT_MS as t };
13
+
14
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +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"}
@@ -0,0 +1,66 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/hackathons/create.ts
4
+ function parseCreateOptions(args) {
5
+ const options = {};
6
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
7
+ case "--name":
8
+ options.name = args[++i];
9
+ break;
10
+ case "--slug":
11
+ options.slug = args[++i];
12
+ break;
13
+ case "--description":
14
+ options.description = args[++i];
15
+ break;
16
+ case "--json":
17
+ options.json = true;
18
+ break;
19
+ }
20
+ return options;
21
+ }
22
+ async function runHackathonsCreate(client, args) {
23
+ const options = parseCreateOptions(args);
24
+ let name = options.name;
25
+ let slug = options.slug;
26
+ let description = options.description;
27
+ if (!name && process.stdout.isTTY) {
28
+ const result = await p.text({
29
+ message: "Hackathon name:",
30
+ validate: (v) => v ? void 0 : "Name is required"
31
+ });
32
+ if (p.isCancel(result)) return;
33
+ name = result;
34
+ }
35
+ if (!name) {
36
+ console.error("Error: --name is required");
37
+ process.exit(1);
38
+ }
39
+ if (!slug && process.stdout.isTTY) {
40
+ const suggested = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
41
+ const result = await p.text({
42
+ message: "Slug:",
43
+ initialValue: suggested
44
+ });
45
+ if (p.isCancel(result)) return;
46
+ slug = result;
47
+ }
48
+ if (!description && process.stdout.isTTY) {
49
+ const result = await p.text({ message: "Description (optional):" });
50
+ if (!p.isCancel(result)) description = result || void 0;
51
+ }
52
+ const hackathon = await client.post("/api/dashboard/hackathons", {
53
+ name,
54
+ slug,
55
+ description
56
+ });
57
+ if (options.json) {
58
+ console.log(formatJson(hackathon));
59
+ return;
60
+ }
61
+ console.log(formatSuccess(`Created hackathon "${hackathon.name}" (${hackathon.id})`));
62
+ }
63
+ //#endregion
64
+ export { runHackathonsCreate };
65
+
66
+ //# sourceMappingURL=create.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.mjs","names":[],"sources":["../../src/commands/hackathons/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\n\ninterface CreateOptions {\n name?: string\n slug?: string\n description?: string\n json?: boolean\n}\n\nexport function parseCreateOptions(args: string[]): CreateOptions {\n const options: CreateOptions = {}\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 \"--slug\":\n options.slug = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runHackathonsCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseCreateOptions(args)\n\n let name = options.name\n let slug = options.slug\n let description = options.description\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Hackathon name:\", validate: (v) => (v ? undefined : \"Name is required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n if (!slug && process.stdout.isTTY) {\n const suggested = name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\")\n const result = await p.text({ message: \"Slug:\", initialValue: suggested })\n if (p.isCancel(result)) return\n slug = result\n }\n\n if (!description && process.stdout.isTTY) {\n const result = await p.text({ message: \"Description (optional):\" })\n if (!p.isCancel(result)) description = result || undefined\n }\n\n const hackathon = await client.post<Hackathon>(\"/api/dashboard/hackathons\", {\n name,\n slug,\n description,\n })\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Created hackathon \"${hackathon.name}\" (${hackathon.id})`))\n}\n"],"mappings":";;;AAYA,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,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,oBACpB,QACA,MACe;CACf,MAAM,UAAU,mBAAmB,KAAK;CAExC,IAAI,OAAO,QAAQ;CACnB,IAAI,OAAO,QAAQ;CACnB,IAAI,cAAc,QAAQ;AAE1B,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAmB,WAAW,MAAO,IAAI,KAAA,IAAY;GAAqB,CAAC;AAClH,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,YAAY,KAAK,aAAa,CAAC,QAAQ,eAAe,IAAI,CAAC,QAAQ,UAAU,GAAG;EACtF,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAS,cAAc;GAAW,CAAC;AAC1E,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,eAAe,QAAQ,OAAO,OAAO;EACxC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,2BAA2B,CAAC;AACnE,MAAI,CAAC,EAAE,SAAS,OAAO,CAAE,eAAc,UAAU,KAAA;;CAGnD,MAAM,YAAY,MAAM,OAAO,KAAgB,6BAA6B;EAC1E;EACA;EACA;EACD,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,SAAQ,IAAI,cAAc,sBAAsB,UAAU,KAAK,KAAK,UAAU,GAAG,GAAG,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/jobs/create.ts
3
+ function parseJobCreateOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--type":
7
+ options.type = args[++i];
8
+ break;
9
+ case "--input":
10
+ options.input = args[++i];
11
+ break;
12
+ case "--idempotency-key":
13
+ options.idempotencyKey = args[++i];
14
+ break;
15
+ case "--json":
16
+ options.json = true;
17
+ break;
18
+ }
19
+ return options;
20
+ }
21
+ async function runJobsCreate(client, args) {
22
+ const options = parseJobCreateOptions(args);
23
+ if (!options.type) {
24
+ console.error("Error: --type is required");
25
+ process.exit(1);
26
+ }
27
+ let input;
28
+ if (options.input) try {
29
+ input = JSON.parse(options.input);
30
+ } catch {
31
+ console.error("Error: --input must be valid JSON");
32
+ process.exit(1);
33
+ }
34
+ const body = { type: options.type };
35
+ if (input) body.input = input;
36
+ if (options.idempotencyKey) body.idempotency_key = options.idempotencyKey;
37
+ const job = await client.post("/api/v1/jobs", body);
38
+ if (options.json) {
39
+ console.log(formatJson(job));
40
+ return;
41
+ }
42
+ console.log(formatSuccess(`Created job ${job.id} (status: ${job.status})`));
43
+ }
44
+ //#endregion
45
+ export { runJobsCreate };
46
+
47
+ //# sourceMappingURL=create2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create2.mjs","names":[],"sources":["../../src/commands/jobs/create.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Job } from \"../../types.js\"\n\ninterface JobCreateOptions {\n type?: string\n input?: string\n idempotencyKey?: string\n json?: boolean\n}\n\nexport function parseJobCreateOptions(args: string[]): JobCreateOptions {\n const options: JobCreateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--type\":\n options.type = args[++i]\n break\n case \"--input\":\n options.input = args[++i]\n break\n case \"--idempotency-key\":\n options.idempotencyKey = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runJobsCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseJobCreateOptions(args)\n\n if (!options.type) {\n console.error(\"Error: --type is required\")\n process.exit(1)\n }\n\n let input: Record<string, unknown> | undefined\n if (options.input) {\n try {\n input = JSON.parse(options.input)\n } catch {\n console.error(\"Error: --input must be valid JSON\")\n process.exit(1)\n }\n }\n\n const body: Record<string, unknown> = { type: options.type }\n if (input) body.input = input\n if (options.idempotencyKey) body.idempotency_key = options.idempotencyKey\n\n const job = await client.post<Job>(\"/api/v1/jobs\", body)\n\n if (options.json) {\n console.log(formatJson(job))\n return\n }\n\n console.log(formatSuccess(`Created job ${job.id} (status: ${job.status})`))\n}\n"],"mappings":";;AAWA,SAAgB,sBAAsB,MAAkC;CACtE,MAAM,UAA4B,EAAE;AACpC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,iBAAiB,KAAK,EAAE;AAChC;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,cACpB,QACA,MACe;CACf,MAAM,UAAU,sBAAsB,KAAK;AAE3C,KAAI,CAAC,QAAQ,MAAM;AACjB,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,IAAI;AACJ,KAAI,QAAQ,MACV,KAAI;AACF,UAAQ,KAAK,MAAM,QAAQ,MAAM;SAC3B;AACN,UAAQ,MAAM,oCAAoC;AAClD,UAAQ,KAAK,EAAE;;CAInB,MAAM,OAAgC,EAAE,MAAM,QAAQ,MAAM;AAC5D,KAAI,MAAO,MAAK,QAAQ;AACxB,KAAI,QAAQ,eAAgB,MAAK,kBAAkB,QAAQ;CAE3D,MAAM,MAAM,MAAM,OAAO,KAAU,gBAAgB,KAAK;AAExD,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,IAAI,CAAC;AAC5B;;AAGF,SAAQ,IAAI,cAAc,eAAe,IAAI,GAAG,YAAY,IAAI,OAAO,GAAG,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/judge-display/create.ts
4
+ function parseJudgeDisplayCreateOptions(args) {
5
+ const options = {};
6
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
7
+ case "--name":
8
+ options.name = args[++i];
9
+ break;
10
+ case "--title":
11
+ options.title = args[++i];
12
+ break;
13
+ case "--bio":
14
+ options.bio = args[++i];
15
+ break;
16
+ case "--json":
17
+ options.json = true;
18
+ break;
19
+ }
20
+ return options;
21
+ }
22
+ async function runJudgeDisplayCreate(client, hackathonId, args) {
23
+ const options = parseJudgeDisplayCreateOptions(args);
24
+ let name = options.name;
25
+ if (!name && process.stdout.isTTY) {
26
+ const result = await p.text({
27
+ message: "Judge name:",
28
+ validate: (v) => v ? void 0 : "Required"
29
+ });
30
+ if (p.isCancel(result)) return;
31
+ name = result;
32
+ }
33
+ if (!name) {
34
+ console.error("Error: --name is required");
35
+ process.exit(1);
36
+ }
37
+ const profile = await client.post(`/api/dashboard/hackathons/${hackathonId}/judges/display`, {
38
+ name,
39
+ title: options.title,
40
+ bio: options.bio
41
+ });
42
+ if (options.json) {
43
+ console.log(formatJson(profile));
44
+ return;
45
+ }
46
+ console.log(formatSuccess(`Created judge display profile "${profile.name}" (${profile.id})`));
47
+ }
48
+ //#endregion
49
+ export { runJudgeDisplayCreate };
50
+
51
+ //# sourceMappingURL=create3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create3.mjs","names":[],"sources":["../../src/commands/judge-display/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgeDisplayProfile } from \"../../types.js\"\n\ninterface JudgeDisplayCreateOptions {\n name?: string\n title?: string\n bio?: string\n json?: boolean\n}\n\nexport function parseJudgeDisplayCreateOptions(args: string[]): JudgeDisplayCreateOptions {\n const options: JudgeDisplayCreateOptions = {}\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 \"--title\":\n options.title = args[++i]\n break\n case \"--bio\":\n options.bio = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runJudgeDisplayCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseJudgeDisplayCreateOptions(args)\n\n let name = options.name\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Judge name:\", validate: (v) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n const profile = await client.post<JudgeDisplayProfile>(\n `/api/dashboard/hackathons/${hackathonId}/judges/display`,\n { name, title: options.title, bio: options.bio }\n )\n\n if (options.json) {\n console.log(formatJson(profile))\n return\n }\n\n console.log(formatSuccess(`Created judge display profile \"${profile.name}\" (${profile.id})`))\n}\n"],"mappings":";;;AAYA,SAAgB,+BAA+B,MAA2C;CACxF,MAAM,UAAqC,EAAE;AAC7C,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,MAAM,KAAK,EAAE;AACrB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,sBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,+BAA+B,KAAK;CAEpD,IAAI,OAAO,QAAQ;AAEnB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAe,WAAW,MAAO,IAAI,KAAA,IAAY;GAAa,CAAC;AACtG,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,MAAM,OAAO,KAC3B,6BAA6B,YAAY,kBACzC;EAAE;EAAM,OAAO,QAAQ;EAAO,KAAK,QAAQ;EAAK,CACjD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,QAAQ,CAAC;AAChC;;AAGF,SAAQ,IAAI,cAAc,kCAAkC,QAAQ,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/prizes/create.ts
4
+ function parsePrizeCreateOptions(args) {
5
+ const options = {};
6
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
7
+ case "--name":
8
+ options.name = args[++i];
9
+ break;
10
+ case "--description":
11
+ options.description = args[++i];
12
+ break;
13
+ case "--type":
14
+ options.type = args[++i];
15
+ break;
16
+ case "--value":
17
+ options.value = args[++i];
18
+ break;
19
+ case "--json":
20
+ options.json = true;
21
+ break;
22
+ }
23
+ return options;
24
+ }
25
+ async function runPrizesCreate(client, hackathonId, args) {
26
+ const options = parsePrizeCreateOptions(args);
27
+ let name = options.name;
28
+ if (!name && process.stdout.isTTY) {
29
+ const result = await p.text({
30
+ message: "Prize name:",
31
+ validate: (v) => v ? void 0 : "Required"
32
+ });
33
+ if (p.isCancel(result)) return;
34
+ name = result;
35
+ }
36
+ if (!name) {
37
+ console.error("Error: --name is required");
38
+ process.exit(1);
39
+ }
40
+ const prize = await client.post(`/api/dashboard/hackathons/${hackathonId}/prizes`, {
41
+ name,
42
+ description: options.description,
43
+ type: options.type,
44
+ value: options.value
45
+ });
46
+ if (options.json) {
47
+ console.log(formatJson(prize));
48
+ return;
49
+ }
50
+ console.log(formatSuccess(`Created prize "${prize.name}" (${prize.id})`));
51
+ }
52
+ //#endregion
53
+ export { runPrizesCreate };
54
+
55
+ //# sourceMappingURL=create4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create4.mjs","names":[],"sources":["../../src/commands/prizes/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Prize } from \"../../types.js\"\n\ninterface PrizeCreateOptions {\n name?: string\n description?: string\n type?: string\n value?: string\n json?: boolean\n}\n\nexport function parsePrizeCreateOptions(args: string[]): PrizeCreateOptions {\n const options: PrizeCreateOptions = {}\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 \"--type\":\n options.type = args[++i]\n break\n case \"--value\":\n options.value = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runPrizesCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parsePrizeCreateOptions(args)\n\n let name = options.name\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Prize name:\", validate: (v) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n const prize = await client.post<Prize>(\n `/api/dashboard/hackathons/${hackathonId}/prizes`,\n {\n name,\n description: options.description,\n type: options.type,\n value: options.value,\n }\n )\n\n if (options.json) {\n console.log(formatJson(prize))\n return\n }\n\n console.log(formatSuccess(`Created prize \"${prize.name}\" (${prize.id})`))\n}\n"],"mappings":";;;AAaA,SAAgB,wBAAwB,MAAoC;CAC1E,MAAM,UAA8B,EAAE;AACtC,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,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,gBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,wBAAwB,KAAK;CAE7C,IAAI,OAAO,QAAQ;AAEnB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAe,WAAW,MAAO,IAAI,KAAA,IAAY;GAAa,CAAC;AACtG,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,QAAQ,MAAM,OAAO,KACzB,6BAA6B,YAAY,UACzC;EACE;EACA,aAAa,QAAQ;EACrB,MAAM,QAAQ;EACd,OAAO,QAAQ;EAChB,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,MAAM,CAAC;AAC9B;;AAGF,SAAQ,IAAI,cAAc,kBAAkB,MAAM,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC"}