@agi-ventures-canada/hackathon-cli 0.1.1 → 0.1.2

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.
@@ -1 +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"}
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: string) => (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,MAAe,IAAI,KAAA,IAAY;GAAqB,CAAC;AAC1H,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"}
@@ -1 +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"}
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: string) => (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,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AAC9G,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"}
@@ -1 +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"}
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: string) => (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,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AAC9G,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create5.mjs","names":[],"sources":["../../src/commands/schedules/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Schedule } from \"../../types.js\"\n\ninterface ScheduleCreateOptions {\n name?: string\n cron?: string\n json?: boolean\n}\n\nexport function parseScheduleCreateOptions(args: string[]): ScheduleCreateOptions {\n const options: ScheduleCreateOptions = {}\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 \"--cron\":\n options.cron = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runSchedulesCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseScheduleCreateOptions(args)\n\n let name = options.name\n let cron = options.cron\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Schedule 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 if (!cron && process.stdout.isTTY) {\n const result = await p.text({ message: \"Cron expression:\", validate: (v) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n cron = result\n }\n\n if (!cron) {\n console.error(\"Error: --cron is required\")\n process.exit(1)\n }\n\n const schedule = await client.post<Schedule>(\"/api/dashboard/schedules\", {\n name,\n cron_expression: cron,\n })\n\n if (options.json) {\n console.log(formatJson(schedule))\n return\n }\n\n console.log(formatSuccess(`Created schedule \"${schedule.name}\" (${schedule.id})`))\n}\n"],"mappings":";;;AAWA,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,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,mBACpB,QACA,MACe;CACf,MAAM,UAAU,2BAA2B,KAAK;CAEhD,IAAI,OAAO,QAAQ;CACnB,IAAI,OAAO,QAAQ;AAEnB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAkB,WAAW,MAAO,IAAI,KAAA,IAAY;GAAa,CAAC;AACzG,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,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAoB,WAAW,MAAO,IAAI,KAAA,IAAY;GAAa,CAAC;AAC3G,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,KAAe,4BAA4B;EACvE;EACA,iBAAiB;EAClB,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"create5.mjs","names":[],"sources":["../../src/commands/schedules/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Schedule } from \"../../types.js\"\n\ninterface ScheduleCreateOptions {\n name?: string\n cron?: string\n json?: boolean\n}\n\nexport function parseScheduleCreateOptions(args: string[]): ScheduleCreateOptions {\n const options: ScheduleCreateOptions = {}\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 \"--cron\":\n options.cron = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runSchedulesCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseScheduleCreateOptions(args)\n\n let name = options.name\n let cron = options.cron\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Schedule name:\", validate: (v: string) => (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 if (!cron && process.stdout.isTTY) {\n const result = await p.text({ message: \"Cron expression:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n cron = result\n }\n\n if (!cron) {\n console.error(\"Error: --cron is required\")\n process.exit(1)\n }\n\n const schedule = await client.post<Schedule>(\"/api/dashboard/schedules\", {\n name,\n cron_expression: cron,\n })\n\n if (options.json) {\n console.log(formatJson(schedule))\n return\n }\n\n console.log(formatSuccess(`Created schedule \"${schedule.name}\" (${schedule.id})`))\n}\n"],"mappings":";;;AAWA,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,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,mBACpB,QACA,MACe;CACf,MAAM,UAAU,2BAA2B,KAAK;CAEhD,IAAI,OAAO,QAAQ;CACnB,IAAI,OAAO,QAAQ;AAEnB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAkB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AACjH,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,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAoB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AACnH,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,KAAe,4BAA4B;EACvE;EACA,iBAAiB;EAClB,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create6.mjs","names":[],"sources":["../../src/commands/webhooks/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess, formatWarning } from \"../../output.js\"\nimport type { Webhook } from \"../../types.js\"\n\ninterface WebhookCreateOptions {\n url?: string\n events?: string[]\n json?: boolean\n}\n\nexport function parseWebhookCreateOptions(args: string[]): WebhookCreateOptions {\n const options: WebhookCreateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--url\":\n options.url = args[++i]\n break\n case \"--events\":\n options.events = args[++i]?.split(\",\").map((s) => s.trim())\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runWebhooksCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseWebhookCreateOptions(args)\n\n let url = options.url\n let events = options.events\n\n if (!url && process.stdout.isTTY) {\n const result = await p.text({ message: \"Webhook URL:\", validate: (v) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n url = result\n }\n\n if (!url) {\n console.error(\"Error: --url is required\")\n process.exit(1)\n }\n\n if (!events?.length && process.stdout.isTTY) {\n const result = await p.text({ message: \"Events (comma-separated):\" })\n if (p.isCancel(result)) return\n events = result.split(\",\").map((s) => s.trim())\n }\n\n const webhook = await client.post<Webhook>(\"/api/v1/webhooks\", { url, events })\n\n if (options.json) {\n console.log(formatJson(webhook))\n return\n }\n\n console.log(formatSuccess(`Created webhook ${webhook.id}`))\n if (webhook.signing_secret) {\n console.log(formatWarning(\"Save this signing secret — it won't be shown again:\"))\n console.log(webhook.signing_secret)\n }\n}\n"],"mappings":";;;AAWA,SAAgB,0BAA0B,MAAsC;CAC9E,MAAM,UAAgC,EAAE;AACxC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,MAAM,KAAK,EAAE;AACrB;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;AAC3D;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,MACe;CACf,MAAM,UAAU,0BAA0B,KAAK;CAE/C,IAAI,MAAM,QAAQ;CAClB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,OAAO,QAAQ,OAAO,OAAO;EAChC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAgB,WAAW,MAAO,IAAI,KAAA,IAAY;GAAa,CAAC;AACvG,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,QAAM;;AAGR,KAAI,CAAC,KAAK;AACR,UAAQ,MAAM,2BAA2B;AACzC,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,UAAU,QAAQ,OAAO,OAAO;EAC3C,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,6BAA6B,CAAC;AACrE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,OAAO,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;;CAGjD,MAAM,UAAU,MAAM,OAAO,KAAc,oBAAoB;EAAE;EAAK;EAAQ,CAAC;AAE/E,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,QAAQ,CAAC;AAChC;;AAGF,SAAQ,IAAI,cAAc,mBAAmB,QAAQ,KAAK,CAAC;AAC3D,KAAI,QAAQ,gBAAgB;AAC1B,UAAQ,IAAI,cAAc,sDAAsD,CAAC;AACjF,UAAQ,IAAI,QAAQ,eAAe"}
1
+ {"version":3,"file":"create6.mjs","names":[],"sources":["../../src/commands/webhooks/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess, formatWarning } from \"../../output.js\"\nimport type { Webhook } from \"../../types.js\"\n\ninterface WebhookCreateOptions {\n url?: string\n events?: string[]\n json?: boolean\n}\n\nexport function parseWebhookCreateOptions(args: string[]): WebhookCreateOptions {\n const options: WebhookCreateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--url\":\n options.url = args[++i]\n break\n case \"--events\":\n options.events = args[++i]?.split(\",\").map((s) => s.trim())\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runWebhooksCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseWebhookCreateOptions(args)\n\n let url = options.url\n let events = options.events\n\n if (!url && process.stdout.isTTY) {\n const result = await p.text({ message: \"Webhook URL:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n url = result\n }\n\n if (!url) {\n console.error(\"Error: --url is required\")\n process.exit(1)\n }\n\n if (!events?.length && process.stdout.isTTY) {\n const result = await p.text({ message: \"Events (comma-separated):\" })\n if (p.isCancel(result)) return\n events = result.split(\",\").map((s: string) => s.trim())\n }\n\n const webhook = await client.post<Webhook>(\"/api/v1/webhooks\", { url, events })\n\n if (options.json) {\n console.log(formatJson(webhook))\n return\n }\n\n console.log(formatSuccess(`Created webhook ${webhook.id}`))\n if (webhook.signing_secret) {\n console.log(formatWarning(\"Save this signing secret — it won't be shown again:\"))\n console.log(webhook.signing_secret)\n }\n}\n"],"mappings":";;;AAWA,SAAgB,0BAA0B,MAAsC;CAC9E,MAAM,UAAgC,EAAE;AACxC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,MAAM,KAAK,EAAE;AACrB;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;AAC3D;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,MACe;CACf,MAAM,UAAU,0BAA0B,KAAK;CAE/C,IAAI,MAAM,QAAQ;CAClB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,OAAO,QAAQ,OAAO,OAAO;EAChC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAgB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AAC/G,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,QAAM;;AAGR,KAAI,CAAC,KAAK;AACR,UAAQ,MAAM,2BAA2B;AACzC,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,UAAU,QAAQ,OAAO,OAAO;EAC3C,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,6BAA6B,CAAC;AACrE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,OAAO,MAAM,IAAI,CAAC,KAAK,MAAc,EAAE,MAAM,CAAC;;CAGzD,MAAM,UAAU,MAAM,OAAO,KAAc,oBAAoB;EAAE;EAAK;EAAQ,CAAC;AAE/E,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,QAAQ,CAAC;AAChC;;AAGF,SAAQ,IAAI,cAAc,mBAAmB,QAAQ,KAAK,CAAC;AAC3D,KAAI,QAAQ,gBAAgB;AAC1B,UAAQ,IAAI,cAAc,sDAAsD,CAAC;AACjF,UAAQ,IAAI,QAAQ,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"criteria-create.mjs","names":[],"sources":["../../src/commands/judging/criteria-create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaCreateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n json?: boolean\n}\n\nexport function parseCriteriaCreateOptions(args: string[]): CriteriaCreateOptions {\n const options: CriteriaCreateOptions = {}\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 runCriteriaCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseCriteriaCreateOptions(args)\n\n let name = options.name\n let maxScore = options.maxScore\n let weight = options.weight\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Criteria 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 if (maxScore === undefined && process.stdout.isTTY) {\n const result = await p.text({ message: \"Max score:\", initialValue: \"10\" })\n if (p.isCancel(result)) return\n maxScore = parseInt(result, 10)\n }\n\n if (maxScore !== undefined && (isNaN(maxScore) || maxScore <= 0)) {\n console.error(\"Error: --max-score must be a positive integer\")\n process.exit(1)\n }\n\n if (weight === undefined && process.stdout.isTTY) {\n const result = await p.text({ message: \"Weight:\", initialValue: \"1\" })\n if (p.isCancel(result)) return\n weight = parseFloat(result)\n }\n\n const criteria = await client.post<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria`,\n {\n name,\n description: options.description,\n max_score: maxScore ?? 10,\n weight: weight ?? 1,\n }\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Created criteria \"${criteria.name}\" (${criteria.id})`))\n}\n"],"mappings":";;;AAaA,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,MACe;CACf,MAAM,UAAU,2BAA2B,KAAK;CAEhD,IAAI,OAAO,QAAQ;CACnB,IAAI,WAAW,QAAQ;CACvB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAkB,WAAW,MAAO,IAAI,KAAA,IAAY;GAAa,CAAC;AACzG,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,aAAa,KAAA,KAAa,QAAQ,OAAO,OAAO;EAClD,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAc,cAAc;GAAM,CAAC;AAC1E,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,aAAW,SAAS,QAAQ,GAAG;;AAGjC,KAAI,aAAa,KAAA,MAAc,MAAM,SAAS,IAAI,YAAY,IAAI;AAChE,UAAQ,MAAM,gDAAgD;AAC9D,UAAQ,KAAK,EAAE;;AAGjB,KAAI,WAAW,KAAA,KAAa,QAAQ,OAAO,OAAO;EAChD,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAW,cAAc;GAAK,CAAC;AACtE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,WAAW,OAAO;;CAG7B,MAAM,WAAW,MAAM,OAAO,KAC5B,6BAA6B,YAAY,oBACzC;EACE;EACA,aAAa,QAAQ;EACrB,WAAW,YAAY;EACvB,QAAQ,UAAU;EACnB,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"criteria-create.mjs","names":[],"sources":["../../src/commands/judging/criteria-create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaCreateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n json?: boolean\n}\n\nexport function parseCriteriaCreateOptions(args: string[]): CriteriaCreateOptions {\n const options: CriteriaCreateOptions = {}\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 runCriteriaCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseCriteriaCreateOptions(args)\n\n let name = options.name\n let maxScore = options.maxScore\n let weight = options.weight\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Criteria name:\", validate: (v: string) => (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 if (maxScore === undefined && process.stdout.isTTY) {\n const result = await p.text({ message: \"Max score:\", initialValue: \"10\" })\n if (p.isCancel(result)) return\n maxScore = parseInt(result, 10)\n }\n\n if (maxScore !== undefined && (isNaN(maxScore) || maxScore <= 0)) {\n console.error(\"Error: --max-score must be a positive integer\")\n process.exit(1)\n }\n\n if (weight === undefined && process.stdout.isTTY) {\n const result = await p.text({ message: \"Weight:\", initialValue: \"1\" })\n if (p.isCancel(result)) return\n weight = parseFloat(result)\n }\n\n const criteria = await client.post<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria`,\n {\n name,\n description: options.description,\n max_score: maxScore ?? 10,\n weight: weight ?? 1,\n }\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Created criteria \"${criteria.name}\" (${criteria.id})`))\n}\n"],"mappings":";;;AAaA,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,MACe;CACf,MAAM,UAAU,2BAA2B,KAAK;CAEhD,IAAI,OAAO,QAAQ;CACnB,IAAI,WAAW,QAAQ;CACvB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAkB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AACjH,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,aAAa,KAAA,KAAa,QAAQ,OAAO,OAAO;EAClD,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAc,cAAc;GAAM,CAAC;AAC1E,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,aAAW,SAAS,QAAQ,GAAG;;AAGjC,KAAI,aAAa,KAAA,MAAc,MAAM,SAAS,IAAI,YAAY,IAAI;AAChE,UAAQ,MAAM,gDAAgD;AAC9D,UAAQ,KAAK,EAAE;;AAGjB,KAAI,WAAW,KAAA,KAAa,QAAQ,OAAO,OAAO;EAChD,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAW,cAAc;GAAK,CAAC;AACtE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,WAAW,OAAO;;CAG7B,MAAM,WAAW,MAAM,OAAO,KAC5B,6BAA6B,YAAY,oBACzC;EACE;EACA,aAAa,QAAQ;EACrB,WAAW,YAAY;EACvB,QAAQ,UAAU;EACnB,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,KAAK,SAAS,GAAG,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: hackathon hackathons delete <id-or-slug>");
7
+ console.error("Usage: hackathon events 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: 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"}
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 events 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,8CAA8C;AAC5D,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 { 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: hackathon hackathons get <id-or-slug>");
6
+ console.error("Usage: hackathon events 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: 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"}
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 events 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,2CAA2C;AACzD,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,10 +2,7 @@
2
2
  const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
3
3
  async function resolveHackathonId(client, idOrSlug) {
4
4
  if (UUID_REGEX.test(idOrSlug)) return idOrSlug;
5
- const match = (await client.get("/api/dashboard/hackathons", { params: {
6
- q: idOrSlug,
7
- limit: 1
8
- } })).hackathons?.find((h) => h.slug === idOrSlug);
5
+ const match = (await client.get("/api/dashboard/hackathons", { params: { q: idOrSlug } })).hackathons?.find((h) => h.slug === idOrSlug);
9
6
  if (!match) throw new Error(`Hackathon not found: "${idOrSlug}". Use a UUID or exact slug.`);
10
7
  return match.id;
11
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.mjs","names":[],"sources":["../../src/commands/hackathons/resolve.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport type { Hackathon } from \"../../types.js\"\n\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\n\nexport async function resolveHackathonId(\n client: OatmealClient,\n idOrSlug: string\n): Promise<string> {\n if (UUID_REGEX.test(idOrSlug)) {\n return idOrSlug\n }\n\n const data = await client.get<{ hackathons: Hackathon[] }>(\"/api/dashboard/hackathons\", {\n params: { q: idOrSlug, limit: 1 },\n })\n\n const match = data.hackathons?.find((h) => h.slug === idOrSlug)\n if (!match) {\n throw new Error(`Hackathon not found: \"${idOrSlug}\". Use a UUID or exact slug.`)\n }\n\n return match.id\n}\n"],"mappings":";AAGA,MAAM,aAAa;AAEnB,eAAsB,mBACpB,QACA,UACiB;AACjB,KAAI,WAAW,KAAK,SAAS,CAC3B,QAAO;CAOT,MAAM,SAJO,MAAM,OAAO,IAAiC,6BAA6B,EACtF,QAAQ;EAAE,GAAG;EAAU,OAAO;EAAG,EAClC,CAAC,EAEiB,YAAY,MAAM,MAAM,EAAE,SAAS,SAAS;AAC/D,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,yBAAyB,SAAS,8BAA8B;AAGlF,QAAO,MAAM"}
1
+ {"version":3,"file":"resolve.mjs","names":[],"sources":["../../src/commands/hackathons/resolve.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport type { Hackathon } from \"../../types.js\"\n\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\n\nexport async function resolveHackathonId(\n client: OatmealClient,\n idOrSlug: string\n): Promise<string> {\n if (UUID_REGEX.test(idOrSlug)) {\n return idOrSlug\n }\n\n const data = await client.get<{ hackathons: Hackathon[] }>(\"/api/dashboard/hackathons\", {\n params: { q: idOrSlug },\n })\n\n const match = data.hackathons?.find((h) => h.slug === idOrSlug)\n if (!match) {\n throw new Error(`Hackathon not found: \"${idOrSlug}\". Use a UUID or exact slug.`)\n }\n\n return match.id\n}\n"],"mappings":";AAGA,MAAM,aAAa;AAEnB,eAAsB,mBACpB,QACA,UACiB;AACjB,KAAI,WAAW,KAAK,SAAS,CAC3B,QAAO;CAOT,MAAM,SAJO,MAAM,OAAO,IAAiC,6BAA6B,EACtF,QAAQ,EAAE,GAAG,UAAU,EACxB,CAAC,EAEiB,YAAY,MAAM,MAAM,EAAE,SAAS,SAAS;AAC/D,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,yBAAyB,SAAS,8BAA8B;AAGlF,QAAO,MAAM"}
@@ -0,0 +1,70 @@
1
+ import { n as CONFIG_DIR, s as VERSION } from "./constants.mjs";
2
+ import { join } from "node:path";
3
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
4
+ //#region src/update-check.ts
5
+ const PACKAGE_NAME = "@agi-ventures-canada/hackathon-cli";
6
+ const CHECK_FILE = join(CONFIG_DIR, "update-check.json");
7
+ const CHECK_INTERVAL_MS = 14400 * 1e3;
8
+ function readCache() {
9
+ if (!existsSync(CHECK_FILE)) return null;
10
+ try {
11
+ return JSON.parse(readFileSync(CHECK_FILE, "utf-8"));
12
+ } catch {
13
+ return null;
14
+ }
15
+ }
16
+ function writeCache(data) {
17
+ try {
18
+ writeFileSync(CHECK_FILE, JSON.stringify(data) + "\n", { mode: 384 });
19
+ } catch {}
20
+ }
21
+ async function fetchLatestVersion() {
22
+ try {
23
+ const controller = new AbortController();
24
+ const timeout = setTimeout(() => controller.abort(), 3e3);
25
+ const res = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, { signal: controller.signal });
26
+ clearTimeout(timeout);
27
+ if (!res.ok) return null;
28
+ return (await res.json()).version ?? null;
29
+ } catch {
30
+ return null;
31
+ }
32
+ }
33
+ function compareVersions(a, b) {
34
+ const pa = a.split(".").map(Number);
35
+ const pb = b.split(".").map(Number);
36
+ for (let i = 0; i < 3; i++) {
37
+ if ((pa[i] ?? 0) < (pb[i] ?? 0)) return -1;
38
+ if ((pa[i] ?? 0) > (pb[i] ?? 0)) return 1;
39
+ }
40
+ return 0;
41
+ }
42
+ async function checkForUpdate() {
43
+ const cache = readCache();
44
+ const now = Date.now();
45
+ if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {
46
+ if (compareVersions("0.1.0", cache.latestVersion) < 0) return {
47
+ current: VERSION,
48
+ latest: cache.latestVersion
49
+ };
50
+ return null;
51
+ }
52
+ const latest = await fetchLatestVersion();
53
+ if (!latest) return null;
54
+ writeCache({
55
+ lastChecked: now,
56
+ latestVersion: latest
57
+ });
58
+ if (compareVersions("0.1.0", latest) < 0) return {
59
+ current: VERSION,
60
+ latest
61
+ };
62
+ return null;
63
+ }
64
+ function formatUpdateNotice(info) {
65
+ return `\nUpdate available: ${info.current} → ${info.latest}\nRun \`hackathon update\` to update`;
66
+ }
67
+ //#endregion
68
+ export { checkForUpdate, formatUpdateNotice };
69
+
70
+ //# sourceMappingURL=update-check.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.mjs","names":[],"sources":["../../src/update-check.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\"\nimport { join } from \"node:path\"\nimport { CONFIG_DIR, VERSION } from \"./constants.js\"\n\nconst PACKAGE_NAME = \"@agi-ventures-canada/hackathon-cli\"\nconst CHECK_FILE = join(CONFIG_DIR, \"update-check.json\")\nconst CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000 // 4 hours\n\ninterface UpdateCheckCache {\n lastChecked: number\n latestVersion: string\n}\n\nfunction readCache(): UpdateCheckCache | null {\n if (!existsSync(CHECK_FILE)) return null\n try {\n return JSON.parse(readFileSync(CHECK_FILE, \"utf-8\")) as UpdateCheckCache\n } catch {\n return null\n }\n}\n\nfunction writeCache(data: UpdateCheckCache): void {\n try {\n writeFileSync(CHECK_FILE, JSON.stringify(data) + \"\\n\", { mode: 0o600 })\n } catch {\n // Silently ignore write failures\n }\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 3000)\n const res = await fetch(\n `https://registry.npmjs.org/${PACKAGE_NAME}/latest`,\n { signal: controller.signal }\n )\n clearTimeout(timeout)\n if (!res.ok) return null\n const data = (await res.json()) as { version?: string }\n return data.version ?? null\n } catch {\n return null\n }\n}\n\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split(\".\").map(Number)\n const pb = b.split(\".\").map(Number)\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return -1\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return 1\n }\n return 0\n}\n\nexport interface UpdateInfo {\n current: string\n latest: string\n}\n\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n const cache = readCache()\n const now = Date.now()\n\n if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {\n if (compareVersions(VERSION, cache.latestVersion) < 0) {\n return { current: VERSION, latest: cache.latestVersion }\n }\n return null\n }\n\n const latest = await fetchLatestVersion()\n if (!latest) return null\n\n writeCache({ lastChecked: now, latestVersion: latest })\n\n if (compareVersions(VERSION, latest) < 0) {\n return { current: VERSION, latest }\n }\n return null\n}\n\nexport function formatUpdateNotice(info: UpdateInfo): string {\n return `\\nUpdate available: ${info.current} → ${info.latest}\\nRun \\`hackathon update\\` to update`\n}\n"],"mappings":";;;;AAIA,MAAM,eAAe;AACrB,MAAM,aAAa,KAAK,YAAY,oBAAoB;AACxD,MAAM,oBAAoB,QAAc;AAOxC,SAAS,YAAqC;AAC5C,KAAI,CAAC,WAAW,WAAW,CAAE,QAAO;AACpC,KAAI;AACF,SAAO,KAAK,MAAM,aAAa,YAAY,QAAQ,CAAC;SAC9C;AACN,SAAO;;;AAIX,SAAS,WAAW,MAA8B;AAChD,KAAI;AACF,gBAAc,YAAY,KAAK,UAAU,KAAK,GAAG,MAAM,EAAE,MAAM,KAAO,CAAC;SACjE;;AAKV,eAAe,qBAA6C;AAC1D,KAAI;EACF,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,UAAU,iBAAiB,WAAW,OAAO,EAAE,IAAK;EAC1D,MAAM,MAAM,MAAM,MAChB,8BAA8B,aAAa,UAC3C,EAAE,QAAQ,WAAW,QAAQ,CAC9B;AACD,eAAa,QAAQ;AACrB,MAAI,CAAC,IAAI,GAAI,QAAO;AAEpB,UADc,MAAM,IAAI,MAAM,EAClB,WAAW;SACjB;AACN,SAAO;;;AAIX,SAAS,gBAAgB,GAAW,GAAmB;CACrD,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,OAAO;CACnC,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,OAAO;AACnC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,OAAK,GAAG,MAAM,MAAM,GAAG,MAAM,GAAI,QAAO;AACxC,OAAK,GAAG,MAAM,MAAM,GAAG,MAAM,GAAI,QAAO;;AAE1C,QAAO;;AAQT,eAAsB,iBAA6C;CACjE,MAAM,QAAQ,WAAW;CACzB,MAAM,MAAM,KAAK,KAAK;AAEtB,KAAI,SAAS,MAAM,MAAM,cAAc,mBAAmB;AACxD,MAAI,gBAAA,SAAyB,MAAM,cAAc,GAAG,EAClD,QAAO;GAAE,SAAS;GAAS,QAAQ,MAAM;GAAe;AAE1D,SAAO;;CAGT,MAAM,SAAS,MAAM,oBAAoB;AACzC,KAAI,CAAC,OAAQ,QAAO;AAEpB,YAAW;EAAE,aAAa;EAAK,eAAe;EAAQ,CAAC;AAEvD,KAAI,gBAAA,SAAyB,OAAO,GAAG,EACrC,QAAO;EAAE,SAAS;EAAS;EAAQ;AAErC,QAAO;;AAGT,SAAgB,mBAAmB,MAA0B;AAC3D,QAAO,uBAAuB,KAAK,QAAQ,KAAK,KAAK,OAAO"}
@@ -21,7 +21,7 @@ function parseUpdateOptions(args) {
21
21
  }
