@burdenoff/cli-sdk 2026.1102.4 → 2026.1107.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,110 +1,122 @@
|
|
|
1
|
-
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var
|
|
1
|
+
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var l=class extends Error{exitCode;hint;constructor(r,t){super(r),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},w=class extends l{constructor(r,t){super(r,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},b=class extends Error{cause;constructor(r,t){super(r),this.name="CliInternalError",this.cause=t;}};var y=null;function A(o){y=o;}function C(){if(!y)throw new b("vibecontrols module helpers used before setHelpersContext was called");return y}function qt(){let o=C();if(!o.auth.isAuthenticated())throw new w("Authentication required.",{hint:`Run \`${o.productName} auth login\` to authenticate.`})}async function a(o,r){return qt(),C().gql.workspace.request(o,r)}async function E(o,r){return C().gql.workspaceAuthOnly.request(o,r)}function i(o){let r=o instanceof Error?o.message:String(o);throw new l(r)}function s(o,r,t){C().output.formatAndOutput(o,r,t);}function u(o){C().output.printSuccess(o);}function x(o){C().output.printWarning(o);}function T(o){return C().output.formatDate(o)}function p(o,r){return C().output.truncate(o,r)}var O=`
|
|
2
2
|
query TecCourse($id: ID!) {
|
|
3
|
-
|
|
4
|
-
id
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
tecCanonicalCourse(id: $id) {
|
|
4
|
+
id
|
|
5
|
+
technospamCourse {
|
|
6
|
+
id slug title topic summary level status estimatedMinutes instructorId
|
|
7
|
+
tags publishedAt createdAt updatedAt workspaceId
|
|
8
|
+
cover { id }
|
|
9
|
+
lessons { id title kind position }
|
|
10
|
+
}
|
|
8
11
|
}
|
|
9
12
|
}
|
|
10
|
-
`,
|
|
13
|
+
`,R=`
|
|
11
14
|
query TecListCourses(
|
|
12
15
|
$level: TecCourseLevel
|
|
13
16
|
$status: TecCourseStatus
|
|
14
17
|
$pagination: PaginationInput
|
|
15
18
|
) {
|
|
16
|
-
|
|
19
|
+
tecCanonicalCourses(level: $level, status: $status, pagination: $pagination) {
|
|
17
20
|
items {
|
|
18
|
-
id
|
|
19
|
-
|
|
21
|
+
id
|
|
22
|
+
technospamCourse {
|
|
23
|
+
id slug title topic level status estimatedMinutes instructorId
|
|
24
|
+
publishedAt createdAt
|
|
25
|
+
}
|
|
20
26
|
}
|
|
21
27
|
pageInfo { cursor hasMore }
|
|
22
28
|
}
|
|
23
29
|
}
|
|
24
|
-
`,
|
|
30
|
+
`,v=`
|
|
25
31
|
mutation TecCreateCourse($input: TecCreateCourseInput!) {
|
|
26
32
|
tecCreateCourse(input: $input) {
|
|
27
33
|
id slug title topic summary level status estimatedMinutes instructorId
|
|
28
34
|
tags createdAt
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
|
-
`,
|
|
37
|
+
`,P=`
|
|
32
38
|
mutation TecUpdateCourse($id: ID!, $input: TecUpdateCourseInput!) {
|
|
33
39
|
tecUpdateCourse(id: $id, input: $input) {
|
|
34
40
|
id slug title topic summary level status estimatedMinutes instructorId
|
|
35
41
|
tags updatedAt
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
|
-
|
|
44
|
+
`,$=`
|
|
39
45
|
mutation TecPublishCourse($id: ID!) {
|
|
40
46
|
tecPublishCourse(id: $id) {
|
|
41
47
|
id slug title status publishedAt updatedAt
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
|
-
`,
|
|
50
|
+
`,L=`
|
|
45
51
|
mutation TecArchiveCourse($id: ID!) {
|
|
46
52
|
tecArchiveCourse(id: $id)
|
|
47
53
|
}
|
|
48
|
-
`,
|
|
49
|
-
query TecListLessons($courseId: ID
|
|
50
|
-
|
|
54
|
+
`,D=`
|
|
55
|
+
query TecListLessons($courseId: ID!, $pagination: PaginationInput) {
|
|
56
|
+
tecCanonicalLessons(courseId: $courseId, pagination: $pagination) {
|
|
51
57
|
items {
|
|
52
|
-
id
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
id
|
|
59
|
+
technospamLesson {
|
|
60
|
+
id courseId title kind position estimatedMinutes isPreview content
|
|
61
|
+
file { id }
|
|
62
|
+
createdAt updatedAt workspaceId
|
|
63
|
+
}
|
|
55
64
|
}
|
|
56
65
|
pageInfo { cursor hasMore }
|
|
57
66
|
}
|
|
58
67
|
}
|
|
59
|
-
`,
|
|
68
|
+
`,M=`
|
|
60
69
|
mutation TecCreateLesson($input: TecCreateLessonInput!) {
|
|
61
70
|
tecCreateLesson(input: $input) {
|
|
62
71
|
id courseId title kind position estimatedMinutes isPreview content
|
|
63
72
|
createdAt
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
|
-
|
|
75
|
+
`,N=`
|
|
67
76
|
mutation TecUpdateLesson($id: ID!, $input: TecUpdateLessonInput!) {
|
|
68
77
|
tecUpdateLesson(id: $id, input: $input) {
|
|
69
78
|
id courseId title kind position estimatedMinutes isPreview content
|
|
70
79
|
updatedAt
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
|
-
`,
|
|
82
|
+
`,U=`
|
|
74
83
|
query TecListEnrollments(
|
|
75
84
|
$courseId: ID
|
|
76
85
|
$learnerId: ID
|
|
77
86
|
$pagination: PaginationInput
|
|
78
87
|
) {
|
|
79
|
-
|
|
88
|
+
tecCanonicalEnrollments(courseId: $courseId, learnerId: $learnerId, pagination: $pagination) {
|
|
80
89
|
items {
|
|
81
|
-
id
|
|
82
|
-
|
|
90
|
+
id
|
|
91
|
+
technospamEnrollment {
|
|
92
|
+
id courseId learnerId status progressPct lessonsCompleted
|
|
93
|
+
startedAt lastActiveAt completedAt createdAt
|
|
94
|
+
}
|
|
83
95
|
}
|
|
84
96
|
pageInfo { cursor hasMore }
|
|
85
97
|
}
|
|
86
98
|
}
|
|
87
|
-
`,
|
|
99
|
+
`,_=`
|
|
88
100
|
mutation TecEnroll($input: TecEnrollInput!) {
|
|
89
101
|
tecEnroll(input: $input) {
|
|
90
102
|
id courseId learnerId status progressPct lessonsCompleted startedAt createdAt
|
|
91
103
|
}
|
|
92
104
|
}
|
|
93
|
-
`,
|
|
105
|
+
`,q=`
|
|
94
106
|
mutation TecUpdateProgress($input: TecUpdateProgressInput!) {
|
|
95
107
|
tecUpdateProgress(input: $input) {
|
|
96
108
|
id courseId learnerId status progressPct lessonsCompleted
|
|
97
109
|
lastActiveAt completedAt updatedAt
|
|
98
110
|
}
|
|
99
111
|
}
|
|
100
|
-
`,
|
|
112
|
+
`,H=`
|
|
101
113
|
query TecMentor($id: ID!) {
|
|
102
114
|
tecMentor(id: $id) {
|
|
103
115
|
id userId headline bio expertise hourlyRate currency status
|
|
104
116
|
isAcceptingMentees ratingAvg sessionsCount createdAt updatedAt workspaceId
|
|
105
117
|
}
|
|
106
118
|
}
|
|
107
|
-
`,
|
|
119
|
+
`,F=`
|
|
108
120
|
query TecListMentors($status: TecMentorStatus, $pagination: PaginationInput) {
|
|
109
121
|
tecListMentors(status: $status, pagination: $pagination) {
|
|
110
122
|
items {
|
|
@@ -114,27 +126,27 @@
|
|
|
114
126
|
pageInfo { cursor hasMore }
|
|
115
127
|
}
|
|
116
128
|
}
|
|
117
|
-
`,
|
|
129
|
+
`,G=`
|
|
118
130
|
mutation TecBecomeMentor($input: TecCreateMentorInput!) {
|
|
119
131
|
tecBecomeMentor(input: $input) {
|
|
120
132
|
id userId headline bio expertise hourlyRate currency status
|
|
121
133
|
isAcceptingMentees createdAt
|
|
122
134
|
}
|
|
123
135
|
}
|
|
124
|
-
`,
|
|
136
|
+
`,j=`
|
|
125
137
|
mutation TecUpdateMentor($id: ID!, $input: TecUpdateMentorInput!) {
|
|
126
138
|
tecUpdateMentor(id: $id, input: $input) {
|
|
127
139
|
id userId headline bio expertise hourlyRate currency status
|
|
128
140
|
isAcceptingMentees updatedAt
|
|
129
141
|
}
|
|
130
142
|
}
|
|
131
|
-
`,
|
|
143
|
+
`,B=`
|
|
132
144
|
mutation TecApproveMentor($id: ID!) {
|
|
133
145
|
tecApproveMentor(id: $id) {
|
|
134
146
|
id userId headline status updatedAt
|
|
135
147
|
}
|
|
136
148
|
}
|
|
137
|
-
`,
|
|
149
|
+
`,z=`
|
|
138
150
|
query TecListSessions($mentorId: ID, $menteeId: ID, $status: TecSessionStatus) {
|
|
139
151
|
tecListSessions(mentorId: $mentorId, menteeId: $menteeId, status: $status) {
|
|
140
152
|
items {
|
|
@@ -144,38 +156,38 @@
|
|
|
144
156
|
pageInfo { cursor hasMore }
|
|
145
157
|
}
|
|
146
158
|
}
|
|
147
|
-
`,
|
|
159
|
+
`,W=`
|
|
148
160
|
mutation TecBookSession($input: TecBookSessionInput!) {
|
|
149
161
|
tecBookSession(input: $input) {
|
|
150
162
|
id mentorId menteeId topic agenda status scheduledAt durationMinutes createdAt
|
|
151
163
|
}
|
|
152
164
|
}
|
|
153
|
-
`,
|
|
165
|
+
`,V=`
|
|
154
166
|
mutation TecConfirmSession($id: ID!, $meetingUrl: String) {
|
|
155
167
|
tecConfirmSession(id: $id, meetingUrl: $meetingUrl) {
|
|
156
168
|
id mentorId menteeId topic status scheduledAt meetingUrl updatedAt
|
|
157
169
|
}
|
|
158
170
|
}
|
|
159
|
-
`,
|
|
171
|
+
`,K=`
|
|
160
172
|
mutation TecCancelSession($id: ID!) {
|
|
161
173
|
tecCancelSession(id: $id) {
|
|
162
174
|
id mentorId menteeId topic status cancelledAt updatedAt
|
|
163
175
|
}
|
|
164
176
|
}
|
|
165
|
-
`,
|
|
177
|
+
`,J=`
|
|
166
178
|
mutation TecCompleteSession($id: ID!, $rating: Int, $feedback: String) {
|
|
167
179
|
tecCompleteSession(id: $id, rating: $rating, feedback: $feedback) {
|
|
168
180
|
id mentorId menteeId topic status rating feedback completedAt updatedAt
|
|
169
181
|
}
|
|
170
182
|
}
|
|
171
|
-
`,
|
|
183
|
+
`,Y=`
|
|
172
184
|
query TecHackathon($id: ID!) {
|
|
173
185
|
tecHackathon(id: $id) {
|
|
174
186
|
id slug title theme description status startAt endAt submissionDeadline
|
|
175
187
|
maxTeamSize prizePool currency tags createdAt updatedAt workspaceId
|
|
176
188
|
}
|
|
177
189
|
}
|
|
178
|
-
`,
|
|
190
|
+
`,Q=`
|
|
179
191
|
query TecListHackathons($status: TecHackathonStatus, $pagination: PaginationInput) {
|
|
180
192
|
tecListHackathons(status: $status, pagination: $pagination) {
|
|
181
193
|
items {
|
|
@@ -185,27 +197,27 @@
|
|
|
185
197
|
pageInfo { cursor hasMore }
|
|
186
198
|
}
|
|
187
199
|
}
|
|
188
|
-
`,
|
|
200
|
+
`,X=`
|
|
189
201
|
mutation TecCreateHackathon($input: TecCreateHackathonInput!) {
|
|
190
202
|
tecCreateHackathon(input: $input) {
|
|
191
203
|
id slug title theme description status startAt endAt submissionDeadline
|
|
192
204
|
maxTeamSize prizePool currency tags createdAt
|
|
193
205
|
}
|
|
194
206
|
}
|
|
195
|
-
`,
|
|
207
|
+
`,Z=`
|
|
196
208
|
mutation TecUpdateHackathon($id: ID!, $input: TecUpdateHackathonInput!) {
|
|
197
209
|
tecUpdateHackathon(id: $id, input: $input) {
|
|
198
210
|
id slug title theme description status startAt endAt submissionDeadline
|
|
199
211
|
maxTeamSize prizePool currency tags updatedAt
|
|
200
212
|
}
|
|
201
213
|
}
|
|
202
|
-
`,
|
|
214
|
+
`,tt=`
|
|
203
215
|
mutation TecOpenRegistration($id: ID!) {
|
|
204
216
|
tecOpenRegistration(id: $id) {
|
|
205
217
|
id slug title status updatedAt
|
|
206
218
|
}
|
|
207
219
|
}
|
|
208
|
-
`,
|
|
220
|
+
`,et=`
|
|
209
221
|
query TecListTeams($hackathonId: ID!) {
|
|
210
222
|
tecListTeams(hackathonId: $hackathonId) {
|
|
211
223
|
items {
|
|
@@ -215,33 +227,33 @@
|
|
|
215
227
|
pageInfo { cursor hasMore }
|
|
216
228
|
}
|
|
217
229
|
}
|
|
218
|
-
`,
|
|
230
|
+
`,nt=`
|
|
219
231
|
mutation TecRegisterTeam($input: TecRegisterTeamInput!) {
|
|
220
232
|
tecRegisterTeam(input: $input) {
|
|
221
233
|
id hackathonId name captainId memberIds status score createdAt
|
|
222
234
|
}
|
|
223
235
|
}
|
|
224
|
-
`,
|
|
236
|
+
`,rt=`
|
|
225
237
|
mutation TecSubmitProject($input: TecSubmitProjectInput!) {
|
|
226
238
|
tecSubmitProject(input: $input) {
|
|
227
239
|
id hackathonId name status projectName projectUrl repoUrl pitch
|
|
228
240
|
submittedAt updatedAt
|
|
229
241
|
}
|
|
230
242
|
}
|
|
231
|
-
`,
|
|
243
|
+
`,ot=`
|
|
232
244
|
mutation TecScoreTeam($id: ID!, $score: Int!, $winner: Boolean) {
|
|
233
245
|
tecScoreTeam(id: $id, score: $score, winner: $winner) {
|
|
234
246
|
id hackathonId name status score updatedAt
|
|
235
247
|
}
|
|
236
248
|
}
|
|
237
|
-
`,
|
|
249
|
+
`,it=`
|
|
238
250
|
query TecProblem($id: ID!) {
|
|
239
251
|
tecProblem(id: $id) {
|
|
240
252
|
id slug title topic statement difficulty status points languages tags
|
|
241
253
|
starterCode publishedAt createdAt updatedAt workspaceId
|
|
242
254
|
}
|
|
243
255
|
}
|
|
244
|
-
`,
|
|
256
|
+
`,st=`
|
|
245
257
|
query TecListProblems(
|
|
246
258
|
$difficulty: TecProblemDifficulty
|
|
247
259
|
$status: TecProblemStatus
|
|
@@ -261,27 +273,27 @@
|
|
|
261
273
|
pageInfo { cursor hasMore }
|
|
262
274
|
}
|
|
263
275
|
}
|
|
264
|
-
`,
|
|
276
|
+
`,at=`
|
|
265
277
|
mutation TecCreateProblem($input: TecCreateProblemInput!) {
|
|
266
278
|
tecCreateProblem(input: $input) {
|
|
267
279
|
id slug title topic statement difficulty status points languages tags
|
|
268
280
|
starterCode createdAt
|
|
269
281
|
}
|
|
270
282
|
}
|
|
271
|
-
`,
|
|
283
|
+
`,ct=`
|
|
272
284
|
mutation TecUpdateProblem($id: ID!, $input: TecUpdateProblemInput!) {
|
|
273
285
|
tecUpdateProblem(id: $id, input: $input) {
|
|
274
286
|
id slug title topic statement difficulty status points languages tags
|
|
275
287
|
starterCode updatedAt
|
|
276
288
|
}
|
|
277
289
|
}
|
|
278
|
-
`,
|
|
290
|
+
`,ut=`
|
|
279
291
|
mutation TecPublishProblem($id: ID!) {
|
|
280
292
|
tecPublishProblem(id: $id) {
|
|
281
293
|
id slug title status publishedAt updatedAt
|
|
282
294
|
}
|
|
283
295
|
}
|
|
284
|
-
`,
|
|
296
|
+
`,dt=`
|
|
285
297
|
query TecListSubmissions(
|
|
286
298
|
$problemId: ID
|
|
287
299
|
$learnerId: ID
|
|
@@ -295,40 +307,46 @@
|
|
|
295
307
|
pageInfo { cursor hasMore }
|
|
296
308
|
}
|
|
297
309
|
}
|
|
298
|
-
`,
|
|
310
|
+
`,pt=`
|
|
299
311
|
mutation TecSubmitSolution($input: TecSubmitSolutionInput!) {
|
|
300
312
|
tecSubmitSolution(input: $input) {
|
|
301
313
|
id problemId learnerId language verdict pointsAwarded runtimeMs createdAt
|
|
302
314
|
}
|
|
303
315
|
}
|
|
304
|
-
`,
|
|
316
|
+
`,mt=`
|
|
305
317
|
mutation TecGradeSubmission($id: ID!, $verdict: TecSubmissionVerdict!, $runtimeMs: Int) {
|
|
306
318
|
tecGradeSubmission(id: $id, verdict: $verdict, runtimeMs: $runtimeMs) {
|
|
307
319
|
id problemId learnerId language verdict pointsAwarded runtimeMs
|
|
308
320
|
judgedAt updatedAt
|
|
309
321
|
}
|
|
310
322
|
}
|
|
311
|
-
`,
|
|
312
|
-
query TecListCertificates($courseId: ID, $learnerId: ID) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
323
|
+
`,lt=`
|
|
324
|
+
query TecListCertificates($courseId: ID, $learnerId: ID, $pagination: PaginationInput) {
|
|
325
|
+
tecCanonicalCertificates(courseId: $courseId, learnerId: $learnerId, pagination: $pagination) {
|
|
326
|
+
items {
|
|
327
|
+
id
|
|
328
|
+
technospamCertificate {
|
|
329
|
+
id courseId learnerId serial score status issuedAt revokedAt
|
|
330
|
+
revokeReason createdAt updatedAt workspaceId
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
pageInfo { cursor hasMore }
|
|
316
334
|
}
|
|
317
335
|
}
|
|
318
|
-
`,
|
|
336
|
+
`,gt=`
|
|
319
337
|
mutation TecIssueCertificate($courseId: ID!, $learnerId: ID!, $score: Int!) {
|
|
320
338
|
tecIssueCertificate(courseId: $courseId, learnerId: $learnerId, score: $score) {
|
|
321
339
|
id courseId learnerId serial score status issuedAt createdAt
|
|
322
340
|
}
|
|
323
341
|
}
|
|
324
|
-
`,
|
|
342
|
+
`,ft=`
|
|
325
343
|
mutation TecRevokeCertificate($id: ID!, $reason: String) {
|
|
326
344
|
tecRevokeCertificate(id: $id, reason: $reason) {
|
|
327
345
|
id courseId learnerId serial score status revokedAt revokeReason updatedAt
|
|
328
346
|
}
|
|
329
347
|
}
|
|
330
|
-
`,
|
|
348
|
+
`,ht=`
|
|
331
349
|
query TecHealth {
|
|
332
350
|
tecHealth
|
|
333
351
|
}
|
|
334
|
-
`;function c(a){let r=Number.parseInt(a,10);if(Number.isNaN(r))throw new m(`Expected an integer but got "${a}"`);return r}function l(a){return a.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function ft(a){let r=a.command("courses").description("Technospam courses");r.command("list").description("List courses").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(A,{level:e.level?e.level.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListCourses.items,{headers:["ID","Title","Level","Status","Minutes"],rows:t.tecListCourses.items.map(n=>[d(n.id,12),n.title,n.level,n.status,String(n.estimatedMinutes??0)])});}catch(t){o(t);}}),r.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(S,{id:e});if(!n.tecCourse)throw new m(`Course ${e} not found`);i(t,n.tecCourse);}catch(n){o(n);}}),r.command("create").description("Create a course").requiredOption("--title <t>","Course title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,level:(e.level??"BEGINNER").toUpperCase()};e.topic&&(t.topic=e.topic),e.summary&&(t.summary=e.summary),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.instructorId&&(t.instructorId=e.instructorId),e.coverFileId&&(t.coverFileId=e.coverFileId),e.tags&&(t.tags=l(e.tags));let n=await s(x,{input:t});u(`Course created: ${n.tecCreateCourse.title}`),i(e,n.tecCreateCourse);}catch(t){o(t);}}),r.command("update").description("Update a course").argument("<id>","Course ID").option("--title <t>","Course title").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.topic!==void 0&&(n.topic=t.topic),t.summary!==void 0&&(n.summary=t.summary),t.level&&(n.level=t.level.toUpperCase()),t.estimatedMinutes!==void 0&&(n.estimatedMinutes=t.estimatedMinutes),t.instructorId&&(n.instructorId=t.instructorId),t.coverFileId&&(n.coverFileId=t.coverFileId),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let g=await s(O,{id:e,input:n});u("Course updated"),i(t,g.tecUpdateCourse);}catch(n){o(n);}}),r.command("publish").description("Publish a course (DRAFT -> PUBLISHED)").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(R,{id:e});u(`Course published: ${n.tecPublishCourse.title}`),i(t,n.tecPublishCourse);}catch(n){o(n);}}),r.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(v,{id:e});u(n.tecArchiveCourse?"Course archived":"Course not archived"),i(t,{archived:n.tecArchiveCourse});}catch(n){o(n);}});}function gt(a){let r=a.command("lessons").description("Technospam course lessons");r.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(P,{courseId:e.course});i(e,t.tecListLessons.items,{headers:["ID","Title","Kind","Position","Minutes","Preview"],rows:t.tecListLessons.items.map(n=>[d(n.id,12),n.title,n.kind,String(n.position),String(n.estimatedMinutes??0),n.isPreview?"yes":"no"])});}catch(t){o(t);}}),r.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT","ARTICLE").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview","Mark as a free preview lesson").option("-f, --format <format>","Output format").action(async e=>{try{let t={courseId:e.course,title:e.title,kind:(e.kind??"ARTICLE").toUpperCase()};e.content&&(t.content=e.content),e.position!==void 0&&(t.position=e.position),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.fileId&&(t.fileId=e.fileId),e.preview&&(t.isPreview=!0);let n=await s(L,{input:t});u(`Lesson created: ${n.tecCreateLesson.title}`),i(e,n.tecCreateLesson);}catch(t){o(t);}}),r.command("update").description("Update a lesson").argument("<id>","Lesson ID").option("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview <bool>","true|false",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.kind&&(n.kind=t.kind.toUpperCase()),t.content!==void 0&&(n.content=t.content),t.position!==void 0&&(n.position=t.position),t.estimatedMinutes!==void 0&&(n.estimatedMinutes=t.estimatedMinutes),t.fileId&&(n.fileId=t.fileId),t.preview!==void 0&&(n.isPreview=t.preview),!Object.keys(n).length)throw new m("No updates specified");let g=await s($,{id:e,input:n});u("Lesson updated"),i(t,g.tecUpdateLesson);}catch(n){o(n);}});}function ht(a){let r=a.command("enrollments").description("Technospam course enrollments");r.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(D,{courseId:e.course,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListEnrollments.items,{headers:["ID","Course","Learner","Status","Progress %","Lessons"],rows:t.tecListEnrollments.items.map(n=>[d(n.id,12),d(n.courseId,12),d(n.learnerId,12),n.status,String(n.progressPct),String(n.lessonsCompleted)])});}catch(t){o(t);}}),r.command("enroll").description("Enroll the calling user in a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(M,{input:{courseId:e.course}});u(`Enrolled in course ${t.tecEnroll.courseId}`),i(e,t.tecEnroll);}catch(t){o(t);}}),r.command("update-progress").description("Update a learner's enrollment progress (auto-completes at 100%)").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--progress-pct <n>","Progress percent (0-100)",c).option("--lessons-completed <n>","Lessons completed count",c).option("-f, --format <format>","Output format").action(async e=>{try{let t={enrollmentId:e.enrollment,progressPct:e.progressPct};e.lessonsCompleted!==void 0&&(t.lessonsCompleted=e.lessonsCompleted);let n=await s(N,{input:t});u(`Progress updated to ${n.tecUpdateProgress.progressPct}%`),i(e,n.tecUpdateProgress);}catch(t){o(t);}});}function It(a){let r=a.command("mentors").description("Technospam mentors");r.command("list").description("List mentors").option("--status <s>","PENDING|ACTIVE|PAUSED|INACTIVE").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(_,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListMentors.items,{headers:["ID","Headline","Status","Rate","Rating","Accepting"],rows:t.tecListMentors.items.map(n=>[d(n.id,12),d(n.headline,30),n.status,String(n.hourlyRate??0),String(n.ratingAvg??0),n.isAcceptingMentees?"yes":"no"])});}catch(t){o(t);}}),r.command("get").description("Get a mentor by id").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(U,{id:e});if(!n.tecMentor)throw new m(`Mentor ${e} not found`);i(t,n.tecMentor);}catch(n){o(n);}}),r.command("become").description("Create the calling user's mentor profile").requiredOption("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("-f, --format <format>","Output format").action(async e=>{try{let t={headline:e.headline};e.bio&&(t.bio=e.bio),e.expertise&&(t.expertise=l(e.expertise)),e.hourlyRate!==void 0&&(t.hourlyRate=e.hourlyRate),e.currency&&(t.currency=e.currency);let n=await s(q,{input:t});u(`Mentor profile created: ${n.tecBecomeMentor.headline}`),i(e,n.tecBecomeMentor);}catch(t){o(t);}}),r.command("update").description("Update a mentor profile").argument("<id>","Mentor ID").option("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("--accepting <bool>","true|false (accepting mentees)",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.headline&&(n.headline=t.headline),t.bio!==void 0&&(n.bio=t.bio),t.expertise&&(n.expertise=l(t.expertise)),t.hourlyRate!==void 0&&(n.hourlyRate=t.hourlyRate),t.currency&&(n.currency=t.currency),t.accepting!==void 0&&(n.isAcceptingMentees=t.accepting),!Object.keys(n).length)throw new m("No updates specified");let g=await s(H,{id:e,input:n});u("Mentor updated"),i(t,g.tecUpdateMentor);}catch(n){o(n);}}),r.command("approve").description("Approve a pending mentor profile (PENDING -> ACTIVE)").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(F,{id:e});u(`Mentor approved: ${n.tecApproveMentor.status}`),i(t,n.tecApproveMentor);}catch(n){o(n);}});}function Ct(a){let r=a.command("sessions").description("Technospam mentorship sessions");r.command("list").description("List mentorship sessions").option("--mentor <id>","Filter by mentor ID").option("--mentee <id>","Filter by mentee ID").option("--status <s>","REQUESTED|CONFIRMED|COMPLETED|CANCELLED|NO_SHOW").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(G,{mentorId:e.mentor,menteeId:e.mentee,status:e.status?e.status.toUpperCase():void 0});i(e,t.tecListSessions.items,{headers:["ID","Mentor","Mentee","Topic","Status","Scheduled"],rows:t.tecListSessions.items.map(n=>[d(n.id,12),d(n.mentorId,12),d(n.menteeId,12),d(n.topic,24),n.status,b(n.scheduledAt)])});}catch(t){o(t);}}),r.command("book").description("Book a 1:1 session with a mentor as the calling mentee").requiredOption("--mentor <id>","Mentor ID").requiredOption("--topic <t>","Session topic").requiredOption("--scheduled-at <iso>","Scheduled time (ISO date)").option("--agenda <s>","Agenda").option("--duration-minutes <n>","Duration (minutes)",c).option("-f, --format <format>","Output format").action(async e=>{try{let t={mentorId:e.mentor,topic:e.topic,scheduledAt:e.scheduledAt};e.agenda&&(t.agenda=e.agenda),e.durationMinutes!==void 0&&(t.durationMinutes=e.durationMinutes);let n=await s(j,{input:t});u(`Session booked: ${n.tecBookSession.topic}`),i(e,n.tecBookSession);}catch(t){o(t);}}),r.command("confirm").description("Confirm a requested session").argument("<id>","Session ID").option("--meeting-url <url>","Meeting URL").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(B,{id:e,meetingUrl:t.meetingUrl});u("Session confirmed"),i(t,n.tecConfirmSession);}catch(n){o(n);}}),r.command("cancel").description("Cancel a session").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(z,{id:e});u("Session cancelled"),i(t,n.tecCancelSession);}catch(n){o(n);}}),r.command("complete").description("Complete a session with optional rating and feedback").argument("<id>","Session ID").option("--rating <n>","Rating (1-5)",c).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(W,{id:e,rating:t.rating,feedback:t.feedback});u("Session completed"),i(t,n.tecCompleteSession);}catch(n){o(n);}});}function bt(a){let r=a.command("hackathons").description("Technospam hackathons");r.command("list").description("List hackathons").option("--status <s>","DRAFT|REGISTRATION_OPEN|IN_PROGRESS|JUDGING|COMPLETED|CANCELLED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(K,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListHackathons.items,{headers:["ID","Title","Status","Start","Prize"],rows:t.tecListHackathons.items.map(n=>[d(n.id,12),n.title,n.status,b(n.startAt),String(n.prizePool??0)])});}catch(t){o(t);}}),r.command("get").description("Get a hackathon by id").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(V,{id:e});if(!n.tecHackathon)throw new m(`Hackathon ${e} not found`);i(t,n.tecHackathon);}catch(n){o(n);}}),r.command("create").description("Create a hackathon").requiredOption("--title <t>","Hackathon title").requiredOption("--slug <slug>","URL slug").requiredOption("--start-at <iso>","Start time (ISO date)").requiredOption("--end-at <iso>","End time (ISO date)").option("--theme <t>","Theme").option("--description <s>","Description").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,startAt:e.startAt,endAt:e.endAt};e.theme&&(t.theme=e.theme),e.description&&(t.description=e.description),e.submissionDeadline&&(t.submissionDeadline=e.submissionDeadline),e.maxTeamSize!==void 0&&(t.maxTeamSize=e.maxTeamSize),e.prizePool!==void 0&&(t.prizePool=e.prizePool),e.currency&&(t.currency=e.currency),e.tags&&(t.tags=l(e.tags));let n=await s(J,{input:t});u(`Hackathon created: ${n.tecCreateHackathon.title}`),i(e,n.tecCreateHackathon);}catch(t){o(t);}}),r.command("update").description("Update a hackathon").argument("<id>","Hackathon ID").option("--title <t>","Hackathon title").option("--theme <t>","Theme").option("--description <s>","Description").option("--start-at <iso>","Start time (ISO date)").option("--end-at <iso>","End time (ISO date)").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.theme!==void 0&&(n.theme=t.theme),t.description!==void 0&&(n.description=t.description),t.startAt&&(n.startAt=t.startAt),t.endAt&&(n.endAt=t.endAt),t.submissionDeadline&&(n.submissionDeadline=t.submissionDeadline),t.maxTeamSize!==void 0&&(n.maxTeamSize=t.maxTeamSize),t.prizePool!==void 0&&(n.prizePool=t.prizePool),t.currency&&(n.currency=t.currency),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let g=await s(Y,{id:e,input:n});u("Hackathon updated"),i(t,g.tecUpdateHackathon);}catch(n){o(n);}}),r.command("open-registration").description("Open registration for a hackathon (DRAFT -> REGISTRATION_OPEN)").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(Q,{id:e});u(`Registration open: ${n.tecOpenRegistration.status}`),i(t,n.tecOpenRegistration);}catch(n){o(n);}});}function wt(a){let r=a.command("teams").description("Technospam hackathon teams");r.command("list").description("List teams for a hackathon").requiredOption("--hackathon <id>","Hackathon ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(X,{hackathonId:e.hackathon});i(e,t.tecListTeams.items,{headers:["ID","Name","Captain","Status","Score"],rows:t.tecListTeams.items.map(n=>[d(n.id,12),n.name,d(n.captainId,12),n.status,String(n.score??0)])});}catch(t){o(t);}}),r.command("register").description("Register a team for a hackathon with the calling user as captain").requiredOption("--hackathon <id>","Hackathon ID").requiredOption("--name <name>","Team name").option("--members <csv>","Comma-separated member user IDs").option("-f, --format <format>","Output format").action(async e=>{try{let t={hackathonId:e.hackathon,name:e.name};e.members&&(t.memberIds=l(e.members));let n=await s(Z,{input:t});u(`Team registered: ${n.tecRegisterTeam.name}`),i(e,n.tecRegisterTeam);}catch(t){o(t);}}),r.command("submit-project").description("Submit a team's project for judging").requiredOption("--team <id>","Team ID").requiredOption("--project-name <n>","Project name").option("--project-url <url>","Project URL").option("--repo-url <url>","Repository URL").option("--pitch <s>","Pitch").option("-f, --format <format>","Output format").action(async e=>{try{let t={teamId:e.team,projectName:e.projectName};e.projectUrl&&(t.projectUrl=e.projectUrl),e.repoUrl&&(t.repoUrl=e.repoUrl),e.pitch&&(t.pitch=e.pitch);let n=await s(tt,{input:t});u(`Project submitted: ${n.tecSubmitProject.status}`),i(e,n.tecSubmitProject);}catch(t){o(t);}}),r.command("score").description("Record a judge score for a team and optionally mark it WINNER").argument("<id>","Team ID").requiredOption("--score <n>","Score",c).option("--winner","Mark the team as winner").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(et,{id:e,score:t.score,winner:t.winner??void 0});u(`Team scored: ${n.tecScoreTeam.score}`),i(t,n.tecScoreTeam);}catch(n){o(n);}});}function Tt(a){let r=a.command("problems").description("Technospam practice problems");r.command("list").description("List problems").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--topic <t>","Filter by topic").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(rt,{difficulty:e.difficulty?e.difficulty.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,topic:e.topic,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListProblems.items,{headers:["ID","Title","Difficulty","Status","Points"],rows:t.tecListProblems.items.map(n=>[d(n.id,12),n.title,n.difficulty,n.status,String(n.points??0)])});}catch(t){o(t);}}),r.command("get").description("Get a problem by id").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(nt,{id:e});if(!n.tecProblem)throw new m(`Problem ${e} not found`);i(t,n.tecProblem);}catch(n){o(n);}}),r.command("create").description("Create a problem").requiredOption("--title <t>","Problem title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD","EASY").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,difficulty:(e.difficulty??"EASY").toUpperCase()};e.topic&&(t.topic=e.topic),e.statement&&(t.statement=e.statement),e.points!==void 0&&(t.points=e.points),e.languages&&(t.languages=l(e.languages)),e.starterCode&&(t.starterCode=e.starterCode),e.tags&&(t.tags=l(e.tags));let n=await s(ot,{input:t});u(`Problem created: ${n.tecCreateProblem.title}`),i(e,n.tecCreateProblem);}catch(t){o(t);}}),r.command("update").description("Update a problem").argument("<id>","Problem ID").option("--title <t>","Problem title").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.topic!==void 0&&(n.topic=t.topic),t.statement!==void 0&&(n.statement=t.statement),t.difficulty&&(n.difficulty=t.difficulty.toUpperCase()),t.points!==void 0&&(n.points=t.points),t.languages&&(n.languages=l(t.languages)),t.starterCode!==void 0&&(n.starterCode=t.starterCode),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let g=await s(it,{id:e,input:n});u("Problem updated"),i(t,g.tecUpdateProblem);}catch(n){o(n);}}),r.command("publish").description("Publish a problem (DRAFT -> PUBLISHED)").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(st,{id:e});u(`Problem published: ${n.tecPublishProblem.title}`),i(t,n.tecPublishProblem);}catch(n){o(n);}});}function yt(a){let r=a.command("submissions").description("Technospam problem submissions");r.command("list").description("List submissions").option("--problem <id>","Filter by problem ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(at,{problemId:e.problem,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListSubmissions.items,{headers:["ID","Problem","Learner","Language","Verdict","Points"],rows:t.tecListSubmissions.items.map(n=>[d(n.id,12),d(n.problemId,12),d(n.learnerId,12),n.language,n.verdict,String(n.pointsAwarded??0)])});}catch(t){o(t);}}),r.command("submit").description("Submit a solution to a problem").requiredOption("--problem <id>","Problem ID").requiredOption("--language <l>","Language").requiredOption("--code <c>","Solution code").option("-f, --format <format>","Output format").action(async e=>{try{let t={problemId:e.problem,language:e.language,code:e.code},n=await s(ct,{input:t});u(`Solution submitted: ${n.tecSubmitSolution.verdict}`),i(e,n.tecSubmitSolution);}catch(t){o(t);}}),r.command("grade").description("Record the grader verdict for a submission").argument("<id>","Submission ID").requiredOption("--verdict <v>","PENDING|ACCEPTED|WRONG_ANSWER|TIME_LIMIT_EXCEEDED|RUNTIME_ERROR|COMPILE_ERROR").option("--runtime-ms <n>","Runtime in milliseconds",c).option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(ut,{id:e,verdict:t.verdict.toUpperCase(),runtimeMs:t.runtimeMs});u(`Submission graded: ${n.tecGradeSubmission.verdict}`),i(t,n.tecGradeSubmission);}catch(n){o(n);}});}function Et(a){let r=a.command("certificates").description("Technospam completion certificates");r.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(dt,{courseId:e.course,learnerId:e.learner});i(e,t.tecListCertificates,{headers:["ID","Serial","Course","Learner","Score","Status"],rows:t.tecListCertificates.map(n=>[d(n.id,12),n.serial,d(n.courseId,12),d(n.learnerId,12),String(n.score),n.status])});}catch(t){o(t);}}),r.command("issue").description("Issue a verifiable completion certificate for a learner on a course").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--score <n>","Score",c).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(pt,{courseId:e.course,learnerId:e.learner,score:e.score});u(`Certificate issued: ${t.tecIssueCertificate.serial}`),i(e,t.tecIssueCertificate);}catch(t){o(t);}}),r.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("--reason <s>","Revocation reason").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(mt,{id:e,reason:t.reason});u(`Certificate revoked: ${n.tecRevokeCertificate.status}`),i(t,n.tecRevokeCertificate);}catch(n){o(n);}});}function kt(a){a.command("health").description("Technospam service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let e=await T(lt);u(e.tecHealth),i(r,{health:e.tecHealth});}catch(e){o(e);}});}var Ut={id:"technospam",version:"1.0.0",displayName:"Technospam",dependsOn:["auth","workspaces"],register(a,r){k(r);let e=a.command("technospam").description("Technospam developer-education platform");ft(e),gt(e),ht(e),It(e),Ct(e),bt(e),wt(e),Tt(e),yt(e),Et(e),kt(e);}},_n=Ut;module.exports=_n;
|
|
352
|
+
`;function c(o){let r=Number.parseInt(o,10);if(Number.isNaN(r))throw new l(`Expected an integer but got "${o}"`);return r}function g(o){return o.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function h(o,r){let t=[];for(let e of o){let n=e[r];n&&t.push({...n,canonicalId:e.id});}return t}function I(o){o.hasMore&&o.cursor&&x(`More results available: rerun with --cursor ${o.cursor}`);}function Ct(o){let r=o.command("courses").description("Technospam courses");r.command("list").description("List courses").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",c,50).option("--cursor <id>","Start after this course (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(R,{level:t.level?t.level.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,...t.cursor?{cursor:t.cursor}:{}}}),n=h(e.tecCanonicalCourses.items,"technospamCourse");s(t,n,{headers:["ID","Title","Level","Status","Minutes"],rows:n.map(d=>[p(d.id,12),d.title,d.level,d.status,String(d.estimatedMinutes??0)])}),I(e.tecCanonicalCourses.pageInfo);}catch(e){i(e);}}),r.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(O,{id:t}),[d]=h(n.tecCanonicalCourse?[n.tecCanonicalCourse]:[],"technospamCourse");if(!d)throw new l(`Course ${t} not found`);s(e,d);}catch(n){i(n);}}),r.command("create").description("Create a course").requiredOption("--title <t>","Course title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title,slug:t.slug,level:(t.level??"BEGINNER").toUpperCase()};t.topic&&(e.topic=t.topic),t.summary&&(e.summary=t.summary),t.estimatedMinutes!==void 0&&(e.estimatedMinutes=t.estimatedMinutes),t.instructorId&&(e.instructorId=t.instructorId),t.coverFileId&&(e.coverFileId=t.coverFileId),t.tags&&(e.tags=g(t.tags));let n=await a(v,{input:e});u(`Course created: ${n.tecCreateCourse.title}`),s(t,n.tecCreateCourse);}catch(e){i(e);}}),r.command("update").description("Update a course").argument("<id>","Course ID").option("--title <t>","Course title").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.topic!==void 0&&(n.topic=e.topic),e.summary!==void 0&&(n.summary=e.summary),e.level&&(n.level=e.level.toUpperCase()),e.estimatedMinutes!==void 0&&(n.estimatedMinutes=e.estimatedMinutes),e.instructorId&&(n.instructorId=e.instructorId),e.coverFileId&&(n.coverFileId=e.coverFileId),e.tags&&(n.tags=g(e.tags)),!Object.keys(n).length)throw new l("No updates specified");let d=await a(P,{id:t,input:n});u("Course updated"),s(e,d.tecUpdateCourse);}catch(n){i(n);}}),r.command("publish").description("Publish a course (DRAFT -> PUBLISHED)").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a($,{id:t});u(`Course published: ${n.tecPublishCourse.title}`),s(e,n.tecPublishCourse);}catch(n){i(n);}}),r.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(L,{id:t});u(n.tecArchiveCourse?"Course archived":"Course not archived"),s(e,{archived:n.tecArchiveCourse});}catch(n){i(n);}});}function It(o){let r=o.command("lessons").description("Technospam course lessons");r.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("--limit <n>","Page size",c,100).option("--cursor <id>","Start after this lesson (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(D,{courseId:t.course,pagination:{limit:t.limit,...t.cursor?{cursor:t.cursor}:{}}}),n=h(e.tecCanonicalLessons.items,"technospamLesson");s(t,n,{headers:["ID","Title","Kind","Position","Minutes","Preview"],rows:n.map(d=>[p(d.id,12),d.title,d.kind,String(d.position),String(d.estimatedMinutes??0),d.isPreview?"yes":"no"])}),I(e.tecCanonicalLessons.pageInfo);}catch(e){i(e);}}),r.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT","ARTICLE").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview","Mark as a free preview lesson").option("-f, --format <format>","Output format").action(async t=>{try{let e={courseId:t.course,title:t.title,kind:(t.kind??"ARTICLE").toUpperCase()};t.content&&(e.content=t.content),t.position!==void 0&&(e.position=t.position),t.estimatedMinutes!==void 0&&(e.estimatedMinutes=t.estimatedMinutes),t.fileId&&(e.fileId=t.fileId),t.preview&&(e.isPreview=!0);let n=await a(M,{input:e});u(`Lesson created: ${n.tecCreateLesson.title}`),s(t,n.tecCreateLesson);}catch(e){i(e);}}),r.command("update").description("Update a lesson").argument("<id>","Lesson ID").option("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview <bool>","true|false",t=>t==="true").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.kind&&(n.kind=e.kind.toUpperCase()),e.content!==void 0&&(n.content=e.content),e.position!==void 0&&(n.position=e.position),e.estimatedMinutes!==void 0&&(n.estimatedMinutes=e.estimatedMinutes),e.fileId&&(n.fileId=e.fileId),e.preview!==void 0&&(n.isPreview=e.preview),!Object.keys(n).length)throw new l("No updates specified");let d=await a(N,{id:t,input:n});u("Lesson updated"),s(e,d.tecUpdateLesson);}catch(n){i(n);}});}function bt(o){let r=o.command("enrollments").description("Technospam course enrollments");r.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--cursor <id>","Start after this enrollment (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(U,{courseId:t.course,learnerId:t.learner,pagination:{limit:t.limit,...t.cursor?{cursor:t.cursor}:{}}}),n=h(e.tecCanonicalEnrollments.items,"technospamEnrollment");s(t,n,{headers:["ID","Course","Learner","Status","Progress %","Lessons"],rows:n.map(d=>[p(d.id,12),p(d.courseId,12),p(d.learnerId,12),d.status,String(d.progressPct),String(d.lessonsCompleted)])}),I(e.tecCanonicalEnrollments.pageInfo);}catch(e){i(e);}}),r.command("enroll").description("Enroll the calling user in a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(_,{input:{courseId:t.course}});u(`Enrolled in course ${e.tecEnroll.courseId}`),s(t,e.tecEnroll);}catch(e){i(e);}}),r.command("update-progress").description("Update a learner's enrollment progress (auto-completes at 100%)").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--progress-pct <n>","Progress percent (0-100)",c).option("--lessons-completed <n>","Lessons completed count",c).option("-f, --format <format>","Output format").action(async t=>{try{let e={enrollmentId:t.enrollment,progressPct:t.progressPct};t.lessonsCompleted!==void 0&&(e.lessonsCompleted=t.lessonsCompleted);let n=await a(q,{input:e});u(`Progress updated to ${n.tecUpdateProgress.progressPct}%`),s(t,n.tecUpdateProgress);}catch(e){i(e);}});}function wt(o){let r=o.command("mentors").description("Technospam mentors");r.command("list").description("List mentors").option("--status <s>","PENDING|ACTIVE|PAUSED|INACTIVE").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(F,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.tecListMentors.items,{headers:["ID","Headline","Status","Rate","Rating","Accepting"],rows:e.tecListMentors.items.map(n=>[p(n.id,12),p(n.headline,30),n.status,String(n.hourlyRate??0),String(n.ratingAvg??0),n.isAcceptingMentees?"yes":"no"])});}catch(e){i(e);}}),r.command("get").description("Get a mentor by id").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(H,{id:t});if(!n.tecMentor)throw new l(`Mentor ${t} not found`);s(e,n.tecMentor);}catch(n){i(n);}}),r.command("become").description("Create the calling user's mentor profile").requiredOption("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("-f, --format <format>","Output format").action(async t=>{try{let e={headline:t.headline};t.bio&&(e.bio=t.bio),t.expertise&&(e.expertise=g(t.expertise)),t.hourlyRate!==void 0&&(e.hourlyRate=t.hourlyRate),t.currency&&(e.currency=t.currency);let n=await a(G,{input:e});u(`Mentor profile created: ${n.tecBecomeMentor.headline}`),s(t,n.tecBecomeMentor);}catch(e){i(e);}}),r.command("update").description("Update a mentor profile").argument("<id>","Mentor ID").option("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("--accepting <bool>","true|false (accepting mentees)",t=>t==="true").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.headline&&(n.headline=e.headline),e.bio!==void 0&&(n.bio=e.bio),e.expertise&&(n.expertise=g(e.expertise)),e.hourlyRate!==void 0&&(n.hourlyRate=e.hourlyRate),e.currency&&(n.currency=e.currency),e.accepting!==void 0&&(n.isAcceptingMentees=e.accepting),!Object.keys(n).length)throw new l("No updates specified");let d=await a(j,{id:t,input:n});u("Mentor updated"),s(e,d.tecUpdateMentor);}catch(n){i(n);}}),r.command("approve").description("Approve a pending mentor profile (PENDING -> ACTIVE)").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(B,{id:t});u(`Mentor approved: ${n.tecApproveMentor.status}`),s(e,n.tecApproveMentor);}catch(n){i(n);}});}function Tt(o){let r=o.command("sessions").description("Technospam mentorship sessions");r.command("list").description("List mentorship sessions").option("--mentor <id>","Filter by mentor ID").option("--mentee <id>","Filter by mentee ID").option("--status <s>","REQUESTED|CONFIRMED|COMPLETED|CANCELLED|NO_SHOW").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(z,{mentorId:t.mentor,menteeId:t.mentee,status:t.status?t.status.toUpperCase():void 0});s(t,e.tecListSessions.items,{headers:["ID","Mentor","Mentee","Topic","Status","Scheduled"],rows:e.tecListSessions.items.map(n=>[p(n.id,12),p(n.mentorId,12),p(n.menteeId,12),p(n.topic,24),n.status,T(n.scheduledAt)])});}catch(e){i(e);}}),r.command("book").description("Book a 1:1 session with a mentor as the calling mentee").requiredOption("--mentor <id>","Mentor ID").requiredOption("--topic <t>","Session topic").requiredOption("--scheduled-at <iso>","Scheduled time (ISO date)").option("--agenda <s>","Agenda").option("--duration-minutes <n>","Duration (minutes)",c).option("-f, --format <format>","Output format").action(async t=>{try{let e={mentorId:t.mentor,topic:t.topic,scheduledAt:t.scheduledAt};t.agenda&&(e.agenda=t.agenda),t.durationMinutes!==void 0&&(e.durationMinutes=t.durationMinutes);let n=await a(W,{input:e});u(`Session booked: ${n.tecBookSession.topic}`),s(t,n.tecBookSession);}catch(e){i(e);}}),r.command("confirm").description("Confirm a requested session").argument("<id>","Session ID").option("--meeting-url <url>","Meeting URL").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(V,{id:t,meetingUrl:e.meetingUrl});u("Session confirmed"),s(e,n.tecConfirmSession);}catch(n){i(n);}}),r.command("cancel").description("Cancel a session").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(K,{id:t});u("Session cancelled"),s(e,n.tecCancelSession);}catch(n){i(n);}}),r.command("complete").description("Complete a session with optional rating and feedback").argument("<id>","Session ID").option("--rating <n>","Rating (1-5)",c).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t,rating:e.rating,feedback:e.feedback});u("Session completed"),s(e,n.tecCompleteSession);}catch(n){i(n);}});}function yt(o){let r=o.command("hackathons").description("Technospam hackathons");r.command("list").description("List hackathons").option("--status <s>","DRAFT|REGISTRATION_OPEN|IN_PROGRESS|JUDGING|COMPLETED|CANCELLED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Q,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.tecListHackathons.items,{headers:["ID","Title","Status","Start","Prize"],rows:e.tecListHackathons.items.map(n=>[p(n.id,12),n.title,n.status,T(n.startAt),String(n.prizePool??0)])});}catch(e){i(e);}}),r.command("get").description("Get a hackathon by id").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Y,{id:t});if(!n.tecHackathon)throw new l(`Hackathon ${t} not found`);s(e,n.tecHackathon);}catch(n){i(n);}}),r.command("create").description("Create a hackathon").requiredOption("--title <t>","Hackathon title").requiredOption("--slug <slug>","URL slug").requiredOption("--start-at <iso>","Start time (ISO date)").requiredOption("--end-at <iso>","End time (ISO date)").option("--theme <t>","Theme").option("--description <s>","Description").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title,slug:t.slug,startAt:t.startAt,endAt:t.endAt};t.theme&&(e.theme=t.theme),t.description&&(e.description=t.description),t.submissionDeadline&&(e.submissionDeadline=t.submissionDeadline),t.maxTeamSize!==void 0&&(e.maxTeamSize=t.maxTeamSize),t.prizePool!==void 0&&(e.prizePool=t.prizePool),t.currency&&(e.currency=t.currency),t.tags&&(e.tags=g(t.tags));let n=await a(X,{input:e});u(`Hackathon created: ${n.tecCreateHackathon.title}`),s(t,n.tecCreateHackathon);}catch(e){i(e);}}),r.command("update").description("Update a hackathon").argument("<id>","Hackathon ID").option("--title <t>","Hackathon title").option("--theme <t>","Theme").option("--description <s>","Description").option("--start-at <iso>","Start time (ISO date)").option("--end-at <iso>","End time (ISO date)").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.theme!==void 0&&(n.theme=e.theme),e.description!==void 0&&(n.description=e.description),e.startAt&&(n.startAt=e.startAt),e.endAt&&(n.endAt=e.endAt),e.submissionDeadline&&(n.submissionDeadline=e.submissionDeadline),e.maxTeamSize!==void 0&&(n.maxTeamSize=e.maxTeamSize),e.prizePool!==void 0&&(n.prizePool=e.prizePool),e.currency&&(n.currency=e.currency),e.tags&&(n.tags=g(e.tags)),!Object.keys(n).length)throw new l("No updates specified");let d=await a(Z,{id:t,input:n});u("Hackathon updated"),s(e,d.tecUpdateHackathon);}catch(n){i(n);}}),r.command("open-registration").description("Open registration for a hackathon (DRAFT -> REGISTRATION_OPEN)").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(tt,{id:t});u(`Registration open: ${n.tecOpenRegistration.status}`),s(e,n.tecOpenRegistration);}catch(n){i(n);}});}function Et(o){let r=o.command("teams").description("Technospam hackathon teams");r.command("list").description("List teams for a hackathon").requiredOption("--hackathon <id>","Hackathon ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(et,{hackathonId:t.hackathon});s(t,e.tecListTeams.items,{headers:["ID","Name","Captain","Status","Score"],rows:e.tecListTeams.items.map(n=>[p(n.id,12),n.name,p(n.captainId,12),n.status,String(n.score??0)])});}catch(e){i(e);}}),r.command("register").description("Register a team for a hackathon with the calling user as captain").requiredOption("--hackathon <id>","Hackathon ID").requiredOption("--name <name>","Team name").option("--members <csv>","Comma-separated member user IDs").option("-f, --format <format>","Output format").action(async t=>{try{let e={hackathonId:t.hackathon,name:t.name};t.members&&(e.memberIds=g(t.members));let n=await a(nt,{input:e});u(`Team registered: ${n.tecRegisterTeam.name}`),s(t,n.tecRegisterTeam);}catch(e){i(e);}}),r.command("submit-project").description("Submit a team's project for judging").requiredOption("--team <id>","Team ID").requiredOption("--project-name <n>","Project name").option("--project-url <url>","Project URL").option("--repo-url <url>","Repository URL").option("--pitch <s>","Pitch").option("-f, --format <format>","Output format").action(async t=>{try{let e={teamId:t.team,projectName:t.projectName};t.projectUrl&&(e.projectUrl=t.projectUrl),t.repoUrl&&(e.repoUrl=t.repoUrl),t.pitch&&(e.pitch=t.pitch);let n=await a(rt,{input:e});u(`Project submitted: ${n.tecSubmitProject.status}`),s(t,n.tecSubmitProject);}catch(e){i(e);}}),r.command("score").description("Record a judge score for a team and optionally mark it WINNER").argument("<id>","Team ID").requiredOption("--score <n>","Score",c).option("--winner","Mark the team as winner").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(ot,{id:t,score:e.score,winner:e.winner??void 0});u(`Team scored: ${n.tecScoreTeam.score}`),s(e,n.tecScoreTeam);}catch(n){i(n);}});}function St(o){let r=o.command("problems").description("Technospam practice problems");r.command("list").description("List problems").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--topic <t>","Filter by topic").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(st,{difficulty:t.difficulty?t.difficulty.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,topic:t.topic,pagination:{limit:t.limit,offset:t.offset}});s(t,e.tecListProblems.items,{headers:["ID","Title","Difficulty","Status","Points"],rows:e.tecListProblems.items.map(n=>[p(n.id,12),n.title,n.difficulty,n.status,String(n.points??0)])});}catch(e){i(e);}}),r.command("get").description("Get a problem by id").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(it,{id:t});if(!n.tecProblem)throw new l(`Problem ${t} not found`);s(e,n.tecProblem);}catch(n){i(n);}}),r.command("create").description("Create a problem").requiredOption("--title <t>","Problem title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD","EASY").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title,slug:t.slug,difficulty:(t.difficulty??"EASY").toUpperCase()};t.topic&&(e.topic=t.topic),t.statement&&(e.statement=t.statement),t.points!==void 0&&(e.points=t.points),t.languages&&(e.languages=g(t.languages)),t.starterCode&&(e.starterCode=t.starterCode),t.tags&&(e.tags=g(t.tags));let n=await a(at,{input:e});u(`Problem created: ${n.tecCreateProblem.title}`),s(t,n.tecCreateProblem);}catch(e){i(e);}}),r.command("update").description("Update a problem").argument("<id>","Problem ID").option("--title <t>","Problem title").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.topic!==void 0&&(n.topic=e.topic),e.statement!==void 0&&(n.statement=e.statement),e.difficulty&&(n.difficulty=e.difficulty.toUpperCase()),e.points!==void 0&&(n.points=e.points),e.languages&&(n.languages=g(e.languages)),e.starterCode!==void 0&&(n.starterCode=e.starterCode),e.tags&&(n.tags=g(e.tags)),!Object.keys(n).length)throw new l("No updates specified");let d=await a(ct,{id:t,input:n});u("Problem updated"),s(e,d.tecUpdateProblem);}catch(n){i(n);}}),r.command("publish").description("Publish a problem (DRAFT -> PUBLISHED)").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(ut,{id:t});u(`Problem published: ${n.tecPublishProblem.title}`),s(e,n.tecPublishProblem);}catch(n){i(n);}});}function kt(o){let r=o.command("submissions").description("Technospam problem submissions");r.command("list").description("List submissions").option("--problem <id>","Filter by problem ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(dt,{problemId:t.problem,learnerId:t.learner,pagination:{limit:t.limit,offset:t.offset}});s(t,e.tecListSubmissions.items,{headers:["ID","Problem","Learner","Language","Verdict","Points"],rows:e.tecListSubmissions.items.map(n=>[p(n.id,12),p(n.problemId,12),p(n.learnerId,12),n.language,n.verdict,String(n.pointsAwarded??0)])});}catch(e){i(e);}}),r.command("submit").description("Submit a solution to a problem").requiredOption("--problem <id>","Problem ID").requiredOption("--language <l>","Language").requiredOption("--code <c>","Solution code").option("-f, --format <format>","Output format").action(async t=>{try{let e={problemId:t.problem,language:t.language,code:t.code},n=await a(pt,{input:e});u(`Solution submitted: ${n.tecSubmitSolution.verdict}`),s(t,n.tecSubmitSolution);}catch(e){i(e);}}),r.command("grade").description("Record the grader verdict for a submission").argument("<id>","Submission ID").requiredOption("--verdict <v>","PENDING|ACCEPTED|WRONG_ANSWER|TIME_LIMIT_EXCEEDED|RUNTIME_ERROR|COMPILE_ERROR").option("--runtime-ms <n>","Runtime in milliseconds",c).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(mt,{id:t,verdict:e.verdict.toUpperCase(),runtimeMs:e.runtimeMs});u(`Submission graded: ${n.tecGradeSubmission.verdict}`),s(e,n.tecGradeSubmission);}catch(n){i(n);}});}function At(o){let r=o.command("certificates").description("Technospam completion certificates");r.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--cursor <id>","Start after this certificate (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(lt,{courseId:t.course,learnerId:t.learner,pagination:{limit:t.limit,...t.cursor?{cursor:t.cursor}:{}}}),n=h(e.tecCanonicalCertificates.items,"technospamCertificate");s(t,n,{headers:["ID","Serial","Course","Learner","Score","Status"],rows:n.map(d=>[p(d.id,12),d.serial,p(d.courseId,12),p(d.learnerId,12),String(d.score),d.status])}),I(e.tecCanonicalCertificates.pageInfo);}catch(e){i(e);}}),r.command("issue").description("Issue a verifiable completion certificate for a learner on a course").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--score <n>","Score",c).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(gt,{courseId:t.course,learnerId:t.learner,score:t.score});u(`Certificate issued: ${e.tecIssueCertificate.serial}`),s(t,e.tecIssueCertificate);}catch(e){i(e);}}),r.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("--reason <s>","Revocation reason").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(ft,{id:t,reason:e.reason});u(`Certificate revoked: ${n.tecRevokeCertificate.status}`),s(e,n.tecRevokeCertificate);}catch(n){i(n);}});}function xt(o){o.command("health").description("Technospam service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await E(ht);u(t.tecHealth),s(r,{health:t.tecHealth});}catch(t){i(t);}});}var Ht={id:"technospam",version:"1.0.0",displayName:"Technospam",dependsOn:["auth","workspaces"],register(o,r){A(r);let t=o.command("technospam").description("Technospam developer-education platform");Ct(t),It(t),bt(t),wt(t),Tt(t),yt(t),Et(t),St(t),kt(t),At(t),xt(t);}},Fn=Ht;module.exports=Fn;
|
|
@@ -1,110 +1,122 @@
|
|
|
1
|
-
import {a as a$1,b
|
|
1
|
+
import {a as a$1,b,i,r,h as h$1,k as k$1,q as q$1,d,n}from'../../chunk-O6UCQ5IT.js';import {o}from'../../chunk-YIY5IDXQ.js';var A=`
|
|
2
2
|
query TecCourse($id: ID!) {
|
|
3
|
-
|
|
4
|
-
id
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
tecCanonicalCourse(id: $id) {
|
|
4
|
+
id
|
|
5
|
+
technospamCourse {
|
|
6
|
+
id slug title topic summary level status estimatedMinutes instructorId
|
|
7
|
+
tags publishedAt createdAt updatedAt workspaceId
|
|
8
|
+
cover { id }
|
|
9
|
+
lessons { id title kind position }
|
|
10
|
+
}
|
|
8
11
|
}
|
|
9
12
|
}
|
|
10
|
-
`,
|
|
13
|
+
`,y=`
|
|
11
14
|
query TecListCourses(
|
|
12
15
|
$level: TecCourseLevel
|
|
13
16
|
$status: TecCourseStatus
|
|
14
17
|
$pagination: PaginationInput
|
|
15
18
|
) {
|
|
16
|
-
|
|
19
|
+
tecCanonicalCourses(level: $level, status: $status, pagination: $pagination) {
|
|
17
20
|
items {
|
|
18
|
-
id
|
|
19
|
-
|
|
21
|
+
id
|
|
22
|
+
technospamCourse {
|
|
23
|
+
id slug title topic level status estimatedMinutes instructorId
|
|
24
|
+
publishedAt createdAt
|
|
25
|
+
}
|
|
20
26
|
}
|
|
21
27
|
pageInfo { cursor hasMore }
|
|
22
28
|
}
|
|
23
29
|
}
|
|
24
|
-
`,
|
|
30
|
+
`,R=`
|
|
25
31
|
mutation TecCreateCourse($input: TecCreateCourseInput!) {
|
|
26
32
|
tecCreateCourse(input: $input) {
|
|
27
33
|
id slug title topic summary level status estimatedMinutes instructorId
|
|
28
34
|
tags createdAt
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
|
-
`,
|
|
37
|
+
`,O=`
|
|
32
38
|
mutation TecUpdateCourse($id: ID!, $input: TecUpdateCourseInput!) {
|
|
33
39
|
tecUpdateCourse(id: $id, input: $input) {
|
|
34
40
|
id slug title topic summary level status estimatedMinutes instructorId
|
|
35
41
|
tags updatedAt
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
|
-
`,
|
|
44
|
+
`,P=`
|
|
39
45
|
mutation TecPublishCourse($id: ID!) {
|
|
40
46
|
tecPublishCourse(id: $id) {
|
|
41
47
|
id slug title status publishedAt updatedAt
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
|
-
`,
|
|
50
|
+
`,w=`
|
|
45
51
|
mutation TecArchiveCourse($id: ID!) {
|
|
46
52
|
tecArchiveCourse(id: $id)
|
|
47
53
|
}
|
|
48
|
-
`,
|
|
49
|
-
query TecListLessons($courseId: ID
|
|
50
|
-
|
|
54
|
+
`,k=`
|
|
55
|
+
query TecListLessons($courseId: ID!, $pagination: PaginationInput) {
|
|
56
|
+
tecCanonicalLessons(courseId: $courseId, pagination: $pagination) {
|
|
51
57
|
items {
|
|
52
|
-
id
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
id
|
|
59
|
+
technospamLesson {
|
|
60
|
+
id courseId title kind position estimatedMinutes isPreview content
|
|
61
|
+
file { id }
|
|
62
|
+
createdAt updatedAt workspaceId
|
|
63
|
+
}
|
|
55
64
|
}
|
|
56
65
|
pageInfo { cursor hasMore }
|
|
57
66
|
}
|
|
58
67
|
}
|
|
59
|
-
`,
|
|
68
|
+
`,M=`
|
|
60
69
|
mutation TecCreateLesson($input: TecCreateLessonInput!) {
|
|
61
70
|
tecCreateLesson(input: $input) {
|
|
62
71
|
id courseId title kind position estimatedMinutes isPreview content
|
|
63
72
|
createdAt
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
|
-
|
|
75
|
+
`,$=`
|
|
67
76
|
mutation TecUpdateLesson($id: ID!, $input: TecUpdateLessonInput!) {
|
|
68
77
|
tecUpdateLesson(id: $id, input: $input) {
|
|
69
78
|
id courseId title kind position estimatedMinutes isPreview content
|
|
70
79
|
updatedAt
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
|
-
`,
|
|
82
|
+
`,L=`
|
|
74
83
|
query TecListEnrollments(
|
|
75
84
|
$courseId: ID
|
|
76
85
|
$learnerId: ID
|
|
77
86
|
$pagination: PaginationInput
|
|
78
87
|
) {
|
|
79
|
-
|
|
88
|
+
tecCanonicalEnrollments(courseId: $courseId, learnerId: $learnerId, pagination: $pagination) {
|
|
80
89
|
items {
|
|
81
|
-
id
|
|
82
|
-
|
|
90
|
+
id
|
|
91
|
+
technospamEnrollment {
|
|
92
|
+
id courseId learnerId status progressPct lessonsCompleted
|
|
93
|
+
startedAt lastActiveAt completedAt createdAt
|
|
94
|
+
}
|
|
83
95
|
}
|
|
84
96
|
pageInfo { cursor hasMore }
|
|
85
97
|
}
|
|
86
98
|
}
|
|
87
|
-
`,
|
|
99
|
+
`,D=`
|
|
88
100
|
mutation TecEnroll($input: TecEnrollInput!) {
|
|
89
101
|
tecEnroll(input: $input) {
|
|
90
102
|
id courseId learnerId status progressPct lessonsCompleted startedAt createdAt
|
|
91
103
|
}
|
|
92
104
|
}
|
|
93
|
-
`,
|
|
105
|
+
`,v=`
|
|
94
106
|
mutation TecUpdateProgress($input: TecUpdateProgressInput!) {
|
|
95
107
|
tecUpdateProgress(input: $input) {
|
|
96
108
|
id courseId learnerId status progressPct lessonsCompleted
|
|
97
109
|
lastActiveAt completedAt updatedAt
|
|
98
110
|
}
|
|
99
111
|
}
|
|
100
|
-
|
|
112
|
+
`,U=`
|
|
101
113
|
query TecMentor($id: ID!) {
|
|
102
114
|
tecMentor(id: $id) {
|
|
103
115
|
id userId headline bio expertise hourlyRate currency status
|
|
104
116
|
isAcceptingMentees ratingAvg sessionsCount createdAt updatedAt workspaceId
|
|
105
117
|
}
|
|
106
118
|
}
|
|
107
|
-
`,
|
|
119
|
+
`,x=`
|
|
108
120
|
query TecListMentors($status: TecMentorStatus, $pagination: PaginationInput) {
|
|
109
121
|
tecListMentors(status: $status, pagination: $pagination) {
|
|
110
122
|
items {
|
|
@@ -114,27 +126,27 @@ import {a as a$1,b as b$1,i,r,h,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js
|
|
|
114
126
|
pageInfo { cursor hasMore }
|
|
115
127
|
}
|
|
116
128
|
}
|
|
117
|
-
`,
|
|
129
|
+
`,N=`
|
|
118
130
|
mutation TecBecomeMentor($input: TecCreateMentorInput!) {
|
|
119
131
|
tecBecomeMentor(input: $input) {
|
|
120
132
|
id userId headline bio expertise hourlyRate currency status
|
|
121
133
|
isAcceptingMentees createdAt
|
|
122
134
|
}
|
|
123
135
|
}
|
|
124
|
-
`,
|
|
136
|
+
`,_=`
|
|
125
137
|
mutation TecUpdateMentor($id: ID!, $input: TecUpdateMentorInput!) {
|
|
126
138
|
tecUpdateMentor(id: $id, input: $input) {
|
|
127
139
|
id userId headline bio expertise hourlyRate currency status
|
|
128
140
|
isAcceptingMentees updatedAt
|
|
129
141
|
}
|
|
130
142
|
}
|
|
131
|
-
`,
|
|
143
|
+
`,H=`
|
|
132
144
|
mutation TecApproveMentor($id: ID!) {
|
|
133
145
|
tecApproveMentor(id: $id) {
|
|
134
146
|
id userId headline status updatedAt
|
|
135
147
|
}
|
|
136
148
|
}
|
|
137
|
-
`,
|
|
149
|
+
`,B=`
|
|
138
150
|
query TecListSessions($mentorId: ID, $menteeId: ID, $status: TecSessionStatus) {
|
|
139
151
|
tecListSessions(mentorId: $mentorId, menteeId: $menteeId, status: $status) {
|
|
140
152
|
items {
|
|
@@ -144,38 +156,38 @@ import {a as a$1,b as b$1,i,r,h,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js
|
|
|
144
156
|
pageInfo { cursor hasMore }
|
|
145
157
|
}
|
|
146
158
|
}
|
|
147
|
-
`,
|
|
159
|
+
`,q=`
|
|
148
160
|
mutation TecBookSession($input: TecBookSessionInput!) {
|
|
149
161
|
tecBookSession(input: $input) {
|
|
150
162
|
id mentorId menteeId topic agenda status scheduledAt durationMinutes createdAt
|
|
151
163
|
}
|
|
152
164
|
}
|
|
153
|
-
`,
|
|
165
|
+
`,z=`
|
|
154
166
|
mutation TecConfirmSession($id: ID!, $meetingUrl: String) {
|
|
155
167
|
tecConfirmSession(id: $id, meetingUrl: $meetingUrl) {
|
|
156
168
|
id mentorId menteeId topic status scheduledAt meetingUrl updatedAt
|
|
157
169
|
}
|
|
158
170
|
}
|
|
159
|
-
`,
|
|
171
|
+
`,F=`
|
|
160
172
|
mutation TecCancelSession($id: ID!) {
|
|
161
173
|
tecCancelSession(id: $id) {
|
|
162
174
|
id mentorId menteeId topic status cancelledAt updatedAt
|
|
163
175
|
}
|
|
164
176
|
}
|
|
165
|
-
`,
|
|
177
|
+
`,G=`
|
|
166
178
|
mutation TecCompleteSession($id: ID!, $rating: Int, $feedback: String) {
|
|
167
179
|
tecCompleteSession(id: $id, rating: $rating, feedback: $feedback) {
|
|
168
180
|
id mentorId menteeId topic status rating feedback completedAt updatedAt
|
|
169
181
|
}
|
|
170
182
|
}
|
|
171
|
-
`,
|
|
183
|
+
`,j=`
|
|
172
184
|
query TecHackathon($id: ID!) {
|
|
173
185
|
tecHackathon(id: $id) {
|
|
174
186
|
id slug title theme description status startAt endAt submissionDeadline
|
|
175
187
|
maxTeamSize prizePool currency tags createdAt updatedAt workspaceId
|
|
176
188
|
}
|
|
177
189
|
}
|
|
178
|
-
`,
|
|
190
|
+
`,V=`
|
|
179
191
|
query TecListHackathons($status: TecHackathonStatus, $pagination: PaginationInput) {
|
|
180
192
|
tecListHackathons(status: $status, pagination: $pagination) {
|
|
181
193
|
items {
|
|
@@ -185,27 +197,27 @@ import {a as a$1,b as b$1,i,r,h,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js
|
|
|
185
197
|
pageInfo { cursor hasMore }
|
|
186
198
|
}
|
|
187
199
|
}
|
|
188
|
-
`,
|
|
200
|
+
`,K=`
|
|
189
201
|
mutation TecCreateHackathon($input: TecCreateHackathonInput!) {
|
|
190
202
|
tecCreateHackathon(input: $input) {
|
|
191
203
|
id slug title theme description status startAt endAt submissionDeadline
|
|
192
204
|
maxTeamSize prizePool currency tags createdAt
|
|
193
205
|
}
|
|
194
206
|
}
|
|
195
|
-
`,
|
|
207
|
+
`,W=`
|
|
196
208
|
mutation TecUpdateHackathon($id: ID!, $input: TecUpdateHackathonInput!) {
|
|
197
209
|
tecUpdateHackathon(id: $id, input: $input) {
|
|
198
210
|
id slug title theme description status startAt endAt submissionDeadline
|
|
199
211
|
maxTeamSize prizePool currency tags updatedAt
|
|
200
212
|
}
|
|
201
213
|
}
|
|
202
|
-
`,
|
|
214
|
+
`,J=`
|
|
203
215
|
mutation TecOpenRegistration($id: ID!) {
|
|
204
216
|
tecOpenRegistration(id: $id) {
|
|
205
217
|
id slug title status updatedAt
|
|
206
218
|
}
|
|
207
219
|
}
|
|
208
|
-
`,
|
|
220
|
+
`,Y=`
|
|
209
221
|
query TecListTeams($hackathonId: ID!) {
|
|
210
222
|
tecListTeams(hackathonId: $hackathonId) {
|
|
211
223
|
items {
|
|
@@ -215,33 +227,33 @@ import {a as a$1,b as b$1,i,r,h,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js
|
|
|
215
227
|
pageInfo { cursor hasMore }
|
|
216
228
|
}
|
|
217
229
|
}
|
|
218
|
-
`,
|
|
230
|
+
`,X=`
|
|
219
231
|
mutation TecRegisterTeam($input: TecRegisterTeamInput!) {
|
|
220
232
|
tecRegisterTeam(input: $input) {
|
|
221
233
|
id hackathonId name captainId memberIds status score createdAt
|
|
222
234
|
}
|
|
223
235
|
}
|
|
224
|
-
`,
|
|
236
|
+
`,Q=`
|
|
225
237
|
mutation TecSubmitProject($input: TecSubmitProjectInput!) {
|
|
226
238
|
tecSubmitProject(input: $input) {
|
|
227
239
|
id hackathonId name status projectName projectUrl repoUrl pitch
|
|
228
240
|
submittedAt updatedAt
|
|
229
241
|
}
|
|
230
242
|
}
|
|
231
|
-
`,
|
|
243
|
+
`,Z=`
|
|
232
244
|
mutation TecScoreTeam($id: ID!, $score: Int!, $winner: Boolean) {
|
|
233
245
|
tecScoreTeam(id: $id, score: $score, winner: $winner) {
|
|
234
246
|
id hackathonId name status score updatedAt
|
|
235
247
|
}
|
|
236
248
|
}
|
|
237
|
-
`,
|
|
249
|
+
`,tt=`
|
|
238
250
|
query TecProblem($id: ID!) {
|
|
239
251
|
tecProblem(id: $id) {
|
|
240
252
|
id slug title topic statement difficulty status points languages tags
|
|
241
253
|
starterCode publishedAt createdAt updatedAt workspaceId
|
|
242
254
|
}
|
|
243
255
|
}
|
|
244
|
-
`,
|
|
256
|
+
`,et=`
|
|
245
257
|
query TecListProblems(
|
|
246
258
|
$difficulty: TecProblemDifficulty
|
|
247
259
|
$status: TecProblemStatus
|
|
@@ -261,27 +273,27 @@ import {a as a$1,b as b$1,i,r,h,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js
|
|
|
261
273
|
pageInfo { cursor hasMore }
|
|
262
274
|
}
|
|
263
275
|
}
|
|
264
|
-
`,
|
|
276
|
+
`,it=`
|
|
265
277
|
mutation TecCreateProblem($input: TecCreateProblemInput!) {
|
|
266
278
|
tecCreateProblem(input: $input) {
|
|
267
279
|
id slug title topic statement difficulty status points languages tags
|
|
268
280
|
starterCode createdAt
|
|
269
281
|
}
|
|
270
282
|
}
|
|
271
|
-
`,
|
|
283
|
+
`,nt=`
|
|
272
284
|
mutation TecUpdateProblem($id: ID!, $input: TecUpdateProblemInput!) {
|
|
273
285
|
tecUpdateProblem(id: $id, input: $input) {
|
|
274
286
|
id slug title topic statement difficulty status points languages tags
|
|
275
287
|
starterCode updatedAt
|
|
276
288
|
}
|
|
277
289
|
}
|
|
278
|
-
`,
|
|
290
|
+
`,ot=`
|
|
279
291
|
mutation TecPublishProblem($id: ID!) {
|
|
280
292
|
tecPublishProblem(id: $id) {
|
|
281
293
|
id slug title status publishedAt updatedAt
|
|
282
294
|
}
|
|
283
295
|
}
|
|
284
|
-
`,
|
|
296
|
+
`,rt=`
|
|
285
297
|
query TecListSubmissions(
|
|
286
298
|
$problemId: ID
|
|
287
299
|
$learnerId: ID
|
|
@@ -295,40 +307,46 @@ import {a as a$1,b as b$1,i,r,h,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js
|
|
|
295
307
|
pageInfo { cursor hasMore }
|
|
296
308
|
}
|
|
297
309
|
}
|
|
298
|
-
`,
|
|
310
|
+
`,st=`
|
|
299
311
|
mutation TecSubmitSolution($input: TecSubmitSolutionInput!) {
|
|
300
312
|
tecSubmitSolution(input: $input) {
|
|
301
313
|
id problemId learnerId language verdict pointsAwarded runtimeMs createdAt
|
|
302
314
|
}
|
|
303
315
|
}
|
|
304
|
-
`,
|
|
316
|
+
`,at=`
|
|
305
317
|
mutation TecGradeSubmission($id: ID!, $verdict: TecSubmissionVerdict!, $runtimeMs: Int) {
|
|
306
318
|
tecGradeSubmission(id: $id, verdict: $verdict, runtimeMs: $runtimeMs) {
|
|
307
319
|
id problemId learnerId language verdict pointsAwarded runtimeMs
|
|
308
320
|
judgedAt updatedAt
|
|
309
321
|
}
|
|
310
322
|
}
|
|
311
|
-
`,
|
|
312
|
-
query TecListCertificates($courseId: ID, $learnerId: ID) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
323
|
+
`,ct=`
|
|
324
|
+
query TecListCertificates($courseId: ID, $learnerId: ID, $pagination: PaginationInput) {
|
|
325
|
+
tecCanonicalCertificates(courseId: $courseId, learnerId: $learnerId, pagination: $pagination) {
|
|
326
|
+
items {
|
|
327
|
+
id
|
|
328
|
+
technospamCertificate {
|
|
329
|
+
id courseId learnerId serial score status issuedAt revokedAt
|
|
330
|
+
revokeReason createdAt updatedAt workspaceId
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
pageInfo { cursor hasMore }
|
|
316
334
|
}
|
|
317
335
|
}
|
|
318
|
-
`,
|
|
336
|
+
`,mt=`
|
|
319
337
|
mutation TecIssueCertificate($courseId: ID!, $learnerId: ID!, $score: Int!) {
|
|
320
338
|
tecIssueCertificate(courseId: $courseId, learnerId: $learnerId, score: $score) {
|
|
321
339
|
id courseId learnerId serial score status issuedAt createdAt
|
|
322
340
|
}
|
|
323
341
|
}
|
|
324
|
-
`,
|
|
342
|
+
`,dt=`
|
|
325
343
|
mutation TecRevokeCertificate($id: ID!, $reason: String) {
|
|
326
344
|
tecRevokeCertificate(id: $id, reason: $reason) {
|
|
327
345
|
id courseId learnerId serial score status revokedAt revokeReason updatedAt
|
|
328
346
|
}
|
|
329
347
|
}
|
|
330
|
-
`,
|
|
348
|
+
`,ut=`
|
|
331
349
|
query TecHealth {
|
|
332
350
|
tecHealth
|
|
333
351
|
}
|
|
334
|
-
`;function a(d){let n=Number.parseInt(d,10);if(Number.isNaN(n))throw new o(`Expected an integer but got "${d}"`);return n}function p(d){return d.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function mt(d){let n=d.command("courses").description("Technospam courses");n.command("list").description("List courses").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(E,{level:e.level?e.level.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListCourses.items,{headers:["ID","Title","Level","Status","Minutes"],rows:t.tecListCourses.items.map(i=>[r(i.id,12),i.title,i.level,i.status,String(i.estimatedMinutes??0)])});}catch(t){h(t);}}),n.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(b,{id:e});if(!i$1.tecCourse)throw new o(`Course ${e} not found`);i(t,i$1.tecCourse);}catch(i){h(i);}}),n.command("create").description("Create a course").requiredOption("--title <t>","Course title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--estimated-minutes <n>","Estimated minutes",a).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,level:(e.level??"BEGINNER").toUpperCase()};e.topic&&(t.topic=e.topic),e.summary&&(t.summary=e.summary),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.instructorId&&(t.instructorId=e.instructorId),e.coverFileId&&(t.coverFileId=e.coverFileId),e.tags&&(t.tags=p(e.tags));let i$1=await b$1(T,{input:t});k$1(`Course created: ${i$1.tecCreateCourse.title}`),i(e,i$1.tecCreateCourse);}catch(t){h(t);}}),n.command("update").description("Update a course").argument("<id>","Course ID").option("--title <t>","Course title").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--estimated-minutes <n>","Estimated minutes",a).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.topic!==void 0&&(i$1.topic=t.topic),t.summary!==void 0&&(i$1.summary=t.summary),t.level&&(i$1.level=t.level.toUpperCase()),t.estimatedMinutes!==void 0&&(i$1.estimatedMinutes=t.estimatedMinutes),t.instructorId&&(i$1.instructorId=t.instructorId),t.coverFileId&&(i$1.coverFileId=t.coverFileId),t.tags&&(i$1.tags=p(t.tags)),!Object.keys(i$1).length)throw new o("No updates specified");let I=await b$1(A,{id:e,input:i$1});k$1("Course updated"),i(t,I.tecUpdateCourse);}catch(i){h(i);}}),n.command("publish").description("Publish a course (DRAFT -> PUBLISHED)").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(y,{id:e});k$1(`Course published: ${i$1.tecPublishCourse.title}`),i(t,i$1.tecPublishCourse);}catch(i){h(i);}}),n.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(R,{id:e});k$1(i$1.tecArchiveCourse?"Course archived":"Course not archived"),i(t,{archived:i$1.tecArchiveCourse});}catch(i){h(i);}});}function dt(d){let n=d.command("lessons").description("Technospam course lessons");n.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(O,{courseId:e.course});i(e,t.tecListLessons.items,{headers:["ID","Title","Kind","Position","Minutes","Preview"],rows:t.tecListLessons.items.map(i=>[r(i.id,12),i.title,i.kind,String(i.position),String(i.estimatedMinutes??0),i.isPreview?"yes":"no"])});}catch(t){h(t);}}),n.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT","ARTICLE").option("--content <s>","Lesson content").option("--position <n>","Order position",a).option("--estimated-minutes <n>","Estimated minutes",a).option("--file-id <id>","Attachment / video File ID").option("--preview","Mark as a free preview lesson").option("-f, --format <format>","Output format").action(async e=>{try{let t={courseId:e.course,title:e.title,kind:(e.kind??"ARTICLE").toUpperCase()};e.content&&(t.content=e.content),e.position!==void 0&&(t.position=e.position),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.fileId&&(t.fileId=e.fileId),e.preview&&(t.isPreview=!0);let i$1=await b$1(w,{input:t});k$1(`Lesson created: ${i$1.tecCreateLesson.title}`),i(e,i$1.tecCreateLesson);}catch(t){h(t);}}),n.command("update").description("Update a lesson").argument("<id>","Lesson ID").option("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT").option("--content <s>","Lesson content").option("--position <n>","Order position",a).option("--estimated-minutes <n>","Estimated minutes",a).option("--file-id <id>","Attachment / video File ID").option("--preview <bool>","true|false",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.kind&&(i$1.kind=t.kind.toUpperCase()),t.content!==void 0&&(i$1.content=t.content),t.position!==void 0&&(i$1.position=t.position),t.estimatedMinutes!==void 0&&(i$1.estimatedMinutes=t.estimatedMinutes),t.fileId&&(i$1.fileId=t.fileId),t.preview!==void 0&&(i$1.isPreview=t.preview),!Object.keys(i$1).length)throw new o("No updates specified");let I=await b$1(P,{id:e,input:i$1});k$1("Lesson updated"),i(t,I.tecUpdateLesson);}catch(i){h(i);}});}function ut(d){let n=d.command("enrollments").description("Technospam course enrollments");n.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(k,{courseId:e.course,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListEnrollments.items,{headers:["ID","Course","Learner","Status","Progress %","Lessons"],rows:t.tecListEnrollments.items.map(i=>[r(i.id,12),r(i.courseId,12),r(i.learnerId,12),i.status,String(i.progressPct),String(i.lessonsCompleted)])});}catch(t){h(t);}}),n.command("enroll").description("Enroll the calling user in a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(L,{input:{courseId:e.course}});k$1(`Enrolled in course ${t.tecEnroll.courseId}`),i(e,t.tecEnroll);}catch(t){h(t);}}),n.command("update-progress").description("Update a learner's enrollment progress (auto-completes at 100%)").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--progress-pct <n>","Progress percent (0-100)",a).option("--lessons-completed <n>","Lessons completed count",a).option("-f, --format <format>","Output format").action(async e=>{try{let t={enrollmentId:e.enrollment,progressPct:e.progressPct};e.lessonsCompleted!==void 0&&(t.lessonsCompleted=e.lessonsCompleted);let i$1=await b$1(M,{input:t});k$1(`Progress updated to ${i$1.tecUpdateProgress.progressPct}%`),i(e,i$1.tecUpdateProgress);}catch(t){h(t);}});}function pt(d){let n=d.command("mentors").description("Technospam mentors");n.command("list").description("List mentors").option("--status <s>","PENDING|ACTIVE|PAUSED|INACTIVE").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(D,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListMentors.items,{headers:["ID","Headline","Status","Rate","Rating","Accepting"],rows:t.tecListMentors.items.map(i=>[r(i.id,12),r(i.headline,30),i.status,String(i.hourlyRate??0),String(i.ratingAvg??0),i.isAcceptingMentees?"yes":"no"])});}catch(t){h(t);}}),n.command("get").description("Get a mentor by id").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1($,{id:e});if(!i$1.tecMentor)throw new o(`Mentor ${e} not found`);i(t,i$1.tecMentor);}catch(i){h(i);}}),n.command("become").description("Create the calling user's mentor profile").requiredOption("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",a).option("--currency <c>","Currency code").option("-f, --format <format>","Output format").action(async e=>{try{let t={headline:e.headline};e.bio&&(t.bio=e.bio),e.expertise&&(t.expertise=p(e.expertise)),e.hourlyRate!==void 0&&(t.hourlyRate=e.hourlyRate),e.currency&&(t.currency=e.currency);let i$1=await b$1(U,{input:t});k$1(`Mentor profile created: ${i$1.tecBecomeMentor.headline}`),i(e,i$1.tecBecomeMentor);}catch(t){h(t);}}),n.command("update").description("Update a mentor profile").argument("<id>","Mentor ID").option("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",a).option("--currency <c>","Currency code").option("--accepting <bool>","true|false (accepting mentees)",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.headline&&(i$1.headline=t.headline),t.bio!==void 0&&(i$1.bio=t.bio),t.expertise&&(i$1.expertise=p(t.expertise)),t.hourlyRate!==void 0&&(i$1.hourlyRate=t.hourlyRate),t.currency&&(i$1.currency=t.currency),t.accepting!==void 0&&(i$1.isAcceptingMentees=t.accepting),!Object.keys(i$1).length)throw new o("No updates specified");let I=await b$1(v,{id:e,input:i$1});k$1("Mentor updated"),i(t,I.tecUpdateMentor);}catch(i){h(i);}}),n.command("approve").description("Approve a pending mentor profile (PENDING -> ACTIVE)").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(N,{id:e});k$1(`Mentor approved: ${i$1.tecApproveMentor.status}`),i(t,i$1.tecApproveMentor);}catch(i){h(i);}});}function lt(d){let n=d.command("sessions").description("Technospam mentorship sessions");n.command("list").description("List mentorship sessions").option("--mentor <id>","Filter by mentor ID").option("--mentee <id>","Filter by mentee ID").option("--status <s>","REQUESTED|CONFIRMED|COMPLETED|CANCELLED|NO_SHOW").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(x,{mentorId:e.mentor,menteeId:e.mentee,status:e.status?e.status.toUpperCase():void 0});i(e,t.tecListSessions.items,{headers:["ID","Mentor","Mentee","Topic","Status","Scheduled"],rows:t.tecListSessions.items.map(i=>[r(i.id,12),r(i.mentorId,12),r(i.menteeId,12),r(i.topic,24),i.status,q$1(i.scheduledAt)])});}catch(t){h(t);}}),n.command("book").description("Book a 1:1 session with a mentor as the calling mentee").requiredOption("--mentor <id>","Mentor ID").requiredOption("--topic <t>","Session topic").requiredOption("--scheduled-at <iso>","Scheduled time (ISO date)").option("--agenda <s>","Agenda").option("--duration-minutes <n>","Duration (minutes)",a).option("-f, --format <format>","Output format").action(async e=>{try{let t={mentorId:e.mentor,topic:e.topic,scheduledAt:e.scheduledAt};e.agenda&&(t.agenda=e.agenda),e.durationMinutes!==void 0&&(t.durationMinutes=e.durationMinutes);let i$1=await b$1(_,{input:t});k$1(`Session booked: ${i$1.tecBookSession.topic}`),i(e,i$1.tecBookSession);}catch(t){h(t);}}),n.command("confirm").description("Confirm a requested session").argument("<id>","Session ID").option("--meeting-url <url>","Meeting URL").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(H,{id:e,meetingUrl:t.meetingUrl});k$1("Session confirmed"),i(t,i$1.tecConfirmSession);}catch(i){h(i);}}),n.command("cancel").description("Cancel a session").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(B,{id:e});k$1("Session cancelled"),i(t,i$1.tecCancelSession);}catch(i){h(i);}}),n.command("complete").description("Complete a session with optional rating and feedback").argument("<id>","Session ID").option("--rating <n>","Rating (1-5)",a).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(q,{id:e,rating:t.rating,feedback:t.feedback});k$1("Session completed"),i(t,i$1.tecCompleteSession);}catch(i){h(i);}});}function ft(d){let n=d.command("hackathons").description("Technospam hackathons");n.command("list").description("List hackathons").option("--status <s>","DRAFT|REGISTRATION_OPEN|IN_PROGRESS|JUDGING|COMPLETED|CANCELLED").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(F,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListHackathons.items,{headers:["ID","Title","Status","Start","Prize"],rows:t.tecListHackathons.items.map(i=>[r(i.id,12),i.title,i.status,q$1(i.startAt),String(i.prizePool??0)])});}catch(t){h(t);}}),n.command("get").description("Get a hackathon by id").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(z,{id:e});if(!i$1.tecHackathon)throw new o(`Hackathon ${e} not found`);i(t,i$1.tecHackathon);}catch(i){h(i);}}),n.command("create").description("Create a hackathon").requiredOption("--title <t>","Hackathon title").requiredOption("--slug <slug>","URL slug").requiredOption("--start-at <iso>","Start time (ISO date)").requiredOption("--end-at <iso>","End time (ISO date)").option("--theme <t>","Theme").option("--description <s>","Description").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",a).option("--prize-pool <n>","Prize pool",a).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,startAt:e.startAt,endAt:e.endAt};e.theme&&(t.theme=e.theme),e.description&&(t.description=e.description),e.submissionDeadline&&(t.submissionDeadline=e.submissionDeadline),e.maxTeamSize!==void 0&&(t.maxTeamSize=e.maxTeamSize),e.prizePool!==void 0&&(t.prizePool=e.prizePool),e.currency&&(t.currency=e.currency),e.tags&&(t.tags=p(e.tags));let i$1=await b$1(G,{input:t});k$1(`Hackathon created: ${i$1.tecCreateHackathon.title}`),i(e,i$1.tecCreateHackathon);}catch(t){h(t);}}),n.command("update").description("Update a hackathon").argument("<id>","Hackathon ID").option("--title <t>","Hackathon title").option("--theme <t>","Theme").option("--description <s>","Description").option("--start-at <iso>","Start time (ISO date)").option("--end-at <iso>","End time (ISO date)").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",a).option("--prize-pool <n>","Prize pool",a).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.theme!==void 0&&(i$1.theme=t.theme),t.description!==void 0&&(i$1.description=t.description),t.startAt&&(i$1.startAt=t.startAt),t.endAt&&(i$1.endAt=t.endAt),t.submissionDeadline&&(i$1.submissionDeadline=t.submissionDeadline),t.maxTeamSize!==void 0&&(i$1.maxTeamSize=t.maxTeamSize),t.prizePool!==void 0&&(i$1.prizePool=t.prizePool),t.currency&&(i$1.currency=t.currency),t.tags&&(i$1.tags=p(t.tags)),!Object.keys(i$1).length)throw new o("No updates specified");let I=await b$1(j,{id:e,input:i$1});k$1("Hackathon updated"),i(t,I.tecUpdateHackathon);}catch(i){h(i);}}),n.command("open-registration").description("Open registration for a hackathon (DRAFT -> REGISTRATION_OPEN)").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(V,{id:e});k$1(`Registration open: ${i$1.tecOpenRegistration.status}`),i(t,i$1.tecOpenRegistration);}catch(i){h(i);}});}function gt(d){let n=d.command("teams").description("Technospam hackathon teams");n.command("list").description("List teams for a hackathon").requiredOption("--hackathon <id>","Hackathon ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(W,{hackathonId:e.hackathon});i(e,t.tecListTeams.items,{headers:["ID","Name","Captain","Status","Score"],rows:t.tecListTeams.items.map(i=>[r(i.id,12),i.name,r(i.captainId,12),i.status,String(i.score??0)])});}catch(t){h(t);}}),n.command("register").description("Register a team for a hackathon with the calling user as captain").requiredOption("--hackathon <id>","Hackathon ID").requiredOption("--name <name>","Team name").option("--members <csv>","Comma-separated member user IDs").option("-f, --format <format>","Output format").action(async e=>{try{let t={hackathonId:e.hackathon,name:e.name};e.members&&(t.memberIds=p(e.members));let i$1=await b$1(K,{input:t});k$1(`Team registered: ${i$1.tecRegisterTeam.name}`),i(e,i$1.tecRegisterTeam);}catch(t){h(t);}}),n.command("submit-project").description("Submit a team's project for judging").requiredOption("--team <id>","Team ID").requiredOption("--project-name <n>","Project name").option("--project-url <url>","Project URL").option("--repo-url <url>","Repository URL").option("--pitch <s>","Pitch").option("-f, --format <format>","Output format").action(async e=>{try{let t={teamId:e.team,projectName:e.projectName};e.projectUrl&&(t.projectUrl=e.projectUrl),e.repoUrl&&(t.repoUrl=e.repoUrl),e.pitch&&(t.pitch=e.pitch);let i$1=await b$1(J,{input:t});k$1(`Project submitted: ${i$1.tecSubmitProject.status}`),i(e,i$1.tecSubmitProject);}catch(t){h(t);}}),n.command("score").description("Record a judge score for a team and optionally mark it WINNER").argument("<id>","Team ID").requiredOption("--score <n>","Score",a).option("--winner","Mark the team as winner").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(Y,{id:e,score:t.score,winner:t.winner??void 0});k$1(`Team scored: ${i$1.tecScoreTeam.score}`),i(t,i$1.tecScoreTeam);}catch(i){h(i);}});}function It(d){let n=d.command("problems").description("Technospam practice problems");n.command("list").description("List problems").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--topic <t>","Filter by topic").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(Q,{difficulty:e.difficulty?e.difficulty.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,topic:e.topic,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListProblems.items,{headers:["ID","Title","Difficulty","Status","Points"],rows:t.tecListProblems.items.map(i=>[r(i.id,12),i.title,i.difficulty,i.status,String(i.points??0)])});}catch(t){h(t);}}),n.command("get").description("Get a problem by id").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(X,{id:e});if(!i$1.tecProblem)throw new o(`Problem ${e} not found`);i(t,i$1.tecProblem);}catch(i){h(i);}}),n.command("create").description("Create a problem").requiredOption("--title <t>","Problem title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD","EASY").option("--points <n>","Points",a).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,difficulty:(e.difficulty??"EASY").toUpperCase()};e.topic&&(t.topic=e.topic),e.statement&&(t.statement=e.statement),e.points!==void 0&&(t.points=e.points),e.languages&&(t.languages=p(e.languages)),e.starterCode&&(t.starterCode=e.starterCode),e.tags&&(t.tags=p(e.tags));let i$1=await b$1(Z,{input:t});k$1(`Problem created: ${i$1.tecCreateProblem.title}`),i(e,i$1.tecCreateProblem);}catch(t){h(t);}}),n.command("update").description("Update a problem").argument("<id>","Problem ID").option("--title <t>","Problem title").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--points <n>","Points",a).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.topic!==void 0&&(i$1.topic=t.topic),t.statement!==void 0&&(i$1.statement=t.statement),t.difficulty&&(i$1.difficulty=t.difficulty.toUpperCase()),t.points!==void 0&&(i$1.points=t.points),t.languages&&(i$1.languages=p(t.languages)),t.starterCode!==void 0&&(i$1.starterCode=t.starterCode),t.tags&&(i$1.tags=p(t.tags)),!Object.keys(i$1).length)throw new o("No updates specified");let I=await b$1(tt,{id:e,input:i$1});k$1("Problem updated"),i(t,I.tecUpdateProblem);}catch(i){h(i);}}),n.command("publish").description("Publish a problem (DRAFT -> PUBLISHED)").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(et,{id:e});k$1(`Problem published: ${i$1.tecPublishProblem.title}`),i(t,i$1.tecPublishProblem);}catch(i){h(i);}});}function Ct(d){let n=d.command("submissions").description("Technospam problem submissions");n.command("list").description("List submissions").option("--problem <id>","Filter by problem ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(it,{problemId:e.problem,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListSubmissions.items,{headers:["ID","Problem","Learner","Language","Verdict","Points"],rows:t.tecListSubmissions.items.map(i=>[r(i.id,12),r(i.problemId,12),r(i.learnerId,12),i.language,i.verdict,String(i.pointsAwarded??0)])});}catch(t){h(t);}}),n.command("submit").description("Submit a solution to a problem").requiredOption("--problem <id>","Problem ID").requiredOption("--language <l>","Language").requiredOption("--code <c>","Solution code").option("-f, --format <format>","Output format").action(async e=>{try{let t={problemId:e.problem,language:e.language,code:e.code},i$1=await b$1(nt,{input:t});k$1(`Solution submitted: ${i$1.tecSubmitSolution.verdict}`),i(e,i$1.tecSubmitSolution);}catch(t){h(t);}}),n.command("grade").description("Record the grader verdict for a submission").argument("<id>","Submission ID").requiredOption("--verdict <v>","PENDING|ACCEPTED|WRONG_ANSWER|TIME_LIMIT_EXCEEDED|RUNTIME_ERROR|COMPILE_ERROR").option("--runtime-ms <n>","Runtime in milliseconds",a).option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(ot,{id:e,verdict:t.verdict.toUpperCase(),runtimeMs:t.runtimeMs});k$1(`Submission graded: ${i$1.tecGradeSubmission.verdict}`),i(t,i$1.tecGradeSubmission);}catch(i){h(i);}});}function ht(d){let n=d.command("certificates").description("Technospam completion certificates");n.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(rt,{courseId:e.course,learnerId:e.learner});i(e,t.tecListCertificates,{headers:["ID","Serial","Course","Learner","Score","Status"],rows:t.tecListCertificates.map(i=>[r(i.id,12),i.serial,r(i.courseId,12),r(i.learnerId,12),String(i.score),i.status])});}catch(t){h(t);}}),n.command("issue").description("Issue a verifiable completion certificate for a learner on a course").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--score <n>","Score",a).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b$1(st,{courseId:e.course,learnerId:e.learner,score:e.score});k$1(`Certificate issued: ${t.tecIssueCertificate.serial}`),i(e,t.tecIssueCertificate);}catch(t){h(t);}}),n.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("--reason <s>","Revocation reason").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b$1(at,{id:e,reason:t.reason});k$1(`Certificate revoked: ${i$1.tecRevokeCertificate.status}`),i(t,i$1.tecRevokeCertificate);}catch(i){h(i);}});}function St(d$1){d$1.command("health").description("Technospam service health check (public)").option("-f, --format <format>","Output format").action(async n=>{try{let e=await d(ct);k$1(e.tecHealth),i(n,{health:e.tecHealth});}catch(e){h(e);}});}var bt={id:"technospam",version:"1.0.0",displayName:"Technospam",dependsOn:["auth","workspaces"],register(d,n){a$1(n);let e=d.command("technospam").description("Technospam developer-education platform");mt(e),dt(e),ut(e),pt(e),lt(e),ft(e),gt(e),It(e),Ct(e),ht(e),St(e);}},Ce=bt;export{Ce as default};
|
|
352
|
+
`;function a(d){let n=Number.parseInt(d,10);if(Number.isNaN(n))throw new o(`Expected an integer but got "${d}"`);return n}function l(d){return d.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function C(d,n){let e=[];for(let t of d){let i=t[n];i&&e.push({...i,canonicalId:t.id});}return e}function h(d){d.hasMore&&d.cursor&&n(`More results available: rerun with --cursor ${d.cursor}`);}function pt(d){let n=d.command("courses").description("Technospam courses");n.command("list").description("List courses").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",a,50).option("--cursor <id>","Start after this course (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(y,{level:e.level?e.level.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,...e.cursor?{cursor:e.cursor}:{}}}),i$1=C(t.tecCanonicalCourses.items,"technospamCourse");i(e,i$1,{headers:["ID","Title","Level","Status","Minutes"],rows:i$1.map(m=>[r(m.id,12),m.title,m.level,m.status,String(m.estimatedMinutes??0)])}),h(t.tecCanonicalCourses.pageInfo);}catch(t){h$1(t);}}),n.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(A,{id:e}),[m]=C(i$1.tecCanonicalCourse?[i$1.tecCanonicalCourse]:[],"technospamCourse");if(!m)throw new o(`Course ${e} not found`);i(t,m);}catch(i){h$1(i);}}),n.command("create").description("Create a course").requiredOption("--title <t>","Course title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--estimated-minutes <n>","Estimated minutes",a).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,level:(e.level??"BEGINNER").toUpperCase()};e.topic&&(t.topic=e.topic),e.summary&&(t.summary=e.summary),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.instructorId&&(t.instructorId=e.instructorId),e.coverFileId&&(t.coverFileId=e.coverFileId),e.tags&&(t.tags=l(e.tags));let i$1=await b(R,{input:t});k$1(`Course created: ${i$1.tecCreateCourse.title}`),i(e,i$1.tecCreateCourse);}catch(t){h$1(t);}}),n.command("update").description("Update a course").argument("<id>","Course ID").option("--title <t>","Course title").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--estimated-minutes <n>","Estimated minutes",a).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.topic!==void 0&&(i$1.topic=t.topic),t.summary!==void 0&&(i$1.summary=t.summary),t.level&&(i$1.level=t.level.toUpperCase()),t.estimatedMinutes!==void 0&&(i$1.estimatedMinutes=t.estimatedMinutes),t.instructorId&&(i$1.instructorId=t.instructorId),t.coverFileId&&(i$1.coverFileId=t.coverFileId),t.tags&&(i$1.tags=l(t.tags)),!Object.keys(i$1).length)throw new o("No updates specified");let m=await b(O,{id:e,input:i$1});k$1("Course updated"),i(t,m.tecUpdateCourse);}catch(i){h$1(i);}}),n.command("publish").description("Publish a course (DRAFT -> PUBLISHED)").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(P,{id:e});k$1(`Course published: ${i$1.tecPublishCourse.title}`),i(t,i$1.tecPublishCourse);}catch(i){h$1(i);}}),n.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(w,{id:e});k$1(i$1.tecArchiveCourse?"Course archived":"Course not archived"),i(t,{archived:i$1.tecArchiveCourse});}catch(i){h$1(i);}});}function lt(d){let n=d.command("lessons").description("Technospam course lessons");n.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("--limit <n>","Page size",a,100).option("--cursor <id>","Start after this lesson (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(k,{courseId:e.course,pagination:{limit:e.limit,...e.cursor?{cursor:e.cursor}:{}}}),i$1=C(t.tecCanonicalLessons.items,"technospamLesson");i(e,i$1,{headers:["ID","Title","Kind","Position","Minutes","Preview"],rows:i$1.map(m=>[r(m.id,12),m.title,m.kind,String(m.position),String(m.estimatedMinutes??0),m.isPreview?"yes":"no"])}),h(t.tecCanonicalLessons.pageInfo);}catch(t){h$1(t);}}),n.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT","ARTICLE").option("--content <s>","Lesson content").option("--position <n>","Order position",a).option("--estimated-minutes <n>","Estimated minutes",a).option("--file-id <id>","Attachment / video File ID").option("--preview","Mark as a free preview lesson").option("-f, --format <format>","Output format").action(async e=>{try{let t={courseId:e.course,title:e.title,kind:(e.kind??"ARTICLE").toUpperCase()};e.content&&(t.content=e.content),e.position!==void 0&&(t.position=e.position),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.fileId&&(t.fileId=e.fileId),e.preview&&(t.isPreview=!0);let i$1=await b(M,{input:t});k$1(`Lesson created: ${i$1.tecCreateLesson.title}`),i(e,i$1.tecCreateLesson);}catch(t){h$1(t);}}),n.command("update").description("Update a lesson").argument("<id>","Lesson ID").option("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT").option("--content <s>","Lesson content").option("--position <n>","Order position",a).option("--estimated-minutes <n>","Estimated minutes",a).option("--file-id <id>","Attachment / video File ID").option("--preview <bool>","true|false",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.kind&&(i$1.kind=t.kind.toUpperCase()),t.content!==void 0&&(i$1.content=t.content),t.position!==void 0&&(i$1.position=t.position),t.estimatedMinutes!==void 0&&(i$1.estimatedMinutes=t.estimatedMinutes),t.fileId&&(i$1.fileId=t.fileId),t.preview!==void 0&&(i$1.isPreview=t.preview),!Object.keys(i$1).length)throw new o("No updates specified");let m=await b($,{id:e,input:i$1});k$1("Lesson updated"),i(t,m.tecUpdateLesson);}catch(i){h$1(i);}});}function gt(d){let n=d.command("enrollments").description("Technospam course enrollments");n.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",a,50).option("--cursor <id>","Start after this enrollment (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(L,{courseId:e.course,learnerId:e.learner,pagination:{limit:e.limit,...e.cursor?{cursor:e.cursor}:{}}}),i$1=C(t.tecCanonicalEnrollments.items,"technospamEnrollment");i(e,i$1,{headers:["ID","Course","Learner","Status","Progress %","Lessons"],rows:i$1.map(m=>[r(m.id,12),r(m.courseId,12),r(m.learnerId,12),m.status,String(m.progressPct),String(m.lessonsCompleted)])}),h(t.tecCanonicalEnrollments.pageInfo);}catch(t){h$1(t);}}),n.command("enroll").description("Enroll the calling user in a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(D,{input:{courseId:e.course}});k$1(`Enrolled in course ${t.tecEnroll.courseId}`),i(e,t.tecEnroll);}catch(t){h$1(t);}}),n.command("update-progress").description("Update a learner's enrollment progress (auto-completes at 100%)").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--progress-pct <n>","Progress percent (0-100)",a).option("--lessons-completed <n>","Lessons completed count",a).option("-f, --format <format>","Output format").action(async e=>{try{let t={enrollmentId:e.enrollment,progressPct:e.progressPct};e.lessonsCompleted!==void 0&&(t.lessonsCompleted=e.lessonsCompleted);let i$1=await b(v,{input:t});k$1(`Progress updated to ${i$1.tecUpdateProgress.progressPct}%`),i(e,i$1.tecUpdateProgress);}catch(t){h$1(t);}});}function ft(d){let n=d.command("mentors").description("Technospam mentors");n.command("list").description("List mentors").option("--status <s>","PENDING|ACTIVE|PAUSED|INACTIVE").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(x,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListMentors.items,{headers:["ID","Headline","Status","Rate","Rating","Accepting"],rows:t.tecListMentors.items.map(i=>[r(i.id,12),r(i.headline,30),i.status,String(i.hourlyRate??0),String(i.ratingAvg??0),i.isAcceptingMentees?"yes":"no"])});}catch(t){h$1(t);}}),n.command("get").description("Get a mentor by id").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(U,{id:e});if(!i$1.tecMentor)throw new o(`Mentor ${e} not found`);i(t,i$1.tecMentor);}catch(i){h$1(i);}}),n.command("become").description("Create the calling user's mentor profile").requiredOption("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",a).option("--currency <c>","Currency code").option("-f, --format <format>","Output format").action(async e=>{try{let t={headline:e.headline};e.bio&&(t.bio=e.bio),e.expertise&&(t.expertise=l(e.expertise)),e.hourlyRate!==void 0&&(t.hourlyRate=e.hourlyRate),e.currency&&(t.currency=e.currency);let i$1=await b(N,{input:t});k$1(`Mentor profile created: ${i$1.tecBecomeMentor.headline}`),i(e,i$1.tecBecomeMentor);}catch(t){h$1(t);}}),n.command("update").description("Update a mentor profile").argument("<id>","Mentor ID").option("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",a).option("--currency <c>","Currency code").option("--accepting <bool>","true|false (accepting mentees)",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.headline&&(i$1.headline=t.headline),t.bio!==void 0&&(i$1.bio=t.bio),t.expertise&&(i$1.expertise=l(t.expertise)),t.hourlyRate!==void 0&&(i$1.hourlyRate=t.hourlyRate),t.currency&&(i$1.currency=t.currency),t.accepting!==void 0&&(i$1.isAcceptingMentees=t.accepting),!Object.keys(i$1).length)throw new o("No updates specified");let m=await b(_,{id:e,input:i$1});k$1("Mentor updated"),i(t,m.tecUpdateMentor);}catch(i){h$1(i);}}),n.command("approve").description("Approve a pending mentor profile (PENDING -> ACTIVE)").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(H,{id:e});k$1(`Mentor approved: ${i$1.tecApproveMentor.status}`),i(t,i$1.tecApproveMentor);}catch(i){h$1(i);}});}function It(d){let n=d.command("sessions").description("Technospam mentorship sessions");n.command("list").description("List mentorship sessions").option("--mentor <id>","Filter by mentor ID").option("--mentee <id>","Filter by mentee ID").option("--status <s>","REQUESTED|CONFIRMED|COMPLETED|CANCELLED|NO_SHOW").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(B,{mentorId:e.mentor,menteeId:e.mentee,status:e.status?e.status.toUpperCase():void 0});i(e,t.tecListSessions.items,{headers:["ID","Mentor","Mentee","Topic","Status","Scheduled"],rows:t.tecListSessions.items.map(i=>[r(i.id,12),r(i.mentorId,12),r(i.menteeId,12),r(i.topic,24),i.status,q$1(i.scheduledAt)])});}catch(t){h$1(t);}}),n.command("book").description("Book a 1:1 session with a mentor as the calling mentee").requiredOption("--mentor <id>","Mentor ID").requiredOption("--topic <t>","Session topic").requiredOption("--scheduled-at <iso>","Scheduled time (ISO date)").option("--agenda <s>","Agenda").option("--duration-minutes <n>","Duration (minutes)",a).option("-f, --format <format>","Output format").action(async e=>{try{let t={mentorId:e.mentor,topic:e.topic,scheduledAt:e.scheduledAt};e.agenda&&(t.agenda=e.agenda),e.durationMinutes!==void 0&&(t.durationMinutes=e.durationMinutes);let i$1=await b(q,{input:t});k$1(`Session booked: ${i$1.tecBookSession.topic}`),i(e,i$1.tecBookSession);}catch(t){h$1(t);}}),n.command("confirm").description("Confirm a requested session").argument("<id>","Session ID").option("--meeting-url <url>","Meeting URL").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(z,{id:e,meetingUrl:t.meetingUrl});k$1("Session confirmed"),i(t,i$1.tecConfirmSession);}catch(i){h$1(i);}}),n.command("cancel").description("Cancel a session").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(F,{id:e});k$1("Session cancelled"),i(t,i$1.tecCancelSession);}catch(i){h$1(i);}}),n.command("complete").description("Complete a session with optional rating and feedback").argument("<id>","Session ID").option("--rating <n>","Rating (1-5)",a).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(G,{id:e,rating:t.rating,feedback:t.feedback});k$1("Session completed"),i(t,i$1.tecCompleteSession);}catch(i){h$1(i);}});}function Ct(d){let n=d.command("hackathons").description("Technospam hackathons");n.command("list").description("List hackathons").option("--status <s>","DRAFT|REGISTRATION_OPEN|IN_PROGRESS|JUDGING|COMPLETED|CANCELLED").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(V,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListHackathons.items,{headers:["ID","Title","Status","Start","Prize"],rows:t.tecListHackathons.items.map(i=>[r(i.id,12),i.title,i.status,q$1(i.startAt),String(i.prizePool??0)])});}catch(t){h$1(t);}}),n.command("get").description("Get a hackathon by id").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(j,{id:e});if(!i$1.tecHackathon)throw new o(`Hackathon ${e} not found`);i(t,i$1.tecHackathon);}catch(i){h$1(i);}}),n.command("create").description("Create a hackathon").requiredOption("--title <t>","Hackathon title").requiredOption("--slug <slug>","URL slug").requiredOption("--start-at <iso>","Start time (ISO date)").requiredOption("--end-at <iso>","End time (ISO date)").option("--theme <t>","Theme").option("--description <s>","Description").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",a).option("--prize-pool <n>","Prize pool",a).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,startAt:e.startAt,endAt:e.endAt};e.theme&&(t.theme=e.theme),e.description&&(t.description=e.description),e.submissionDeadline&&(t.submissionDeadline=e.submissionDeadline),e.maxTeamSize!==void 0&&(t.maxTeamSize=e.maxTeamSize),e.prizePool!==void 0&&(t.prizePool=e.prizePool),e.currency&&(t.currency=e.currency),e.tags&&(t.tags=l(e.tags));let i$1=await b(K,{input:t});k$1(`Hackathon created: ${i$1.tecCreateHackathon.title}`),i(e,i$1.tecCreateHackathon);}catch(t){h$1(t);}}),n.command("update").description("Update a hackathon").argument("<id>","Hackathon ID").option("--title <t>","Hackathon title").option("--theme <t>","Theme").option("--description <s>","Description").option("--start-at <iso>","Start time (ISO date)").option("--end-at <iso>","End time (ISO date)").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",a).option("--prize-pool <n>","Prize pool",a).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.theme!==void 0&&(i$1.theme=t.theme),t.description!==void 0&&(i$1.description=t.description),t.startAt&&(i$1.startAt=t.startAt),t.endAt&&(i$1.endAt=t.endAt),t.submissionDeadline&&(i$1.submissionDeadline=t.submissionDeadline),t.maxTeamSize!==void 0&&(i$1.maxTeamSize=t.maxTeamSize),t.prizePool!==void 0&&(i$1.prizePool=t.prizePool),t.currency&&(i$1.currency=t.currency),t.tags&&(i$1.tags=l(t.tags)),!Object.keys(i$1).length)throw new o("No updates specified");let m=await b(W,{id:e,input:i$1});k$1("Hackathon updated"),i(t,m.tecUpdateHackathon);}catch(i){h$1(i);}}),n.command("open-registration").description("Open registration for a hackathon (DRAFT -> REGISTRATION_OPEN)").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(J,{id:e});k$1(`Registration open: ${i$1.tecOpenRegistration.status}`),i(t,i$1.tecOpenRegistration);}catch(i){h$1(i);}});}function ht(d){let n=d.command("teams").description("Technospam hackathon teams");n.command("list").description("List teams for a hackathon").requiredOption("--hackathon <id>","Hackathon ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(Y,{hackathonId:e.hackathon});i(e,t.tecListTeams.items,{headers:["ID","Name","Captain","Status","Score"],rows:t.tecListTeams.items.map(i=>[r(i.id,12),i.name,r(i.captainId,12),i.status,String(i.score??0)])});}catch(t){h$1(t);}}),n.command("register").description("Register a team for a hackathon with the calling user as captain").requiredOption("--hackathon <id>","Hackathon ID").requiredOption("--name <name>","Team name").option("--members <csv>","Comma-separated member user IDs").option("-f, --format <format>","Output format").action(async e=>{try{let t={hackathonId:e.hackathon,name:e.name};e.members&&(t.memberIds=l(e.members));let i$1=await b(X,{input:t});k$1(`Team registered: ${i$1.tecRegisterTeam.name}`),i(e,i$1.tecRegisterTeam);}catch(t){h$1(t);}}),n.command("submit-project").description("Submit a team's project for judging").requiredOption("--team <id>","Team ID").requiredOption("--project-name <n>","Project name").option("--project-url <url>","Project URL").option("--repo-url <url>","Repository URL").option("--pitch <s>","Pitch").option("-f, --format <format>","Output format").action(async e=>{try{let t={teamId:e.team,projectName:e.projectName};e.projectUrl&&(t.projectUrl=e.projectUrl),e.repoUrl&&(t.repoUrl=e.repoUrl),e.pitch&&(t.pitch=e.pitch);let i$1=await b(Q,{input:t});k$1(`Project submitted: ${i$1.tecSubmitProject.status}`),i(e,i$1.tecSubmitProject);}catch(t){h$1(t);}}),n.command("score").description("Record a judge score for a team and optionally mark it WINNER").argument("<id>","Team ID").requiredOption("--score <n>","Score",a).option("--winner","Mark the team as winner").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(Z,{id:e,score:t.score,winner:t.winner??void 0});k$1(`Team scored: ${i$1.tecScoreTeam.score}`),i(t,i$1.tecScoreTeam);}catch(i){h$1(i);}});}function St(d){let n=d.command("problems").description("Technospam practice problems");n.command("list").description("List problems").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--topic <t>","Filter by topic").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(et,{difficulty:e.difficulty?e.difficulty.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,topic:e.topic,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListProblems.items,{headers:["ID","Title","Difficulty","Status","Points"],rows:t.tecListProblems.items.map(i=>[r(i.id,12),i.title,i.difficulty,i.status,String(i.points??0)])});}catch(t){h$1(t);}}),n.command("get").description("Get a problem by id").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(tt,{id:e});if(!i$1.tecProblem)throw new o(`Problem ${e} not found`);i(t,i$1.tecProblem);}catch(i){h$1(i);}}),n.command("create").description("Create a problem").requiredOption("--title <t>","Problem title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD","EASY").option("--points <n>","Points",a).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,difficulty:(e.difficulty??"EASY").toUpperCase()};e.topic&&(t.topic=e.topic),e.statement&&(t.statement=e.statement),e.points!==void 0&&(t.points=e.points),e.languages&&(t.languages=l(e.languages)),e.starterCode&&(t.starterCode=e.starterCode),e.tags&&(t.tags=l(e.tags));let i$1=await b(it,{input:t});k$1(`Problem created: ${i$1.tecCreateProblem.title}`),i(e,i$1.tecCreateProblem);}catch(t){h$1(t);}}),n.command("update").description("Update a problem").argument("<id>","Problem ID").option("--title <t>","Problem title").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--points <n>","Points",a).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1={};if(t.title&&(i$1.title=t.title),t.topic!==void 0&&(i$1.topic=t.topic),t.statement!==void 0&&(i$1.statement=t.statement),t.difficulty&&(i$1.difficulty=t.difficulty.toUpperCase()),t.points!==void 0&&(i$1.points=t.points),t.languages&&(i$1.languages=l(t.languages)),t.starterCode!==void 0&&(i$1.starterCode=t.starterCode),t.tags&&(i$1.tags=l(t.tags)),!Object.keys(i$1).length)throw new o("No updates specified");let m=await b(nt,{id:e,input:i$1});k$1("Problem updated"),i(t,m.tecUpdateProblem);}catch(i){h$1(i);}}),n.command("publish").description("Publish a problem (DRAFT -> PUBLISHED)").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(ot,{id:e});k$1(`Problem published: ${i$1.tecPublishProblem.title}`),i(t,i$1.tecPublishProblem);}catch(i){h$1(i);}});}function bt(d){let n=d.command("submissions").description("Technospam problem submissions");n.command("list").description("List submissions").option("--problem <id>","Filter by problem ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",a,50).option("--offset <n>","Offset",a,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(rt,{problemId:e.problem,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListSubmissions.items,{headers:["ID","Problem","Learner","Language","Verdict","Points"],rows:t.tecListSubmissions.items.map(i=>[r(i.id,12),r(i.problemId,12),r(i.learnerId,12),i.language,i.verdict,String(i.pointsAwarded??0)])});}catch(t){h$1(t);}}),n.command("submit").description("Submit a solution to a problem").requiredOption("--problem <id>","Problem ID").requiredOption("--language <l>","Language").requiredOption("--code <c>","Solution code").option("-f, --format <format>","Output format").action(async e=>{try{let t={problemId:e.problem,language:e.language,code:e.code},i$1=await b(st,{input:t});k$1(`Solution submitted: ${i$1.tecSubmitSolution.verdict}`),i(e,i$1.tecSubmitSolution);}catch(t){h$1(t);}}),n.command("grade").description("Record the grader verdict for a submission").argument("<id>","Submission ID").requiredOption("--verdict <v>","PENDING|ACCEPTED|WRONG_ANSWER|TIME_LIMIT_EXCEEDED|RUNTIME_ERROR|COMPILE_ERROR").option("--runtime-ms <n>","Runtime in milliseconds",a).option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(at,{id:e,verdict:t.verdict.toUpperCase(),runtimeMs:t.runtimeMs});k$1(`Submission graded: ${i$1.tecGradeSubmission.verdict}`),i(t,i$1.tecGradeSubmission);}catch(i){h$1(i);}});}function Et(d){let n=d.command("certificates").description("Technospam completion certificates");n.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",a,50).option("--cursor <id>","Start after this certificate (pageInfo.cursor of the previous page)").option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(ct,{courseId:e.course,learnerId:e.learner,pagination:{limit:e.limit,...e.cursor?{cursor:e.cursor}:{}}}),i$1=C(t.tecCanonicalCertificates.items,"technospamCertificate");i(e,i$1,{headers:["ID","Serial","Course","Learner","Score","Status"],rows:i$1.map(m=>[r(m.id,12),m.serial,r(m.courseId,12),r(m.learnerId,12),String(m.score),m.status])}),h(t.tecCanonicalCertificates.pageInfo);}catch(t){h$1(t);}}),n.command("issue").description("Issue a verifiable completion certificate for a learner on a course").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--score <n>","Score",a).option("-f, --format <format>","Output format").action(async e=>{try{let t=await b(mt,{courseId:e.course,learnerId:e.learner,score:e.score});k$1(`Certificate issued: ${t.tecIssueCertificate.serial}`),i(e,t.tecIssueCertificate);}catch(t){h$1(t);}}),n.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("--reason <s>","Revocation reason").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let i$1=await b(dt,{id:e,reason:t.reason});k$1(`Certificate revoked: ${i$1.tecRevokeCertificate.status}`),i(t,i$1.tecRevokeCertificate);}catch(i){h$1(i);}});}function Tt(d$1){d$1.command("health").description("Technospam service health check (public)").option("-f, --format <format>","Output format").action(async n=>{try{let e=await d(ut);k$1(e.tecHealth),i(n,{health:e.tecHealth});}catch(e){h$1(e);}});}var At={id:"technospam",version:"1.0.0",displayName:"Technospam",dependsOn:["auth","workspaces"],register(d,n){a$1(n);let e=d.command("technospam").description("Technospam developer-education platform");pt(e),lt(e),gt(e),ft(e),It(e),Ct(e),ht(e),St(e),bt(e),Et(e),Tt(e);}},be=At;export{be as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/cli-sdk",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.1107.1",
|
|
4
4
|
"description": "Modular CLI SDK shared across all Burdenoff product CLIs (vibecontrols, botlit, fluidgrids, bigconsole, healthybowl, devportal, workspaces). Each module exports CliModule contract; product CLIs become thin shells that pick which modules to mount.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|