22
22
  async function runHackathonsUpdate(client, idOrSlug, args) {
23
23
  if (!idOrSlug) {
24
- console.error("Usage: hackathon hackathons update <id-or-slug> [--name ...] [--slug ...] [--description ...]");
24
+ console.error("Usage: hackathon events update <id-or-slug> [--name ...] [--slug ...] [--description ...]");
25
25
  process.exit(1);
26
26
  }
27
27
  const options = parseUpdateOptions(args);
@@ -34,12 +34,12 @@ async function runHackathonsUpdate(client, idOrSlug, args) {
34
34
  console.error("Error: provide at least one field to update (--name, --slug, --description)");
35
35
  process.exit(1);
36
36
  }
37
- const hackathon = await client.patch(`/api/dashboard/hackathons/${id}`, body);
37
+ const hackathon = await client.patch(`/api/dashboard/hackathons/${id}/settings`, body);
38
38
  if (options.json) {
39
39
  console.log(formatJson(hackathon));
40
40
  return;
41
41
  }
42
- console.log(formatSuccess(`Updated hackathon "${hackathon.name}"`));
42
+ console.log(formatSuccess(`Updated hackathon "${hackathon.name ?? id}"`));
43
43
  }
44
44
  //#endregion
45
45
  export { runHackathonsUpdate };
@@ -1 +1 @@
1
- {"version":3,"file":"update.mjs","names":[],"sources":["../../src/commands/hackathons/update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\ninterface UpdateOptions {\n name?: string\n slug?: string\n description?: string\n json?: boolean\n}\n\nexport function parseUpdateOptions(args: string[]): UpdateOptions {\n const options: UpdateOptions = {}\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 runHackathonsUpdate(\n client: OatmealClient,\n idOrSlug: string,\n args: string[]\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage: hackathon hackathons update <id-or-slug> [--name ...] [--slug ...] [--description ...]\")\n process.exit(1)\n }\n\n const options = parseUpdateOptions(args)\n const id = await resolveHackathonId(client, idOrSlug)\n\n const body: Record<string, string> = {}\n if (options.name) body.name = options.name\n if (options.slug) body.slug = options.slug\n if (options.description) body.description = options.description\n\n if (Object.keys(body).length === 0) {\n console.error(\"Error: provide at least one field to update (--name, --slug, --description)\")\n process.exit(1)\n }\n\n const hackathon = await client.patch<Hackathon>(`/api/dashboard/hackathons/${id}`, body)\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Updated hackathon \"${hackathon.name}\"`))\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,UACA,MACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,MAAM,gGAAgG;AAC9G,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,mBAAmB,KAAK;CACxC,MAAM,KAAK,MAAM,mBAAmB,QAAQ,SAAS;CAErD,MAAM,OAA+B,EAAE;AACvC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AAEpD,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,8EAA8E;AAC5F,UAAQ,KAAK,EAAE;;CAGjB,MAAM,YAAY,MAAM,OAAO,MAAiB,6BAA6B,MAAM,KAAK;AAExF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,SAAQ,IAAI,cAAc,sBAAsB,UAAU,KAAK,GAAG,CAAC"}
1
+ {"version":3,"file":"update.mjs","names":[],"sources":["../../src/commands/hackathons/update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\nimport { resolveHackathonId } from \"./resolve.js\"\n\ninterface UpdateOptions {\n name?: string\n slug?: string\n description?: string\n json?: boolean\n}\n\nexport function parseUpdateOptions(args: string[]): UpdateOptions {\n const options: UpdateOptions = {}\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 runHackathonsUpdate(\n client: OatmealClient,\n idOrSlug: string,\n args: string[]\n): Promise<void> {\n if (!idOrSlug) {\n console.error(\"Usage: hackathon events update <id-or-slug> [--name ...] [--slug ...] [--description ...]\")\n process.exit(1)\n }\n\n const options = parseUpdateOptions(args)\n const id = await resolveHackathonId(client, idOrSlug)\n\n const body: Record<string, string> = {}\n if (options.name) body.name = options.name\n if (options.slug) body.slug = options.slug\n if (options.description) body.description = options.description\n\n if (Object.keys(body).length === 0) {\n console.error(\"Error: provide at least one field to update (--name, --slug, --description)\")\n process.exit(1)\n }\n\n const hackathon = await client.patch<Hackathon>(`/api/dashboard/hackathons/${id}/settings`, body)\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Updated hackathon \"${hackathon.name ?? 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,UACA,MACe;AACf,KAAI,CAAC,UAAU;AACb,UAAQ,MAAM,4FAA4F;AAC1G,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,mBAAmB,KAAK;CACxC,MAAM,KAAK,MAAM,mBAAmB,QAAQ,SAAS;CAErD,MAAM,OAA+B,EAAE;AACvC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AAEpD,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,8EAA8E;AAC5F,UAAQ,KAAK,EAAE;;CAGjB,MAAM,YAAY,MAAM,OAAO,MAAiB,6BAA6B,GAAG,YAAY,KAAK;AAEjG,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,SAAQ,IAAI,cAAc,sBAAsB,UAAU,QAAQ,GAAG,GAAG,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { s as VERSION } from "./constants.mjs";
2
+ import { checkForUpdate } from "./update-check.mjs";
3
+ import pc from "picocolors";
4
+ import { execSync } from "node:child_process";
5
+ //#region src/commands/update.ts
6
+ const PKG = "@agi-ventures-canada/hackathon-cli";
7
+ function detectPackageManager() {
8
+ const execPath = process.env.npm_execpath ?? process.env._ ?? "";
9
+ if (/bun/.test(execPath)) return {
10
+ cmd: "bun",
11
+ install: `bun install -g ${PKG}@latest`
12
+ };
13
+ if (/pnpm/.test(execPath)) return {
14
+ cmd: "pnpm",
15
+ install: `pnpm add -g ${PKG}@latest`
16
+ };
17
+ if (/yarn/.test(execPath)) return {
18
+ cmd: "yarn",
19
+ install: `yarn global add ${PKG}@latest`
20
+ };
21
+ return {
22
+ cmd: "npm",
23
+ install: `npm install -g ${PKG}@latest`
24
+ };
25
+ }
26
+ async function runUpdate() {
27
+ console.log(`Current version: ${VERSION}`);
28
+ console.log("Checking for updates...");
29
+ const update = await checkForUpdate();
30
+ if (!update) {
31
+ console.log(pc.green("Already up to date."));
32
+ return;
33
+ }
34
+ const pm = detectPackageManager();
35
+ console.log(`New version available: ${update.latest}`);
36
+ console.log(`Updating via ${pm.cmd}...`);
37
+ try {
38
+ execSync(pm.install, { stdio: "inherit" });
39
+ console.log(pc.green(`\nUpdated to ${update.latest}`));
40
+ } catch {
41
+ console.error(pc.red("Update failed. Try manually:"));
42
+ console.error(` ${pm.install}`);
43
+ process.exit(1);
44
+ }
45
+ }
46
+ //#endregion
47
+ export { runUpdate };
48
+
49
+ //# sourceMappingURL=update5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update5.mjs","names":[],"sources":["../../src/commands/update.ts"],"sourcesContent":["import { execSync } from \"node:child_process\"\nimport pc from \"picocolors\"\nimport { VERSION } from \"../constants.js\"\nimport { checkForUpdate } from \"../update-check.js\"\n\nconst PKG = \"@agi-ventures-canada/hackathon-cli\"\n\nfunction detectPackageManager(): { cmd: string; install: string } {\n const execPath = process.env.npm_execpath ?? process.env._ ?? \"\"\n if (/bun/.test(execPath)) return { cmd: \"bun\", install: `bun install -g ${PKG}@latest` }\n if (/pnpm/.test(execPath)) return { cmd: \"pnpm\", install: `pnpm add -g ${PKG}@latest` }\n if (/yarn/.test(execPath)) return { cmd: \"yarn\", install: `yarn global add ${PKG}@latest` }\n return { cmd: \"npm\", install: `npm install -g ${PKG}@latest` }\n}\n\nexport async function runUpdate(): Promise<void> {\n console.log(`Current version: ${VERSION}`)\n console.log(\"Checking for updates...\")\n\n const update = await checkForUpdate()\n if (!update) {\n console.log(pc.green(\"Already up to date.\"))\n return\n }\n\n const pm = detectPackageManager()\n console.log(`New version available: ${update.latest}`)\n console.log(`Updating via ${pm.cmd}...`)\n\n try {\n execSync(pm.install, { stdio: \"inherit\" })\n console.log(pc.green(`\\nUpdated to ${update.latest}`))\n } catch {\n console.error(pc.red(\"Update failed. Try manually:\"))\n console.error(` ${pm.install}`)\n process.exit(1)\n }\n}\n"],"mappings":";;;;;AAKA,MAAM,MAAM;AAEZ,SAAS,uBAAyD;CAChE,MAAM,WAAW,QAAQ,IAAI,gBAAgB,QAAQ,IAAI,KAAK;AAC9D,KAAI,MAAM,KAAK,SAAS,CAAE,QAAO;EAAE,KAAK;EAAO,SAAS,kBAAkB,IAAI;EAAU;AACxF,KAAI,OAAO,KAAK,SAAS,CAAE,QAAO;EAAE,KAAK;EAAQ,SAAS,eAAe,IAAI;EAAU;AACvF,KAAI,OAAO,KAAK,SAAS,CAAE,QAAO;EAAE,KAAK;EAAQ,SAAS,mBAAmB,IAAI;EAAU;AAC3F,QAAO;EAAE,KAAK;EAAO,SAAS,kBAAkB,IAAI;EAAU;;AAGhE,eAAsB,YAA2B;AAC/C,SAAQ,IAAI,oBAAoB,UAAU;AAC1C,SAAQ,IAAI,0BAA0B;CAEtC,MAAM,SAAS,MAAM,gBAAgB;AACrC,KAAI,CAAC,QAAQ;AACX,UAAQ,IAAI,GAAG,MAAM,sBAAsB,CAAC;AAC5C;;CAGF,MAAM,KAAK,sBAAsB;AACjC,SAAQ,IAAI,0BAA0B,OAAO,SAAS;AACtD,SAAQ,IAAI,gBAAgB,GAAG,IAAI,KAAK;AAExC,KAAI;AACF,WAAS,GAAG,SAAS,EAAE,OAAO,WAAW,CAAC;AAC1C,UAAQ,IAAI,GAAG,MAAM,gBAAgB,OAAO,SAAS,CAAC;SAChD;AACN,UAAQ,MAAM,GAAG,IAAI,+BAA+B,CAAC;AACrD,UAAQ,MAAM,KAAK,GAAG,UAAU;AAChC,UAAQ,KAAK,EAAE"}
package/dist/cli.mjs CHANGED
@@ -214,13 +214,15 @@ const BANNER = `
214
214
  login Sign in via browser or API key
215
215
  logout Remove saved credentials
216
216
  whoami Show current auth info
217
+ update Update CLI to latest version
217
218
 
218
- ${pc.dim("HACKATHON MANAGEMENT (auth required)")}
219
- hackathons list List your hackathons
220
- hackathons get <id> Get hackathon details
221
- hackathons create Create a hackathon
222
- hackathons update <id> Update a hackathon
223
- hackathons delete <id> Delete a hackathon
219
+ ${pc.dim("EVENT MANAGEMENT (auth required)")}
220
+ events list List your hackathons
221
+ events get <id> Get hackathon details
222
+ events create Create a hackathon
223
+ events update <id> Update a hackathon
224
+ events delete <id> Delete a hackathon
225
+ ${pc.dim("(alias: hackathons)")}
224
226
 
225
227
  ${pc.dim("JUDGING")}
226
228
  judging criteria list <id> List criteria
@@ -287,6 +289,13 @@ const BANNER = `
287
289
  --help, -h Show help
288
290
  --version, -v Show version
289
291
  `;
292
+ async function notifyIfUpdateAvailable() {
293
+ try {
294
+ const { checkForUpdate, formatUpdateNotice } = await import("./_chunks/update-check.mjs");
295
+ const update = await checkForUpdate();
296
+ if (update) console.error(formatUpdateNotice(update));
297
+ } catch {}
298
+ }
290
299
  async function main() {
291
300
  const { flags, rest } = parseGlobalFlags(process.argv.slice(2));
292
301
  if (rest.length === 0 || flags.help) {
@@ -314,6 +323,11 @@ async function main() {
314
323
  await runWhoAmI(client, { json: flags.json });
315
324
  break;
316
325
  }
326
+ case "update": {
327
+ const { runUpdate } = await import("./_chunks/update5.mjs");
328
+ await runUpdate();
329
+ return;
330
+ }
317
331
  case "browse": {
318
332
  const client = createPublicClient(flags);
319
333
  switch (sub) {
@@ -343,7 +357,8 @@ async function main() {
343
357
  }
344
358
  break;
345
359
  }
346
- case "hackathons": {
360
+ case "hackathons":
361
+ case "events": {
347
362
  const client = createAuthenticatedClient(flags);
348
363
  switch (sub) {
349
364
  case "list": {
@@ -372,7 +387,7 @@ async function main() {
372
387
  break;
373
388
  }
374
389
  default:
375
- console.error(`Unknown hackathons command: ${sub}. Run "hackathon hackathons --help" for usage.`);
390
+ console.error(`Unknown events command: ${sub}. Run "hackathon events --help" for usage.`);
376
391
  process.exit(1);
377
392
  }
378
393
  break;
@@ -702,6 +717,8 @@ async function main() {
702
717
  else if (error instanceof Error) console.error(formatError({ message: error.message }));
703
718
  else console.error(formatError({ message: String(error) }));
704
719
  process.exit(1);
720
+ } finally {
721
+ await notifyIfUpdateAvailable();
705
722
  }
706
723
  }
707
724
  main();
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../src/client.ts","../src/output.ts","../src/cli.ts"],"sourcesContent":["import { REQUEST_TIMEOUT_MS } from \"./constants.js\"\nimport { ApiError, AuthError, ScopeError } from \"./errors.js\"\n\ninterface ClientOptions {\n baseUrl: string\n apiKey?: string\n}\n\ninterface RequestOptions {\n method?: string\n body?: unknown\n params?: Record<string, string | number | undefined>\n timeout?: number\n}\n\nexport class OatmealClient {\n private baseUrl: string\n private apiKey?: string\n\n constructor(options: ClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\")\n this.apiKey = options.apiKey\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"GET\" })\n }\n\n async post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"POST\", body })\n }\n\n async patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"PATCH\", body })\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"DELETE\" })\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, timeout = REQUEST_TIMEOUT_MS } = options\n\n let url = `${this.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.set(key, String(value))\n }\n }\n const qs = searchParams.toString()\n if (qs) url += `?${qs}`\n }\n\n const headers: Record<string, string> = {}\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`\n }\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await this.fetchWithRetry(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timer)\n\n if (response.status === 204) {\n return undefined as T\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\"\n let data: unknown\n\n if (contentType.includes(\"application/json\")) {\n data = await response.json()\n } else {\n const text = await response.text()\n data = { message: text }\n }\n\n if (!response.ok) {\n this.handleErrorResponse(response.status, data)\n }\n\n return data as T\n } catch (error) {\n clearTimeout(timer)\n if (error instanceof ApiError || error instanceof AuthError || error instanceof ScopeError) {\n throw error\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ApiError(0, `Request timed out after ${timeout / 1000}s`)\n }\n if (error instanceof TypeError && (error.message.includes(\"fetch\") || error.message.includes(\"network\"))) {\n throw new ApiError(0, `Could not connect to ${this.baseUrl}. Is the server running?`)\n }\n throw new ApiError(0, `Network error: ${(error as Error).message}`)\n }\n }\n\n private async fetchWithRetry(\n url: string,\n init: RequestInit,\n retried = false\n ): Promise<Response> {\n const response = await fetch(url, init)\n\n if (response.status === 429 && !retried) {\n const retryAfter = response.headers.get(\"retry-after\")\n const delay = retryAfter ? parseInt(retryAfter, 10) * 1000 : 1000\n await new Promise((resolve) => setTimeout(resolve, Math.min(delay, 10_000)))\n return this.fetchWithRetry(url, init, true)\n }\n\n return response\n }\n\n private handleErrorResponse(status: number, data: unknown): never {\n const body = data as Record<string, unknown>\n const message = (body?.error as string) || (body?.message as string) || `Request failed`\n\n if (status === 401) {\n throw new AuthError(message)\n }\n\n if (status === 403) {\n const scope = body?.requiredScope as string | undefined\n if (scope) {\n throw new ScopeError(scope, body?.currentScopes as string[] | undefined)\n }\n throw new ApiError(403, message)\n }\n\n if (status === 404) {\n throw new ApiError(404, body?.message ? message : \"Resource not found\")\n }\n\n if (status === 429) {\n throw new ApiError(429, \"Rate limited. Please try again later.\", \"Wait a moment before retrying.\")\n }\n\n throw new ApiError(status, message)\n }\n}\n","import pc from \"picocolors\"\n\nconst noColor = !!process.env.NO_COLOR\n\nfunction color<T extends string>(fn: (s: T) => string, s: T): string {\n return noColor ? s : fn(s)\n}\n\ninterface Column<T> {\n key: keyof T\n label: string\n width?: number\n}\n\nexport function formatTable<T extends object>(\n rows: T[],\n columns: Column<T>[]\n): string {\n if (rows.length === 0) {\n return \"\"\n }\n\n const widths = columns.map((col) => {\n const headerWidth = col.label.length\n const maxDataWidth = rows.reduce((max, row) => {\n const val = String(row[col.key] ?? \"\")\n return Math.max(max, val.length)\n }, 0)\n return col.width ?? Math.min(Math.max(headerWidth, maxDataWidth), 50)\n })\n\n const header = columns.map((col, i) => col.label.padEnd(widths[i])).join(\" \")\n const separator = widths.map((w) => \"─\".repeat(w)).join(\"──\")\n\n const dataRows = rows.map((row) =>\n columns\n .map((col, i) => {\n const val = String(row[col.key] ?? \"\")\n return val.length > widths[i] ? val.slice(0, widths[i] - 1) + \"…\" : val.padEnd(widths[i])\n })\n .join(\" \")\n )\n\n return [color(pc.bold, header), separator, ...dataRows].join(\"\\n\")\n}\n\nexport function formatJson(data: unknown): string {\n return JSON.stringify(data, null, 2)\n}\n\nexport function formatDetail(fields: Array<{ label: string; value: string | undefined }>): string {\n const maxLabel = fields.reduce((max, f) => Math.max(max, f.label.length), 0)\n return fields\n .map((f) => `${color(pc.bold, f.label.padEnd(maxLabel))} ${f.value ?? color(pc.dim, \"—\")}`)\n .join(\"\\n\")\n}\n\nexport function formatError(error: { message: string; hint?: string }): string {\n const lines = [color(pc.red, `Error: ${error.message}`)]\n if (error.hint) {\n lines.push(color(pc.dim, `Hint: ${error.hint}`))\n }\n return lines.join(\"\\n\")\n}\n\nexport function formatSuccess(message: string): string {\n return color(pc.green, `✓ ${message}`)\n}\n\nexport function formatWarning(message: string): string {\n return color(pc.yellow, `⚠ ${message}`)\n}\n","import pc from \"picocolors\"\nimport { OatmealClient } from \"./client.js\"\nimport { loadConfig } from \"./config.js\"\nimport { VERSION, DEFAULT_BASE_URL } from \"./constants.js\"\nimport { ApiError, AuthError, ConfigError, ScopeError } from \"./errors.js\"\nimport { formatError } from \"./output.js\"\n\ninterface GlobalFlags {\n json: boolean\n yes: boolean\n baseUrl?: string\n apiKey?: string\n help: boolean\n}\n\nfunction parseGlobalFlags(args: string[]): { flags: GlobalFlags; rest: string[] } {\n const flags: GlobalFlags = { json: false, yes: false, help: false }\n const rest: string[] = []\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--json\":\n flags.json = true\n break\n case \"--yes\":\n case \"-y\":\n flags.yes = true\n break\n case \"--base-url\":\n flags.baseUrl = args[++i]\n break\n case \"--api-key\":\n flags.apiKey = args[++i]\n break\n case \"--help\":\n case \"-h\":\n flags.help = true\n break\n case \"--version\":\n case \"-v\":\n console.log(VERSION)\n process.exit(0)\n break\n default:\n rest.push(args[i])\n }\n }\n\n return { flags, rest }\n}\n\nfunction createPublicClient(flags: GlobalFlags): OatmealClient {\n const config = loadConfig()\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config?.baseUrl ?? DEFAULT_BASE_URL,\n })\n}\n\nfunction createAuthenticatedClient(flags: GlobalFlags): OatmealClient {\n const apiKey = flags.apiKey ?? process.env.HACKATHON_API_KEY\n if (apiKey) {\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? DEFAULT_BASE_URL,\n apiKey,\n })\n }\n\n const config = loadConfig()\n if (!config?.apiKey) {\n throw new AuthError()\n }\n\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config.baseUrl,\n apiKey: config.apiKey,\n })\n}\n\nconst BANNER = `\n ${pc.bold(\"hackathon\")} — CLI for the Oatmeal hackathon platform\n\n ${pc.dim(\"USAGE\")}\n hackathon <command> [options]\n\n ${pc.dim(\"PUBLIC COMMANDS (no auth required)\")}\n browse hackathons Search public hackathons\n browse submissions <slug> View submissions for a hackathon\n browse results <slug> View published results\n browse org <slug> View organization profile\n\n ${pc.dim(\"AUTH\")}\n login Sign in via browser or API key\n logout Remove saved credentials\n whoami Show current auth info\n\n ${pc.dim(\"HACKATHON MANAGEMENT (auth required)\")}\n hackathons list List your hackathons\n hackathons get <id> Get hackathon details\n hackathons create Create a hackathon\n hackathons update <id> Update a hackathon\n hackathons delete <id> Delete a hackathon\n\n ${pc.dim(\"JUDGING\")}\n judging criteria list <id> List criteria\n judging criteria create <id> Create criteria\n judging criteria update <id> <cid> Update criteria\n judging criteria delete <id> <cid> Delete criteria\n judging judges list <id> List judges\n judging judges add <id> Add a judge\n judging judges remove <id> <pid> Remove a judge\n judging assignments list <id> List assignments\n judging assignments create <id> Create assignment\n judging assignments delete <id> <aid> Delete assignment\n judging auto-assign <id> Auto-assign judges\n judging invitations list <id> List invitations\n judging invitations cancel <id> <iid> Cancel invitation\n judging pick-results <id> View pick results\n\n ${pc.dim(\"PRIZES\")}\n prizes list <id> List prizes\n prizes create <id> Create a prize\n prizes update <id> <pid> Update a prize\n prizes delete <id> <pid> Delete a prize\n prizes reorder <id> Reorder prizes\n prizes assign <id> <pid> Assign prize\n prizes unassign <id> <pid> <sid> Unassign prize\n\n ${pc.dim(\"JUDGE DISPLAY\")}\n judge-display list <id> List display profiles\n judge-display create <id> Create display profile\n judge-display update <id> <jid> Update display profile\n judge-display delete <id> <jid> Delete display profile\n judge-display reorder <id> Reorder profiles\n\n ${pc.dim(\"RESULTS\")}\n results calculate <id> Calculate results\n results get <id> Get detailed results\n results publish <id> Publish results\n results unpublish <id> Unpublish results\n\n ${pc.dim(\"WEBHOOKS\")}\n webhooks list List webhooks\n webhooks create Create a webhook\n webhooks delete <id> Delete a webhook\n\n ${pc.dim(\"JOBS\")}\n jobs list List jobs\n jobs get <id> Get job details\n jobs create Create a job\n jobs result <id> Get job result\n jobs cancel <id> Cancel a job\n\n ${pc.dim(\"SCHEDULES\")}\n schedules list List schedules\n schedules create Create a schedule\n schedules get <id> Get schedule details\n schedules update <id> Update a schedule\n schedules delete <id> Delete a schedule\n\n ${pc.dim(\"GLOBAL OPTIONS\")}\n --json Output as JSON\n --yes, -y Skip confirmation prompts\n --base-url API base URL\n --api-key API key (overrides config)\n --help, -h Show help\n --version, -v Show version\n`\n\nasync function main() {\n const { flags, rest } = parseGlobalFlags(process.argv.slice(2))\n\n if (rest.length === 0 || flags.help) {\n console.log(BANNER)\n return\n }\n\n const command = rest[0]\n const sub = rest[1]\n const sub2 = rest[2]\n\n try {\n switch (command) {\n case \"login\": {\n const { runLogin } = await import(\"./commands/login.js\")\n await runLogin(rest.slice(1).concat(flags.yes ? [\"--yes\"] : []).concat(flags.baseUrl ? [\"--base-url\", flags.baseUrl] : []).concat(flags.apiKey ? [\"--api-key\", flags.apiKey] : []))\n break\n }\n\n case \"logout\": {\n const { runLogout } = await import(\"./commands/logout.js\")\n await runLogout()\n break\n }\n\n case \"whoami\": {\n const client = createAuthenticatedClient(flags)\n const { runWhoAmI } = await import(\"./commands/whoami.js\")\n await runWhoAmI(client, { json: flags.json })\n break\n }\n\n case \"browse\": {\n const client = createPublicClient(flags)\n switch (sub) {\n case \"hackathons\": {\n const { runBrowseHackathons } = await import(\"./commands/browse/hackathons.js\")\n await runBrowseHackathons(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"submissions\": {\n const { runBrowseSubmissions } = await import(\"./commands/browse/submissions.js\")\n await runBrowseSubmissions(client, rest[2], { json: flags.json })\n break\n }\n case \"results\": {\n const { runBrowseResults } = await import(\"./commands/browse/results.js\")\n await runBrowseResults(client, rest[2], { json: flags.json })\n break\n }\n case \"org\": {\n const { runBrowseOrg } = await import(\"./commands/browse/org.js\")\n await runBrowseOrg(client, rest[2], { json: flags.json })\n break\n }\n default:\n console.error(`Unknown browse command: ${sub}. Run \"hackathon browse --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"hackathons\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runHackathonsList } = await import(\"./commands/hackathons/list.js\")\n await runHackathonsList(client, { json: flags.json })\n break\n }\n case \"get\": {\n const { runHackathonsGet } = await import(\"./commands/hackathons/get.js\")\n await runHackathonsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runHackathonsCreate } = await import(\"./commands/hackathons/create.js\")\n await runHackathonsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runHackathonsUpdate } = await import(\"./commands/hackathons/update.js\")\n await runHackathonsUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runHackathonsDelete } = await import(\"./commands/hackathons/delete.js\")\n await runHackathonsDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown hackathons command: ${sub}. Run \"hackathon hackathons --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"judging\": {\n const client = createAuthenticatedClient(flags)\n const hackathonId = rest[2]\n switch (sub) {\n case \"criteria\":\n switch (sub2) {\n case \"list\": {\n const { runCriteriaList } = await import(\"./commands/judging/criteria-list.js\")\n await runCriteriaList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runCriteriaCreate } = await import(\"./commands/judging/criteria-create.js\")\n await runCriteriaCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runCriteriaUpdate } = await import(\"./commands/judging/criteria-update.js\")\n await runCriteriaUpdate(client, rest[3], rest[4], rest.slice(5).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runCriteriaDelete } = await import(\"./commands/judging/criteria-delete.js\")\n await runCriteriaDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging criteria command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"judges\":\n switch (sub2) {\n case \"list\": {\n const { runJudgesList } = await import(\"./commands/judging/judges-list.js\")\n await runJudgesList(client, rest[3], { json: flags.json })\n break\n }\n case \"add\": {\n const { runJudgesAdd } = await import(\"./commands/judging/judges-add.js\")\n await runJudgesAdd(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"remove\": {\n const { runJudgesRemove } = await import(\"./commands/judging/judges-remove.js\")\n await runJudgesRemove(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging judges command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"assignments\":\n switch (sub2) {\n case \"list\": {\n const { runAssignmentsList } = await import(\"./commands/judging/assignments-list.js\")\n await runAssignmentsList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runAssignmentsCreate } = await import(\"./commands/judging/assignments-create.js\")\n await runAssignmentsCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runAssignmentsDelete } = await import(\"./commands/judging/assignments-delete.js\")\n await runAssignmentsDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging assignments command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"auto-assign\": {\n const { runAutoAssign } = await import(\"./commands/judging/auto-assign.js\")\n await runAutoAssign(client, hackathonId, rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n\n case \"invitations\":\n switch (sub2) {\n case \"list\": {\n const { runInvitationsList } = await import(\"./commands/judging/invitations-list.js\")\n await runInvitationsList(client, rest[3], { json: flags.json })\n break\n }\n case \"cancel\": {\n const { runInvitationsCancel } = await import(\"./commands/judging/invitations-cancel.js\")\n await runInvitationsCancel(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging invitations command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"pick-results\": {\n const { runPickResults } = await import(\"./commands/judging/pick-results.js\")\n await runPickResults(client, hackathonId, { json: flags.json })\n break\n }\n\n default:\n console.error(`Unknown judging command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"prizes\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runPrizesList } = await import(\"./commands/prizes/list.js\")\n await runPrizesList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runPrizesCreate } = await import(\"./commands/prizes/create.js\")\n await runPrizesCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runPrizesUpdate } = await import(\"./commands/prizes/update.js\")\n await runPrizesUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runPrizesDelete } = await import(\"./commands/prizes/delete.js\")\n await runPrizesDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runPrizesReorder } = await import(\"./commands/prizes/reorder.js\")\n await runPrizesReorder(client, rest[2], rest.slice(3))\n break\n }\n case \"assign\": {\n const { runPrizesAssign } = await import(\"./commands/prizes/assign.js\")\n await runPrizesAssign(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"unassign\": {\n const { runPrizesUnassign } = await import(\"./commands/prizes/unassign.js\")\n await runPrizesUnassign(client, rest[2], rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown prizes command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"judge-display\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJudgeDisplayList } = await import(\"./commands/judge-display/list.js\")\n await runJudgeDisplayList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJudgeDisplayCreate } = await import(\"./commands/judge-display/create.js\")\n await runJudgeDisplayCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runJudgeDisplayUpdate } = await import(\"./commands/judge-display/update.js\")\n await runJudgeDisplayUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runJudgeDisplayDelete } = await import(\"./commands/judge-display/delete.js\")\n await runJudgeDisplayDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runJudgeDisplayReorder } = await import(\"./commands/judge-display/reorder.js\")\n await runJudgeDisplayReorder(client, rest[2], rest.slice(3))\n break\n }\n default:\n console.error(`Unknown judge-display command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"results\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"calculate\": {\n const { runResultsCalculate } = await import(\"./commands/results/calculate.js\")\n await runResultsCalculate(client, rest[2], { json: flags.json })\n break\n }\n case \"get\": {\n const { runResultsGet } = await import(\"./commands/results/get.js\")\n await runResultsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"publish\": {\n const { runResultsPublish } = await import(\"./commands/results/publish.js\")\n await runResultsPublish(client, rest[2], { yes: flags.yes })\n break\n }\n case \"unpublish\": {\n const { runResultsUnpublish } = await import(\"./commands/results/unpublish.js\")\n await runResultsUnpublish(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown results command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"webhooks\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runWebhooksList } = await import(\"./commands/webhooks/list.js\")\n await runWebhooksList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runWebhooksCreate } = await import(\"./commands/webhooks/create.js\")\n await runWebhooksCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runWebhooksDelete } = await import(\"./commands/webhooks/delete.js\")\n await runWebhooksDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown webhooks command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"jobs\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJobsList } = await import(\"./commands/jobs/list.js\")\n await runJobsList(client, rest.slice(2), { json: flags.json })\n break\n }\n case \"get\": {\n const { runJobsGet } = await import(\"./commands/jobs/get.js\")\n await runJobsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJobsCreate } = await import(\"./commands/jobs/create.js\")\n await runJobsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"result\": {\n const { runJobsResult } = await import(\"./commands/jobs/result.js\")\n await runJobsResult(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"cancel\": {\n const { runJobsCancel } = await import(\"./commands/jobs/cancel.js\")\n await runJobsCancel(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown jobs command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"schedules\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runSchedulesList } = await import(\"./commands/schedules/list.js\")\n await runSchedulesList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runSchedulesCreate } = await import(\"./commands/schedules/create.js\")\n await runSchedulesCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"get\": {\n const { runSchedulesGet } = await import(\"./commands/schedules/get.js\")\n await runSchedulesGet(client, rest[2], { json: flags.json })\n break\n }\n case \"update\": {\n const { runSchedulesUpdate } = await import(\"./commands/schedules/update.js\")\n await runSchedulesUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runSchedulesDelete } = await import(\"./commands/schedules/delete.js\")\n await runSchedulesDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown schedules command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n default:\n console.error(`Unknown command: ${command}. Run \"hackathon --help\" for usage.`)\n process.exit(1)\n }\n } catch (error) {\n if (error instanceof ScopeError) {\n console.error(formatError({ message: error.message, hint: error.hint }))\n } else if (error instanceof AuthError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ConfigError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ApiError) {\n console.error(formatError({ message: error.toString(), hint: error.hint }))\n } else if (error instanceof Error) {\n console.error(formatError({ message: error.message }))\n } else {\n console.error(formatError({ message: String(error) }))\n }\n process.exit(1)\n }\n}\n\nmain()\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/client.ts","../src/output.ts","../src/cli.ts"],"sourcesContent":["import { REQUEST_TIMEOUT_MS } from \"./constants.js\"\nimport { ApiError, AuthError, ScopeError } from \"./errors.js\"\n\ninterface ClientOptions {\n baseUrl: string\n apiKey?: string\n}\n\ninterface RequestOptions {\n method?: string\n body?: unknown\n params?: Record<string, string | number | undefined>\n timeout?: number\n}\n\nexport class OatmealClient {\n private baseUrl: string\n private apiKey?: string\n\n constructor(options: ClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\")\n this.apiKey = options.apiKey\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"GET\" })\n }\n\n async post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"POST\", body })\n }\n\n async patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"PATCH\", body })\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: \"DELETE\" })\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, timeout = REQUEST_TIMEOUT_MS } = options\n\n let url = `${this.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.set(key, String(value))\n }\n }\n const qs = searchParams.toString()\n if (qs) url += `?${qs}`\n }\n\n const headers: Record<string, string> = {}\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`\n }\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await this.fetchWithRetry(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n })\n\n clearTimeout(timer)\n\n if (response.status === 204) {\n return undefined as T\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\"\n let data: unknown\n\n if (contentType.includes(\"application/json\")) {\n data = await response.json()\n } else {\n const text = await response.text()\n data = { message: text }\n }\n\n if (!response.ok) {\n this.handleErrorResponse(response.status, data)\n }\n\n return data as T\n } catch (error) {\n clearTimeout(timer)\n if (error instanceof ApiError || error instanceof AuthError || error instanceof ScopeError) {\n throw error\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ApiError(0, `Request timed out after ${timeout / 1000}s`)\n }\n if (error instanceof TypeError && (error.message.includes(\"fetch\") || error.message.includes(\"network\"))) {\n throw new ApiError(0, `Could not connect to ${this.baseUrl}. Is the server running?`)\n }\n throw new ApiError(0, `Network error: ${(error as Error).message}`)\n }\n }\n\n private async fetchWithRetry(\n url: string,\n init: RequestInit,\n retried = false\n ): Promise<Response> {\n const response = await fetch(url, init)\n\n if (response.status === 429 && !retried) {\n const retryAfter = response.headers.get(\"retry-after\")\n const delay = retryAfter ? parseInt(retryAfter, 10) * 1000 : 1000\n await new Promise((resolve) => setTimeout(resolve, Math.min(delay, 10_000)))\n return this.fetchWithRetry(url, init, true)\n }\n\n return response\n }\n\n private handleErrorResponse(status: number, data: unknown): never {\n const body = data as Record<string, unknown>\n const message = (body?.error as string) || (body?.message as string) || `Request failed`\n\n if (status === 401) {\n throw new AuthError(message)\n }\n\n if (status === 403) {\n const scope = body?.requiredScope as string | undefined\n if (scope) {\n throw new ScopeError(scope, body?.currentScopes as string[] | undefined)\n }\n throw new ApiError(403, message)\n }\n\n if (status === 404) {\n throw new ApiError(404, body?.message ? message : \"Resource not found\")\n }\n\n if (status === 429) {\n throw new ApiError(429, \"Rate limited. Please try again later.\", \"Wait a moment before retrying.\")\n }\n\n throw new ApiError(status, message)\n }\n}\n","import pc from \"picocolors\"\n\nconst noColor = !!process.env.NO_COLOR\n\nfunction color<T extends string>(fn: (s: T) => string, s: T): string {\n return noColor ? s : fn(s)\n}\n\ninterface Column<T> {\n key: keyof T\n label: string\n width?: number\n}\n\nexport function formatTable<T extends object>(\n rows: T[],\n columns: Column<T>[]\n): string {\n if (rows.length === 0) {\n return \"\"\n }\n\n const widths = columns.map((col) => {\n const headerWidth = col.label.length\n const maxDataWidth = rows.reduce((max, row) => {\n const val = String(row[col.key] ?? \"\")\n return Math.max(max, val.length)\n }, 0)\n return col.width ?? Math.min(Math.max(headerWidth, maxDataWidth), 50)\n })\n\n const header = columns.map((col, i) => col.label.padEnd(widths[i])).join(\" \")\n const separator = widths.map((w) => \"─\".repeat(w)).join(\"──\")\n\n const dataRows = rows.map((row) =>\n columns\n .map((col, i) => {\n const val = String(row[col.key] ?? \"\")\n return val.length > widths[i] ? val.slice(0, widths[i] - 1) + \"…\" : val.padEnd(widths[i])\n })\n .join(\" \")\n )\n\n return [color(pc.bold, header), separator, ...dataRows].join(\"\\n\")\n}\n\nexport function formatJson(data: unknown): string {\n return JSON.stringify(data, null, 2)\n}\n\nexport function formatDetail(fields: Array<{ label: string; value: string | undefined }>): string {\n const maxLabel = fields.reduce((max, f) => Math.max(max, f.label.length), 0)\n return fields\n .map((f) => `${color(pc.bold, f.label.padEnd(maxLabel))} ${f.value ?? color(pc.dim, \"—\")}`)\n .join(\"\\n\")\n}\n\nexport function formatError(error: { message: string; hint?: string }): string {\n const lines = [color(pc.red, `Error: ${error.message}`)]\n if (error.hint) {\n lines.push(color(pc.dim, `Hint: ${error.hint}`))\n }\n return lines.join(\"\\n\")\n}\n\nexport function formatSuccess(message: string): string {\n return color(pc.green, `✓ ${message}`)\n}\n\nexport function formatWarning(message: string): string {\n return color(pc.yellow, `⚠ ${message}`)\n}\n","import pc from \"picocolors\"\nimport { OatmealClient } from \"./client.js\"\nimport { loadConfig } from \"./config.js\"\nimport { VERSION, DEFAULT_BASE_URL } from \"./constants.js\"\nimport { ApiError, AuthError, ConfigError, ScopeError } from \"./errors.js\"\nimport { formatError } from \"./output.js\"\n\ninterface GlobalFlags {\n json: boolean\n yes: boolean\n baseUrl?: string\n apiKey?: string\n help: boolean\n}\n\nfunction parseGlobalFlags(args: string[]): { flags: GlobalFlags; rest: string[] } {\n const flags: GlobalFlags = { json: false, yes: false, help: false }\n const rest: string[] = []\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--json\":\n flags.json = true\n break\n case \"--yes\":\n case \"-y\":\n flags.yes = true\n break\n case \"--base-url\":\n flags.baseUrl = args[++i]\n break\n case \"--api-key\":\n flags.apiKey = args[++i]\n break\n case \"--help\":\n case \"-h\":\n flags.help = true\n break\n case \"--version\":\n case \"-v\":\n console.log(VERSION)\n process.exit(0)\n break\n default:\n rest.push(args[i])\n }\n }\n\n return { flags, rest }\n}\n\nfunction createPublicClient(flags: GlobalFlags): OatmealClient {\n const config = loadConfig()\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config?.baseUrl ?? DEFAULT_BASE_URL,\n })\n}\n\nfunction createAuthenticatedClient(flags: GlobalFlags): OatmealClient {\n const apiKey = flags.apiKey ?? process.env.HACKATHON_API_KEY\n if (apiKey) {\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? DEFAULT_BASE_URL,\n apiKey,\n })\n }\n\n const config = loadConfig()\n if (!config?.apiKey) {\n throw new AuthError()\n }\n\n return new OatmealClient({\n baseUrl: flags.baseUrl ?? config.baseUrl,\n apiKey: config.apiKey,\n })\n}\n\nconst BANNER = `\n ${pc.bold(\"hackathon\")} — CLI for the Oatmeal hackathon platform\n\n ${pc.dim(\"USAGE\")}\n hackathon <command> [options]\n\n ${pc.dim(\"PUBLIC COMMANDS (no auth required)\")}\n browse hackathons Search public hackathons\n browse submissions <slug> View submissions for a hackathon\n browse results <slug> View published results\n browse org <slug> View organization profile\n\n ${pc.dim(\"AUTH\")}\n login Sign in via browser or API key\n logout Remove saved credentials\n whoami Show current auth info\n update Update CLI to latest version\n\n ${pc.dim(\"EVENT MANAGEMENT (auth required)\")}\n events list List your hackathons\n events get <id> Get hackathon details\n events create Create a hackathon\n events update <id> Update a hackathon\n events delete <id> Delete a hackathon\n ${pc.dim(\"(alias: hackathons)\")}\n\n ${pc.dim(\"JUDGING\")}\n judging criteria list <id> List criteria\n judging criteria create <id> Create criteria\n judging criteria update <id> <cid> Update criteria\n judging criteria delete <id> <cid> Delete criteria\n judging judges list <id> List judges\n judging judges add <id> Add a judge\n judging judges remove <id> <pid> Remove a judge\n judging assignments list <id> List assignments\n judging assignments create <id> Create assignment\n judging assignments delete <id> <aid> Delete assignment\n judging auto-assign <id> Auto-assign judges\n judging invitations list <id> List invitations\n judging invitations cancel <id> <iid> Cancel invitation\n judging pick-results <id> View pick results\n\n ${pc.dim(\"PRIZES\")}\n prizes list <id> List prizes\n prizes create <id> Create a prize\n prizes update <id> <pid> Update a prize\n prizes delete <id> <pid> Delete a prize\n prizes reorder <id> Reorder prizes\n prizes assign <id> <pid> Assign prize\n prizes unassign <id> <pid> <sid> Unassign prize\n\n ${pc.dim(\"JUDGE DISPLAY\")}\n judge-display list <id> List display profiles\n judge-display create <id> Create display profile\n judge-display update <id> <jid> Update display profile\n judge-display delete <id> <jid> Delete display profile\n judge-display reorder <id> Reorder profiles\n\n ${pc.dim(\"RESULTS\")}\n results calculate <id> Calculate results\n results get <id> Get detailed results\n results publish <id> Publish results\n results unpublish <id> Unpublish results\n\n ${pc.dim(\"WEBHOOKS\")}\n webhooks list List webhooks\n webhooks create Create a webhook\n webhooks delete <id> Delete a webhook\n\n ${pc.dim(\"JOBS\")}\n jobs list List jobs\n jobs get <id> Get job details\n jobs create Create a job\n jobs result <id> Get job result\n jobs cancel <id> Cancel a job\n\n ${pc.dim(\"SCHEDULES\")}\n schedules list List schedules\n schedules create Create a schedule\n schedules get <id> Get schedule details\n schedules update <id> Update a schedule\n schedules delete <id> Delete a schedule\n\n ${pc.dim(\"GLOBAL OPTIONS\")}\n --json Output as JSON\n --yes, -y Skip confirmation prompts\n --base-url API base URL\n --api-key API key (overrides config)\n --help, -h Show help\n --version, -v Show version\n`\n\nasync function notifyIfUpdateAvailable(): Promise<void> {\n try {\n const { checkForUpdate, formatUpdateNotice } = await import(\"./update-check.js\")\n const update = await checkForUpdate()\n if (update) {\n console.error(formatUpdateNotice(update))\n }\n } catch {\n // Silently ignore update check failures\n }\n}\n\nasync function main() {\n const { flags, rest } = parseGlobalFlags(process.argv.slice(2))\n\n if (rest.length === 0 || flags.help) {\n console.log(BANNER)\n return\n }\n\n const command = rest[0]\n const sub = rest[1]\n const sub2 = rest[2]\n\n try {\n switch (command) {\n case \"login\": {\n const { runLogin } = await import(\"./commands/login.js\")\n await runLogin(rest.slice(1).concat(flags.yes ? [\"--yes\"] : []).concat(flags.baseUrl ? [\"--base-url\", flags.baseUrl] : []).concat(flags.apiKey ? [\"--api-key\", flags.apiKey] : []))\n break\n }\n\n case \"logout\": {\n const { runLogout } = await import(\"./commands/logout.js\")\n await runLogout()\n break\n }\n\n case \"whoami\": {\n const client = createAuthenticatedClient(flags)\n const { runWhoAmI } = await import(\"./commands/whoami.js\")\n await runWhoAmI(client, { json: flags.json })\n break\n }\n\n case \"update\": {\n const { runUpdate } = await import(\"./commands/update.js\")\n await runUpdate()\n return\n }\n\n case \"browse\": {\n const client = createPublicClient(flags)\n switch (sub) {\n case \"hackathons\": {\n const { runBrowseHackathons } = await import(\"./commands/browse/hackathons.js\")\n await runBrowseHackathons(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"submissions\": {\n const { runBrowseSubmissions } = await import(\"./commands/browse/submissions.js\")\n await runBrowseSubmissions(client, rest[2], { json: flags.json })\n break\n }\n case \"results\": {\n const { runBrowseResults } = await import(\"./commands/browse/results.js\")\n await runBrowseResults(client, rest[2], { json: flags.json })\n break\n }\n case \"org\": {\n const { runBrowseOrg } = await import(\"./commands/browse/org.js\")\n await runBrowseOrg(client, rest[2], { json: flags.json })\n break\n }\n default:\n console.error(`Unknown browse command: ${sub}. Run \"hackathon browse --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"hackathons\":\n case \"events\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runHackathonsList } = await import(\"./commands/hackathons/list.js\")\n await runHackathonsList(client, { json: flags.json })\n break\n }\n case \"get\": {\n const { runHackathonsGet } = await import(\"./commands/hackathons/get.js\")\n await runHackathonsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runHackathonsCreate } = await import(\"./commands/hackathons/create.js\")\n await runHackathonsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runHackathonsUpdate } = await import(\"./commands/hackathons/update.js\")\n await runHackathonsUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runHackathonsDelete } = await import(\"./commands/hackathons/delete.js\")\n await runHackathonsDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown events command: ${sub}. Run \"hackathon events --help\" for usage.`)\n process.exit(1)\n }\n break\n }\n\n case \"judging\": {\n const client = createAuthenticatedClient(flags)\n const hackathonId = rest[2]\n switch (sub) {\n case \"criteria\":\n switch (sub2) {\n case \"list\": {\n const { runCriteriaList } = await import(\"./commands/judging/criteria-list.js\")\n await runCriteriaList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runCriteriaCreate } = await import(\"./commands/judging/criteria-create.js\")\n await runCriteriaCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runCriteriaUpdate } = await import(\"./commands/judging/criteria-update.js\")\n await runCriteriaUpdate(client, rest[3], rest[4], rest.slice(5).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runCriteriaDelete } = await import(\"./commands/judging/criteria-delete.js\")\n await runCriteriaDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging criteria command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"judges\":\n switch (sub2) {\n case \"list\": {\n const { runJudgesList } = await import(\"./commands/judging/judges-list.js\")\n await runJudgesList(client, rest[3], { json: flags.json })\n break\n }\n case \"add\": {\n const { runJudgesAdd } = await import(\"./commands/judging/judges-add.js\")\n await runJudgesAdd(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"remove\": {\n const { runJudgesRemove } = await import(\"./commands/judging/judges-remove.js\")\n await runJudgesRemove(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging judges command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"assignments\":\n switch (sub2) {\n case \"list\": {\n const { runAssignmentsList } = await import(\"./commands/judging/assignments-list.js\")\n await runAssignmentsList(client, rest[3], { json: flags.json })\n break\n }\n case \"create\": {\n const { runAssignmentsCreate } = await import(\"./commands/judging/assignments-create.js\")\n await runAssignmentsCreate(client, rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runAssignmentsDelete } = await import(\"./commands/judging/assignments-delete.js\")\n await runAssignmentsDelete(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging assignments command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"auto-assign\": {\n const { runAutoAssign } = await import(\"./commands/judging/auto-assign.js\")\n await runAutoAssign(client, hackathonId, rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n\n case \"invitations\":\n switch (sub2) {\n case \"list\": {\n const { runInvitationsList } = await import(\"./commands/judging/invitations-list.js\")\n await runInvitationsList(client, rest[3], { json: flags.json })\n break\n }\n case \"cancel\": {\n const { runInvitationsCancel } = await import(\"./commands/judging/invitations-cancel.js\")\n await runInvitationsCancel(client, rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown judging invitations command: ${sub2}`)\n process.exit(1)\n }\n break\n\n case \"pick-results\": {\n const { runPickResults } = await import(\"./commands/judging/pick-results.js\")\n await runPickResults(client, hackathonId, { json: flags.json })\n break\n }\n\n default:\n console.error(`Unknown judging command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"prizes\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runPrizesList } = await import(\"./commands/prizes/list.js\")\n await runPrizesList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runPrizesCreate } = await import(\"./commands/prizes/create.js\")\n await runPrizesCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runPrizesUpdate } = await import(\"./commands/prizes/update.js\")\n await runPrizesUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runPrizesDelete } = await import(\"./commands/prizes/delete.js\")\n await runPrizesDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runPrizesReorder } = await import(\"./commands/prizes/reorder.js\")\n await runPrizesReorder(client, rest[2], rest.slice(3))\n break\n }\n case \"assign\": {\n const { runPrizesAssign } = await import(\"./commands/prizes/assign.js\")\n await runPrizesAssign(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"unassign\": {\n const { runPrizesUnassign } = await import(\"./commands/prizes/unassign.js\")\n await runPrizesUnassign(client, rest[2], rest[3], rest[4], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown prizes command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"judge-display\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJudgeDisplayList } = await import(\"./commands/judge-display/list.js\")\n await runJudgeDisplayList(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJudgeDisplayCreate } = await import(\"./commands/judge-display/create.js\")\n await runJudgeDisplayCreate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"update\": {\n const { runJudgeDisplayUpdate } = await import(\"./commands/judge-display/update.js\")\n await runJudgeDisplayUpdate(client, rest[2], rest[3], rest.slice(4).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runJudgeDisplayDelete } = await import(\"./commands/judge-display/delete.js\")\n await runJudgeDisplayDelete(client, rest[2], rest[3], { yes: flags.yes })\n break\n }\n case \"reorder\": {\n const { runJudgeDisplayReorder } = await import(\"./commands/judge-display/reorder.js\")\n await runJudgeDisplayReorder(client, rest[2], rest.slice(3))\n break\n }\n default:\n console.error(`Unknown judge-display command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"results\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"calculate\": {\n const { runResultsCalculate } = await import(\"./commands/results/calculate.js\")\n await runResultsCalculate(client, rest[2], { json: flags.json })\n break\n }\n case \"get\": {\n const { runResultsGet } = await import(\"./commands/results/get.js\")\n await runResultsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"publish\": {\n const { runResultsPublish } = await import(\"./commands/results/publish.js\")\n await runResultsPublish(client, rest[2], { yes: flags.yes })\n break\n }\n case \"unpublish\": {\n const { runResultsUnpublish } = await import(\"./commands/results/unpublish.js\")\n await runResultsUnpublish(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown results command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"webhooks\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runWebhooksList } = await import(\"./commands/webhooks/list.js\")\n await runWebhooksList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runWebhooksCreate } = await import(\"./commands/webhooks/create.js\")\n await runWebhooksCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runWebhooksDelete } = await import(\"./commands/webhooks/delete.js\")\n await runWebhooksDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown webhooks command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"jobs\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runJobsList } = await import(\"./commands/jobs/list.js\")\n await runJobsList(client, rest.slice(2), { json: flags.json })\n break\n }\n case \"get\": {\n const { runJobsGet } = await import(\"./commands/jobs/get.js\")\n await runJobsGet(client, rest[2], { json: flags.json })\n break\n }\n case \"create\": {\n const { runJobsCreate } = await import(\"./commands/jobs/create.js\")\n await runJobsCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"result\": {\n const { runJobsResult } = await import(\"./commands/jobs/result.js\")\n await runJobsResult(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"cancel\": {\n const { runJobsCancel } = await import(\"./commands/jobs/cancel.js\")\n await runJobsCancel(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown jobs command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n case \"schedules\": {\n const client = createAuthenticatedClient(flags)\n switch (sub) {\n case \"list\": {\n const { runSchedulesList } = await import(\"./commands/schedules/list.js\")\n await runSchedulesList(client, { json: flags.json })\n break\n }\n case \"create\": {\n const { runSchedulesCreate } = await import(\"./commands/schedules/create.js\")\n await runSchedulesCreate(client, rest.slice(2).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"get\": {\n const { runSchedulesGet } = await import(\"./commands/schedules/get.js\")\n await runSchedulesGet(client, rest[2], { json: flags.json })\n break\n }\n case \"update\": {\n const { runSchedulesUpdate } = await import(\"./commands/schedules/update.js\")\n await runSchedulesUpdate(client, rest[2], rest.slice(3).concat(flags.json ? [\"--json\"] : []))\n break\n }\n case \"delete\": {\n const { runSchedulesDelete } = await import(\"./commands/schedules/delete.js\")\n await runSchedulesDelete(client, rest[2], { yes: flags.yes })\n break\n }\n default:\n console.error(`Unknown schedules command: ${sub}`)\n process.exit(1)\n }\n break\n }\n\n default:\n console.error(`Unknown command: ${command}. Run \"hackathon --help\" for usage.`)\n process.exit(1)\n }\n } catch (error) {\n if (error instanceof ScopeError) {\n console.error(formatError({ message: error.message, hint: error.hint }))\n } else if (error instanceof AuthError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ConfigError) {\n console.error(formatError({ message: error.message }))\n } else if (error instanceof ApiError) {\n console.error(formatError({ message: error.toString(), hint: error.hint }))\n } else if (error instanceof Error) {\n console.error(formatError({ message: error.message }))\n } else {\n console.error(formatError({ message: String(error) }))\n }\n process.exit(1)\n } finally {\n await notifyIfUpdateAvailable()\n }\n}\n\nmain()\n"],"mappings":";;;;AAeA,IAAa,gBAAb,MAA2B;CACzB;CACA;CAEA,YAAY,SAAwB;AAClC,OAAK,UAAU,QAAQ,QAAQ,QAAQ,OAAO,GAAG;AACjD,OAAK,SAAS,QAAQ;;CAGxB,MAAM,IAAO,MAAc,SAAsC;AAC/D,SAAO,KAAK,QAAW,MAAM;GAAE,GAAG;GAAS,QAAQ;GAAO,CAAC;;CAG7D,MAAM,KAAQ,MAAc,MAAgB,SAAsC;AAChF,SAAO,KAAK,QAAW,MAAM;GAAE,GAAG;GAAS,QAAQ;GAAQ;GAAM,CAAC;;CAGpE,MAAM,MAAS,MAAc,MAAgB,SAAsC;AACjF,SAAO,KAAK,QAAW,MAAM;GAAE,GAAG;GAAS,QAAQ;GAAS;GAAM,CAAC;;CAGrE,MAAM,OAAU,MAAc,SAAsC;AAClE,SAAO,KAAK,QAAW,MAAM;GAAE,GAAG;GAAS,QAAQ;GAAU,CAAC;;CAGhE,MAAc,QAAW,MAAc,UAA0B,EAAE,EAAc;EAC/E,MAAM,EAAE,SAAS,OAAO,MAAM,QAAQ,UAAU,uBAAuB;EAEvE,IAAI,MAAM,GAAG,KAAK,UAAU;AAC5B,MAAI,QAAQ;GACV,MAAM,eAAe,IAAI,iBAAiB;AAC1C,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,KAAI,UAAU,KAAA,EACZ,cAAa,IAAI,KAAK,OAAO,MAAM,CAAC;GAGxC,MAAM,KAAK,aAAa,UAAU;AAClC,OAAI,GAAI,QAAO,IAAI;;EAGrB,MAAM,UAAkC,EAAE;AAC1C,MAAI,KAAK,OACP,SAAQ,mBAAmB,UAAU,KAAK;AAE5C,MAAI,SAAS,KAAA,EACX,SAAQ,kBAAkB;EAG5B,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,QAAQ,iBAAiB,WAAW,OAAO,EAAE,QAAQ;AAE3D,MAAI;GACF,MAAM,WAAW,MAAM,KAAK,eAAe,KAAK;IAC9C;IACA;IACA,MAAM,SAAS,KAAA,IAAY,KAAK,UAAU,KAAK,GAAG,KAAA;IAClD,QAAQ,WAAW;IACpB,CAAC;AAEF,gBAAa,MAAM;AAEnB,OAAI,SAAS,WAAW,IACtB;GAGF,MAAM,cAAc,SAAS,QAAQ,IAAI,eAAe,IAAI;GAC5D,IAAI;AAEJ,OAAI,YAAY,SAAS,mBAAmB,CAC1C,QAAO,MAAM,SAAS,MAAM;OAG5B,QAAO,EAAE,SADI,MAAM,SAAS,MAAM,EACV;AAG1B,OAAI,CAAC,SAAS,GACZ,MAAK,oBAAoB,SAAS,QAAQ,KAAK;AAGjD,UAAO;WACA,OAAO;AACd,gBAAa,MAAM;AACnB,OAAI,iBAAiB,YAAY,iBAAiB,aAAa,iBAAiB,WAC9E,OAAM;AAER,OAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,OAAM,IAAI,SAAS,GAAG,2BAA2B,UAAU,IAAK,GAAG;AAErE,OAAI,iBAAiB,cAAc,MAAM,QAAQ,SAAS,QAAQ,IAAI,MAAM,QAAQ,SAAS,UAAU,EACrG,OAAM,IAAI,SAAS,GAAG,wBAAwB,KAAK,QAAQ,0BAA0B;AAEvF,SAAM,IAAI,SAAS,GAAG,kBAAmB,MAAgB,UAAU;;;CAIvE,MAAc,eACZ,KACA,MACA,UAAU,OACS;EACnB,MAAM,WAAW,MAAM,MAAM,KAAK,KAAK;AAEvC,MAAI,SAAS,WAAW,OAAO,CAAC,SAAS;GACvC,MAAM,aAAa,SAAS,QAAQ,IAAI,cAAc;GACtD,MAAM,QAAQ,aAAa,SAAS,YAAY,GAAG,GAAG,MAAO;AAC7D,SAAM,IAAI,SAAS,YAAY,WAAW,SAAS,KAAK,IAAI,OAAO,IAAO,CAAC,CAAC;AAC5E,UAAO,KAAK,eAAe,KAAK,MAAM,KAAK;;AAG7C,SAAO;;CAGT,oBAA4B,QAAgB,MAAsB;EAChE,MAAM,OAAO;EACb,MAAM,UAAW,MAAM,SAAqB,MAAM,WAAsB;AAExE,MAAI,WAAW,IACb,OAAM,IAAI,UAAU,QAAQ;AAG9B,MAAI,WAAW,KAAK;GAClB,MAAM,QAAQ,MAAM;AACpB,OAAI,MACF,OAAM,IAAI,WAAW,OAAO,MAAM,cAAsC;AAE1E,SAAM,IAAI,SAAS,KAAK,QAAQ;;AAGlC,MAAI,WAAW,IACb,OAAM,IAAI,SAAS,KAAK,MAAM,UAAU,UAAU,qBAAqB;AAGzE,MAAI,WAAW,IACb,OAAM,IAAI,SAAS,KAAK,yCAAyC,iCAAiC;AAGpG,QAAM,IAAI,SAAS,QAAQ,QAAQ;;;;;ACrJvC,MAAM,UAAU,CAAC,CAAC,QAAQ,IAAI;AAE9B,SAAS,MAAwB,IAAsB,GAAc;AACnE,QAAO,UAAU,IAAI,GAAG,EAAE;;AAS5B,SAAgB,YACd,MACA,SACQ;AACR,KAAI,KAAK,WAAW,EAClB,QAAO;CAGT,MAAM,SAAS,QAAQ,KAAK,QAAQ;EAClC,MAAM,cAAc,IAAI,MAAM;EAC9B,MAAM,eAAe,KAAK,QAAQ,KAAK,QAAQ;GAC7C,MAAM,MAAM,OAAO,IAAI,IAAI,QAAQ,GAAG;AACtC,UAAO,KAAK,IAAI,KAAK,IAAI,OAAO;KAC/B,EAAE;AACL,SAAO,IAAI,SAAS,KAAK,IAAI,KAAK,IAAI,aAAa,aAAa,EAAE,GAAG;GACrE;CAEF,MAAM,SAAS,QAAQ,KAAK,KAAK,MAAM,IAAI,MAAM,OAAO,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK;CAC9E,MAAM,YAAY,OAAO,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC,KAAK,KAAK;CAE7D,MAAM,WAAW,KAAK,KAAK,QACzB,QACG,KAAK,KAAK,MAAM;EACf,MAAM,MAAM,OAAO,IAAI,IAAI,QAAQ,GAAG;AACtC,SAAO,IAAI,SAAS,OAAO,KAAK,IAAI,MAAM,GAAG,OAAO,KAAK,EAAE,GAAG,MAAM,IAAI,OAAO,OAAO,GAAG;GACzF,CACD,KAAK,KAAK,CACd;AAED,QAAO;EAAC,MAAM,GAAG,MAAM,OAAO;EAAE;EAAW,GAAG;EAAS,CAAC,KAAK,KAAK;;AAGpE,SAAgB,WAAW,MAAuB;AAChD,QAAO,KAAK,UAAU,MAAM,MAAM,EAAE;;AAGtC,SAAgB,aAAa,QAAqE;CAChG,MAAM,WAAW,OAAO,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,MAAM,OAAO,EAAE,EAAE;AAC5E,QAAO,OACJ,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,OAAO,SAAS,CAAC,CAAC,IAAI,EAAE,SAAS,MAAM,GAAG,KAAK,IAAI,GAAG,CAC3F,KAAK,KAAK;;AAGf,SAAgB,YAAY,OAAmD;CAC7E,MAAM,QAAQ,CAAC,MAAM,GAAG,KAAK,UAAU,MAAM,UAAU,CAAC;AACxD,KAAI,MAAM,KACR,OAAM,KAAK,MAAM,GAAG,KAAK,SAAS,MAAM,OAAO,CAAC;AAElD,QAAO,MAAM,KAAK,KAAK;;AAGzB,SAAgB,cAAc,SAAyB;AACrD,QAAO,MAAM,GAAG,OAAO,KAAK,UAAU;;AAGxC,SAAgB,cAAc,SAAyB;AACrD,QAAO,MAAM,GAAG,QAAQ,KAAK,UAAU;;;;ACvDzC,SAAS,iBAAiB,MAAwD;CAChF,MAAM,QAAqB;EAAE,MAAM;EAAO,KAAK;EAAO,MAAM;EAAO;CACnE,MAAM,OAAiB,EAAE;AAEzB,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,SAAM,OAAO;AACb;EACF,KAAK;EACL,KAAK;AACH,SAAM,MAAM;AACZ;EACF,KAAK;AACH,SAAM,UAAU,KAAK,EAAE;AACvB;EACF,KAAK;AACH,SAAM,SAAS,KAAK,EAAE;AACtB;EACF,KAAK;EACL,KAAK;AACH,SAAM,OAAO;AACb;EACF,KAAK;EACL,KAAK;AACH,WAAQ,IAAI,QAAQ;AACpB,WAAQ,KAAK,EAAE;AACf;EACF,QACE,MAAK,KAAK,KAAK,GAAG;;AAIxB,QAAO;EAAE;EAAO;EAAM;;AAGxB,SAAS,mBAAmB,OAAmC;CAC7D,MAAM,SAAS,YAAY;AAC3B,QAAO,IAAI,cAAc,EACvB,SAAS,MAAM,WAAW,QAAQ,WAAA,0BACnC,CAAC;;AAGJ,SAAS,0BAA0B,OAAmC;CACpE,MAAM,SAAS,MAAM,UAAU,QAAQ,IAAI;AAC3C,KAAI,OACF,QAAO,IAAI,cAAc;EACvB,SAAS,MAAM,WAAA;EACf;EACD,CAAC;CAGJ,MAAM,SAAS,YAAY;AAC3B,KAAI,CAAC,QAAQ,OACX,OAAM,IAAI,WAAW;AAGvB,QAAO,IAAI,cAAc;EACvB,SAAS,MAAM,WAAW,OAAO;EACjC,QAAQ,OAAO;EAChB,CAAC;;AAGJ,MAAM,SAAS;IACX,GAAG,KAAK,YAAY,CAAC;;IAErB,GAAG,IAAI,QAAQ,CAAA;;;IAGf,GAAG,IAAI,qCAAqC,CAAA;;;;;;IAM5C,GAAG,IAAI,OAAO,CAAA;;;;;;IAMd,GAAG,IAAI,mCAAmC,CAAA;;;;;;MAMxC,GAAG,IAAI,sBAAsB,CAAA;;IAE/B,GAAG,IAAI,UAAU,CAAA;;;;;;;;;;;;;;;;IAgBjB,GAAG,IAAI,SAAS,CAAA;;;;;;;;;IAShB,GAAG,IAAI,gBAAgB,CAAA;;;;;;;IAOvB,GAAG,IAAI,UAAU,CAAA;;;;;;IAMjB,GAAG,IAAI,WAAW,CAAA;;;;;IAKlB,GAAG,IAAI,OAAO,CAAA;;;;;;;IAOd,GAAG,IAAI,YAAY,CAAA;;;;;;;IAOnB,GAAG,IAAI,iBAAiB,CAAA;;;;;;;;AAS5B,eAAe,0BAAyC;AACtD,KAAI;EACF,MAAM,EAAE,gBAAgB,uBAAuB,MAAM,OAAO;EAC5D,MAAM,SAAS,MAAM,gBAAgB;AACrC,MAAI,OACF,SAAQ,MAAM,mBAAmB,OAAO,CAAC;SAErC;;AAKV,eAAe,OAAO;CACpB,MAAM,EAAE,OAAO,SAAS,iBAAiB,QAAQ,KAAK,MAAM,EAAE,CAAC;AAE/D,KAAI,KAAK,WAAW,KAAK,MAAM,MAAM;AACnC,UAAQ,IAAI,OAAO;AACnB;;CAGF,MAAM,UAAU,KAAK;CACrB,MAAM,MAAM,KAAK;CACjB,MAAM,OAAO,KAAK;AAElB,KAAI;AACF,UAAQ,SAAR;GACE,KAAK,SAAS;IACZ,MAAM,EAAE,aAAa,MAAM,OAAO;AAClC,UAAM,SAAS,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,OAAO,MAAM,UAAU,CAAC,cAAc,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,OAAO,MAAM,SAAS,CAAC,aAAa,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC;AACnL;;GAGF,KAAK,UAAU;IACb,MAAM,EAAE,cAAc,MAAM,OAAO;AACnC,UAAM,WAAW;AACjB;;GAGF,KAAK,UAAU;IACb,MAAM,SAAS,0BAA0B,MAAM;IAC/C,MAAM,EAAE,cAAc,MAAM,OAAO;AACnC,UAAM,UAAU,QAAQ,EAAE,MAAM,MAAM,MAAM,CAAC;AAC7C;;GAGF,KAAK,UAAU;IACb,MAAM,EAAE,cAAc,MAAM,OAAO;AACnC,UAAM,WAAW;AACjB;;GAGF,KAAK,UAAU;IACb,MAAM,SAAS,mBAAmB,MAAM;AACxC,YAAQ,KAAR;KACE,KAAK,cAAc;MACjB,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACrF;;KAEF,KAAK,eAAe;MAClB,MAAM,EAAE,yBAAyB,MAAM,OAAO;AAC9C,YAAM,qBAAqB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AACjE;;KAEF,KAAK,WAAW;MACd,MAAM,EAAE,qBAAqB,MAAM,OAAO;AAC1C,YAAM,iBAAiB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC7D;;KAEF,KAAK,OAAO;MACV,MAAM,EAAE,iBAAiB,MAAM,OAAO;AACtC,YAAM,aAAa,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AACzD;;KAEF;AACE,cAAQ,MAAM,2BAA2B,IAAI,4CAA4C;AACzF,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK;GACL,KAAK,UAAU;IACb,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,QAAQ;MACX,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,YAAM,kBAAkB,QAAQ,EAAE,MAAM,MAAM,MAAM,CAAC;AACrD;;KAEF,KAAK,OAAO;MACV,MAAM,EAAE,qBAAqB,MAAM,OAAO;AAC1C,YAAM,iBAAiB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC7D;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACrF;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC9F;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAC9D;;KAEF;AACE,cAAQ,MAAM,2BAA2B,IAAI,4CAA4C;AACzF,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,WAAW;IACd,MAAM,SAAS,0BAA0B,MAAM;IAC/C,MAAM,cAAc,KAAK;AACzB,YAAQ,KAAR;KACE,KAAK;AACH,cAAQ,MAAR;OACE,KAAK,QAAQ;QACX,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,cAAM,gBAAgB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC5D;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,cAAM,kBAAkB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC5F;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,cAAM,kBAAkB,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACrG;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,cAAM,kBAAkB,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACrE;;OAEF;AACE,gBAAQ,MAAM,qCAAqC,OAAO;AAC1D,gBAAQ,KAAK,EAAE;;AAEnB;KAEF,KAAK;AACH,cAAQ,MAAR;OACE,KAAK,QAAQ;QACX,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,cAAM,cAAc,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC1D;;OAEF,KAAK,OAAO;QACV,MAAM,EAAE,iBAAiB,MAAM,OAAO;AACtC,cAAM,aAAa,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACvF;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,cAAM,gBAAgB,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACnE;;OAEF;AACE,gBAAQ,MAAM,mCAAmC,OAAO;AACxD,gBAAQ,KAAK,EAAE;;AAEnB;KAEF,KAAK;AACH,cAAQ,MAAR;OACE,KAAK,QAAQ;QACX,MAAM,EAAE,uBAAuB,MAAM,OAAO;AAC5C,cAAM,mBAAmB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC/D;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,yBAAyB,MAAM,OAAO;AAC9C,cAAM,qBAAqB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC/F;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,yBAAyB,MAAM,OAAO;AAC9C,cAAM,qBAAqB,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACxE;;OAEF;AACE,gBAAQ,MAAM,wCAAwC,OAAO;AAC7D,gBAAQ,KAAK,EAAE;;AAEnB;KAEF,KAAK,eAAe;MAClB,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,YAAM,cAAc,QAAQ,aAAa,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC5F;;KAGF,KAAK;AACH,cAAQ,MAAR;OACE,KAAK,QAAQ;QACX,MAAM,EAAE,uBAAuB,MAAM,OAAO;AAC5C,cAAM,mBAAmB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC/D;;OAEF,KAAK,UAAU;QACb,MAAM,EAAE,yBAAyB,MAAM,OAAO;AAC9C,cAAM,qBAAqB,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACxE;;OAEF;AACE,gBAAQ,MAAM,wCAAwC,OAAO;AAC7D,gBAAQ,KAAK,EAAE;;AAEnB;KAEF,KAAK,gBAAgB;MACnB,MAAM,EAAE,mBAAmB,MAAM,OAAO;AACxC,YAAM,eAAe,QAAQ,aAAa,EAAE,MAAM,MAAM,MAAM,CAAC;AAC/D;;KAGF;AACE,cAAQ,MAAM,4BAA4B,MAAM;AAChD,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,UAAU;IACb,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,QAAQ;MACX,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,YAAM,cAAc,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC1D;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,YAAM,gBAAgB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC1F;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,YAAM,gBAAgB,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACnG;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,YAAM,gBAAgB,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACnE;;KAEF,KAAK,WAAW;MACd,MAAM,EAAE,qBAAqB,MAAM,OAAO;AAC1C,YAAM,iBAAiB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC;AACtD;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,YAAM,gBAAgB,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACnG;;KAEF,KAAK,YAAY;MACf,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,YAAM,kBAAkB,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAC9E;;KAEF;AACE,cAAQ,MAAM,2BAA2B,MAAM;AAC/C,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,iBAAiB;IACpB,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,QAAQ;MACX,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAChE;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,0BAA0B,MAAM,OAAO;AAC/C,YAAM,sBAAsB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAChG;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,0BAA0B,MAAM,OAAO;AAC/C,YAAM,sBAAsB,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACzG;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,0BAA0B,MAAM,OAAO;AAC/C,YAAM,sBAAsB,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACzE;;KAEF,KAAK,WAAW;MACd,MAAM,EAAE,2BAA2B,MAAM,OAAO;AAChD,YAAM,uBAAuB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC;AAC5D;;KAEF;AACE,cAAQ,MAAM,kCAAkC,MAAM;AACtD,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,WAAW;IACd,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,aAAa;MAChB,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAChE;;KAEF,KAAK,OAAO;MACV,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,YAAM,cAAc,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC1D;;KAEF,KAAK,WAAW;MACd,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,YAAM,kBAAkB,QAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAC5D;;KAEF,KAAK,aAAa;MAChB,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,oBAAoB,QAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAC9D;;KAEF;AACE,cAAQ,MAAM,4BAA4B,MAAM;AAChD,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,YAAY;IACf,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,QAAQ;MACX,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,YAAM,gBAAgB,QAAQ,EAAE,MAAM,MAAM,MAAM,CAAC;AACnD;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,YAAM,kBAAkB,QAAQ,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACnF;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,sBAAsB,MAAM,OAAO;AAC3C,YAAM,kBAAkB,QAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAC5D;;KAEF;AACE,cAAQ,MAAM,6BAA6B,MAAM;AACjD,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,QAAQ;IACX,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,QAAQ;MACX,MAAM,EAAE,gBAAgB,MAAM,OAAO;AACrC,YAAM,YAAY,QAAQ,KAAK,MAAM,EAAE,EAAE,EAAE,MAAM,MAAM,MAAM,CAAC;AAC9D;;KAEF,KAAK,OAAO;MACV,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,YAAM,WAAW,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AACvD;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,YAAM,cAAc,QAAQ,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC/E;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,YAAM,cAAc,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACxF;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,YAAM,cAAc,QAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AACxD;;KAEF;AACE,cAAQ,MAAM,yBAAyB,MAAM;AAC7C,cAAQ,KAAK,EAAE;;AAEnB;;GAGF,KAAK,aAAa;IAChB,MAAM,SAAS,0BAA0B,MAAM;AAC/C,YAAQ,KAAR;KACE,KAAK,QAAQ;MACX,MAAM,EAAE,qBAAqB,MAAM,OAAO;AAC1C,YAAM,iBAAiB,QAAQ,EAAE,MAAM,MAAM,MAAM,CAAC;AACpD;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,uBAAuB,MAAM,OAAO;AAC5C,YAAM,mBAAmB,QAAQ,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACpF;;KAEF,KAAK,OAAO;MACV,MAAM,EAAE,oBAAoB,MAAM,OAAO;AACzC,YAAM,gBAAgB,QAAQ,KAAK,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC;AAC5D;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,uBAAuB,MAAM,OAAO;AAC5C,YAAM,mBAAmB,QAAQ,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC7F;;KAEF,KAAK,UAAU;MACb,MAAM,EAAE,uBAAuB,MAAM,OAAO;AAC5C,YAAM,mBAAmB,QAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAC7D;;KAEF;AACE,cAAQ,MAAM,8BAA8B,MAAM;AAClD,cAAQ,KAAK,EAAE;;AAEnB;;GAGF;AACE,YAAQ,MAAM,oBAAoB,QAAQ,qCAAqC;AAC/E,YAAQ,KAAK,EAAE;;UAEZ,OAAO;AACd,MAAI,iBAAiB,WACnB,SAAQ,MAAM,YAAY;GAAE,SAAS,MAAM;GAAS,MAAM,MAAM;GAAM,CAAC,CAAC;WAC/D,iBAAiB,UAC1B,SAAQ,MAAM,YAAY,EAAE,SAAS,MAAM,SAAS,CAAC,CAAC;WAC7C,iBAAiB,YAC1B,SAAQ,MAAM,YAAY,EAAE,SAAS,MAAM,SAAS,CAAC,CAAC;WAC7C,iBAAiB,SAC1B,SAAQ,MAAM,YAAY;GAAE,SAAS,MAAM,UAAU;GAAE,MAAM,MAAM;GAAM,CAAC,CAAC;WAClE,iBAAiB,MAC1B,SAAQ,MAAM,YAAY,EAAE,SAAS,MAAM,SAAS,CAAC,CAAC;MAEtD,SAAQ,MAAM,YAAY,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC,CAAC;AAExD,UAAQ,KAAK,EAAE;WACP;AACR,QAAM,yBAAyB;;;AAInC,MAAM"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agi-ventures-canada/hackathon-cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "CLI for the Oatmeal hackathon platform",
5
5
  "type": "module",
6
6
  "bin": {