canvaslms-cli 1.4.5 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +1 -9
- package/dist/commands/announcements.d.ts +3 -0
- package/dist/commands/announcements.d.ts.map +1 -0
- package/dist/commands/announcements.js +87 -0
- package/dist/commands/announcements.js.map +1 -0
- package/dist/commands/api.d.ts +3 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +8 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/assignments.d.ts +3 -0
- package/dist/commands/assignments.d.ts.map +1 -0
- package/dist/commands/assignments.js +100 -0
- package/dist/commands/assignments.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +202 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/grades.d.ts +3 -0
- package/dist/commands/grades.d.ts.map +1 -0
- package/dist/commands/grades.js +128 -0
- package/dist/commands/grades.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +61 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/profile.d.ts +6 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +30 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/submit.d.ts +8 -0
- package/dist/commands/submit.d.ts.map +1 -0
- package/dist/commands/submit.js +319 -0
- package/dist/commands/submit.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +2 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +69 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/config-validator.d.ts +4 -0
- package/dist/lib/config-validator.d.ts.map +1 -0
- package/dist/lib/config-validator.js +38 -0
- package/dist/lib/config-validator.js.map +1 -0
- package/dist/lib/config.d.ts +10 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +85 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/file-upload.d.ts +3 -0
- package/dist/lib/file-upload.d.ts.map +1 -0
- package/dist/lib/file-upload.js +52 -0
- package/dist/lib/file-upload.js.map +1 -0
- package/dist/lib/interactive.d.ts +16 -0
- package/dist/lib/interactive.d.ts.map +1 -0
- package/dist/lib/interactive.js +756 -0
- package/dist/lib/interactive.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +89 -0
- package/dist/src/index.js.map +1 -0
- package/dist/types/index.d.ts +146 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +76 -71
- package/commands/announcements.js +0 -102
- package/commands/api.js +0 -19
- package/commands/assignments.js +0 -100
- package/commands/config.js +0 -239
- package/commands/grades.js +0 -201
- package/commands/list.js +0 -68
- package/commands/profile.js +0 -35
- package/commands/submit.js +0 -603
- package/lib/api-client.js +0 -75
- package/lib/config-validator.js +0 -60
- package/lib/config.js +0 -103
- package/lib/file-upload.js +0 -74
- package/lib/interactive.js +0 -889
- package/src/index.js +0 -120
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [1.2.0] - 2025-07-05
|
|
9
9
|
|
|
10
|
+
## [1.4.7] - 2025-11-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Show allowed file extensions hint in the interactive file browser when an assignment restricts uploads (e.g. "Allowed: .pdf, .docx").
|
|
15
|
+
- Add `r` keybinding to the file browser to reload the current directory listing without exiting the browser.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Prevent the interactive file browser from permanently removing other stdin listeners: save and restore `process.stdin` 'data' listeners so `readline` and SIGINT (Ctrl+C) continue to work after browser exit.
|
|
20
|
+
- Filter file browser listings by `allowed_extensions` when provided by the assignment so disallowed file types cannot be selected (prevents HTTP 400 "filetype not allowed").
|
|
21
|
+
- Allow pressing Enter at the final "Proceed with submission? (Y/n)" prompt to accept the default (Yes) to match the shown prompt.
|
|
22
|
+
|
|
23
|
+
### Notes
|
|
24
|
+
|
|
25
|
+
- Bumped package version to 1.4.7.
|
|
26
|
+
|
|
27
|
+
|
|
10
28
|
### Added
|
|
11
29
|
|
|
12
30
|
- **Enhanced File Selection UX**: Implemented continuous file selection until empty input
|
package/README.md
CHANGED
|
@@ -20,17 +20,9 @@ A modern, user-friendly command-line interface for Canvas LMS. Manage courses, a
|
|
|
20
20
|
### Global (Recommended)
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
npm install -g
|
|
23
|
+
npm install -g canvaslms-cli
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
### Local (Project)
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npm install canvas-cli-tool
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
26
|
## Setup
|
|
35
27
|
|
|
36
28
|
1. **Get your Canvas API Token**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcements.d.ts","sourceRoot":"","sources":["../../commands/announcements.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoC,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEpG,wBAAsB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGhH"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { makeCanvasRequest } from '../lib/api-client.js';
|
|
2
|
+
import { createReadlineInterface, askQuestion } from '../lib/interactive.js';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
export async function showAnnouncements(courseId, options = {}) {
|
|
5
|
+
const rl = createReadlineInterface();
|
|
6
|
+
try {
|
|
7
|
+
let selectedCourseId = courseId;
|
|
8
|
+
if (!selectedCourseId) {
|
|
9
|
+
console.log(chalk.cyan.bold('Loading your courses, please wait...\n'));
|
|
10
|
+
const courses = await makeCanvasRequest('get', 'courses', [
|
|
11
|
+
'enrollment_state=active',
|
|
12
|
+
'include[]=favorites'
|
|
13
|
+
]);
|
|
14
|
+
if (!courses || courses.length === 0) {
|
|
15
|
+
console.log(chalk.red('Error: No courses found.'));
|
|
16
|
+
rl.close();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
20
|
+
console.log(chalk.cyan.bold('Select a course:'));
|
|
21
|
+
courses.forEach((course, index) => {
|
|
22
|
+
console.log(chalk.white(`${index + 1}.`) + ' ' + course.name);
|
|
23
|
+
});
|
|
24
|
+
const courseChoice = await askQuestion(rl, chalk.white('\nEnter course number: '));
|
|
25
|
+
if (!courseChoice.trim()) {
|
|
26
|
+
console.log(chalk.red('No course selected. Exiting...'));
|
|
27
|
+
rl.close();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const courseIndex = parseInt(courseChoice) - 1;
|
|
31
|
+
if (courseIndex < 0 || courseIndex >= courses.length) {
|
|
32
|
+
console.log(chalk.red('Invalid course selection.'));
|
|
33
|
+
rl.close();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
selectedCourseId = String(courses[courseIndex]?.id);
|
|
37
|
+
console.log(chalk.green(`Success: Selected ${courses[courseIndex]?.name}\n`));
|
|
38
|
+
}
|
|
39
|
+
const limit = parseInt(options.limit || '5') || 5;
|
|
40
|
+
const announcements = await makeCanvasRequest('get', `courses/${selectedCourseId}/discussion_topics`, [`only_announcements=true`, `per_page=${limit}`]);
|
|
41
|
+
if (!announcements || announcements.length === 0) {
|
|
42
|
+
console.log(chalk.yellow('No announcements found for this course.'));
|
|
43
|
+
rl.close();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.green('Success: Announcement loaded.'));
|
|
47
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
48
|
+
console.log(chalk.cyan.bold('Announcements:'));
|
|
49
|
+
announcements.forEach((a, i) => {
|
|
50
|
+
const date = a.posted_at ? new Date(a.posted_at).toLocaleDateString() : '';
|
|
51
|
+
console.log(chalk.white(`${i + 1}.`) + ' ' + a.title + chalk.gray(date ? ` (${date})` : ''));
|
|
52
|
+
});
|
|
53
|
+
const annChoice = await askQuestion(rl, chalk.white('\nEnter announcement number to view details: '));
|
|
54
|
+
if (!annChoice.trim()) {
|
|
55
|
+
console.log(chalk.red('No announcement selected. Exiting...'));
|
|
56
|
+
rl.close();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const annIndex = parseInt(annChoice) - 1;
|
|
60
|
+
if (annIndex < 0 || annIndex >= announcements.length) {
|
|
61
|
+
console.log(chalk.red('Invalid announcement selection.'));
|
|
62
|
+
rl.close();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const ann = announcements[annIndex];
|
|
66
|
+
const title = ann?.title || 'Untitled';
|
|
67
|
+
const date = ann?.posted_at ? new Date(ann.posted_at).toLocaleString() : 'N/A';
|
|
68
|
+
const author = ann?.author?.display_name || 'Unknown';
|
|
69
|
+
const message = ann?.message?.replace(/<[^>]+>/g, '').trim() || 'No content';
|
|
70
|
+
console.log('\n' + chalk.cyan('='.repeat(60)));
|
|
71
|
+
console.log(chalk.bold(' ' + title));
|
|
72
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
73
|
+
console.log(chalk.gray(' Posted: ') + date);
|
|
74
|
+
console.log(chalk.gray(' Author: ') + author);
|
|
75
|
+
console.log('\n' + chalk.bold(' Message:') + '\n');
|
|
76
|
+
console.log(message);
|
|
77
|
+
console.log(chalk.cyan('='.repeat(60)) + '\n');
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
81
|
+
console.error(chalk.red('Error: Failed to fetch announcements: ') + errorMessage);
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
rl.close();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=announcements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcements.js","sourceRoot":"","sources":["../../commands/announcements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../commands/api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,IACzB,UAAU,MAAM,EAAE,SAAS,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC,CAIjF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { makeCanvasRequest } from '../lib/api-client.js';
|
|
2
|
+
export function createQueryHandler(method) {
|
|
3
|
+
return async function (endpoint, options) {
|
|
4
|
+
const data = await makeCanvasRequest(method, endpoint, options.query || [], options.body || null);
|
|
5
|
+
console.log(JSON.stringify(data, null, 2));
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../commands/api.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAMzD,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,KAAK,WAAU,QAAgB,EAAE,OAAwB;QAC9D,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignments.d.ts","sourceRoot":"","sources":["../../commands/assignments.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkC,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAMhG,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFtG"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { makeCanvasRequest } from '../lib/api-client.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
function pad(str, len) {
|
|
4
|
+
return str + ' '.repeat(Math.max(0, len - str.length));
|
|
5
|
+
}
|
|
6
|
+
export async function listAssignments(courseId, options) {
|
|
7
|
+
try {
|
|
8
|
+
const course = await makeCanvasRequest('get', `courses/${courseId}`);
|
|
9
|
+
const queryParams = ['include[]=submission', 'include[]=score_statistics', 'per_page=100'];
|
|
10
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
11
|
+
console.log(chalk.cyan.bold('Loading assignments, please wait...'));
|
|
12
|
+
const assignments = await makeCanvasRequest('get', `courses/${courseId}/assignments`, queryParams);
|
|
13
|
+
if (!assignments || assignments.length === 0) {
|
|
14
|
+
console.log(chalk.red(`Error: No assignments found for course: ${course.name}`));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
let filteredAssignments = assignments;
|
|
18
|
+
if (options.submitted) {
|
|
19
|
+
filteredAssignments = assignments.filter(a => a.submission && a.submission.submitted_at);
|
|
20
|
+
}
|
|
21
|
+
else if (options.pending) {
|
|
22
|
+
filteredAssignments = assignments.filter(a => !a.submission || !a.submission.submitted_at);
|
|
23
|
+
}
|
|
24
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
25
|
+
console.log(chalk.cyan.bold(`Assignments for: ${course.name}`));
|
|
26
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
27
|
+
console.log(chalk.green(`Success: Found ${filteredAssignments.length} assignment(s).`));
|
|
28
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
29
|
+
console.log(pad(chalk.bold('No.'), 5) +
|
|
30
|
+
pad(chalk.bold('Assignment Name'), 35) +
|
|
31
|
+
pad(chalk.bold('ID'), 10) +
|
|
32
|
+
pad(chalk.bold('Grade'), 12) +
|
|
33
|
+
pad(chalk.bold('Due'), 22) +
|
|
34
|
+
(options.verbose ? pad(chalk.bold('Status'), 12) : ''));
|
|
35
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
36
|
+
filteredAssignments.forEach((assignment, index) => {
|
|
37
|
+
const submission = assignment.submission;
|
|
38
|
+
let gradeDisplay = '';
|
|
39
|
+
if (submission && submission.score !== null && submission.score !== undefined) {
|
|
40
|
+
const score = submission.score % 1 === 0 ? Math.round(submission.score) : submission.score;
|
|
41
|
+
const total = assignment.points_possible || 0;
|
|
42
|
+
gradeDisplay = `${score}/${total}`;
|
|
43
|
+
}
|
|
44
|
+
else if (submission && submission.excused) {
|
|
45
|
+
gradeDisplay = 'Excused';
|
|
46
|
+
}
|
|
47
|
+
else if (submission && submission.missing) {
|
|
48
|
+
gradeDisplay = 'Missing';
|
|
49
|
+
}
|
|
50
|
+
else if (assignment.points_possible) {
|
|
51
|
+
gradeDisplay = `–/${assignment.points_possible}`;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
gradeDisplay = 'N/A';
|
|
55
|
+
}
|
|
56
|
+
let line = pad(chalk.white((index + 1) + '.'), 5) +
|
|
57
|
+
pad(assignment.name, 35) +
|
|
58
|
+
pad(String(assignment.id), 10) +
|
|
59
|
+
pad(gradeDisplay, 12) +
|
|
60
|
+
pad(assignment.due_at ? new Date(assignment.due_at).toLocaleString() : 'No due date', 22);
|
|
61
|
+
if (options.verbose) {
|
|
62
|
+
let status = 'Not submitted';
|
|
63
|
+
if (submission && submission.submitted_at) {
|
|
64
|
+
status = 'Submitted';
|
|
65
|
+
}
|
|
66
|
+
line += pad(status, 12);
|
|
67
|
+
}
|
|
68
|
+
console.log(line);
|
|
69
|
+
if (options.verbose) {
|
|
70
|
+
if (assignment.description) {
|
|
71
|
+
const cleanDescription = assignment.description
|
|
72
|
+
.replace(/<[^>]*>/g, '')
|
|
73
|
+
.replace(/\s+/g, ' ')
|
|
74
|
+
.trim()
|
|
75
|
+
.substring(0, 150);
|
|
76
|
+
console.log(' ' + chalk.gray('Description: ') + cleanDescription + (cleanDescription.length === 150 ? '...' : ''));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.log(' ' + chalk.gray('Description: N/A'));
|
|
80
|
+
}
|
|
81
|
+
console.log(' ' + chalk.gray('Submission Types: ') + (assignment.submission_types?.join(', ') || 'N/A'));
|
|
82
|
+
console.log(' ' + chalk.gray('Published: ') + (assignment.has_submitted_submissions ? 'Yes' : 'No'));
|
|
83
|
+
if (assignment.points_possible) {
|
|
84
|
+
console.log(' ' + chalk.gray('Points Possible: ') + assignment.points_possible);
|
|
85
|
+
}
|
|
86
|
+
if (submission && submission.attempt) {
|
|
87
|
+
console.log(' ' + chalk.gray('Attempt: ') + submission.attempt);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
console.log('');
|
|
91
|
+
});
|
|
92
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
96
|
+
console.error(chalk.red('Error fetching assignments:'), errorMessage);
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=assignments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignments.js","sourceRoot":"","sources":["../../commands/assignments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function showConfig(): Promise<void>;
|
|
2
|
+
export declare function setupConfig(): Promise<void>;
|
|
3
|
+
export declare function editConfig(): Promise<void>;
|
|
4
|
+
export declare function showConfigPath(): void;
|
|
5
|
+
export declare function deleteConfigFile(): void;
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../commands/config.ts"],"names":[],"mappings":"AASA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA+ChD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgFjD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDhD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAkCvC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { configExists, readConfig, saveConfig, deleteConfig, getConfigPath } from '../lib/config.js';
|
|
2
|
+
import { createReadlineInterface, askQuestion } from '../lib/interactive.js';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import readline from 'readline';
|
|
5
|
+
export async function showConfig() {
|
|
6
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
7
|
+
console.log(chalk.cyan.bold('Canvas CLI Configuration'));
|
|
8
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
9
|
+
const configPath = getConfigPath();
|
|
10
|
+
const hasConfig = configExists();
|
|
11
|
+
console.log(chalk.white('Configuration file: ') + configPath);
|
|
12
|
+
console.log(chalk.white('Status: ') + (hasConfig ? chalk.green('Found') : chalk.red('Not found')) + '\n');
|
|
13
|
+
if (hasConfig) {
|
|
14
|
+
const config = readConfig();
|
|
15
|
+
if (config) {
|
|
16
|
+
console.log(chalk.cyan('Current configuration:'));
|
|
17
|
+
console.log(chalk.white(' Canvas Domain: ') + (config.domain || 'Not set'));
|
|
18
|
+
console.log(chalk.white(' API Token: ') + (config.token ? config.token.substring(0, 10) + '...' : 'Not set'));
|
|
19
|
+
console.log(chalk.white(' Created: ') + (config.createdAt ? new Date(config.createdAt).toLocaleString() : 'Unknown'));
|
|
20
|
+
console.log(chalk.white(' Last Updated: ') + (config.lastUpdated ? new Date(config.lastUpdated).toLocaleString() : 'Unknown'));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log(chalk.yellow('No configuration found.'));
|
|
25
|
+
}
|
|
26
|
+
console.log(chalk.cyan('\nAvailable commands:'));
|
|
27
|
+
console.log(chalk.white(' canvas config setup # Interactive setup wizard'));
|
|
28
|
+
console.log(chalk.white(' canvas config edit # Edit existing configuration'));
|
|
29
|
+
console.log(chalk.white(' canvas config show # Show current configuration'));
|
|
30
|
+
console.log(chalk.white(' canvas config delete # Delete configuration file'));
|
|
31
|
+
console.log(chalk.white(' canvas config path # Show configuration file path'));
|
|
32
|
+
console.log(chalk.cyan('\nManual setup:'));
|
|
33
|
+
console.log(chalk.white('1. Get your Canvas API token:'));
|
|
34
|
+
console.log(chalk.white(' - Log into your Canvas instance'));
|
|
35
|
+
console.log(chalk.white(' - Go to Account → Settings'));
|
|
36
|
+
console.log(chalk.white(' - Scroll down to "Approved Integrations"'));
|
|
37
|
+
console.log(chalk.white(' - Click "+ New Access Token"'));
|
|
38
|
+
console.log(chalk.white(' - Copy the generated token'));
|
|
39
|
+
console.log(chalk.white('2. Run "canvas config setup" to configure'));
|
|
40
|
+
console.log(chalk.cyan('\nExample usage after setup:'));
|
|
41
|
+
console.log(chalk.white(' canvas list # List starred courses'));
|
|
42
|
+
console.log(chalk.white(' canvas list -a # List all enrolled courses'));
|
|
43
|
+
console.log(chalk.white(' canvas submit # Interactive assignment submission'));
|
|
44
|
+
console.log(chalk.white(' canvas profile # Show user profile'));
|
|
45
|
+
console.log(chalk.white(' canvas assignments 12345 # Show assignments for course'));
|
|
46
|
+
console.log(chalk.white(' canvas grades # Show grades for all courses'));
|
|
47
|
+
}
|
|
48
|
+
export async function setupConfig() {
|
|
49
|
+
const rl = createReadlineInterface();
|
|
50
|
+
try {
|
|
51
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
52
|
+
console.log(chalk.cyan.bold('Canvas CLI Configuration Setup'));
|
|
53
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
54
|
+
if (configExists()) {
|
|
55
|
+
const config = readConfig();
|
|
56
|
+
console.log(chalk.yellow('Existing configuration found:'));
|
|
57
|
+
console.log(chalk.white(' Domain: ') + (config?.domain || 'Not set'));
|
|
58
|
+
console.log(chalk.white(' Token: ') + (config?.token ? 'Set (hidden)' : 'Not set') + '\n');
|
|
59
|
+
const overwrite = await askQuestion(rl, 'Do you want to overwrite the existing configuration? (y/N): ');
|
|
60
|
+
if (overwrite.toLowerCase() !== 'y' && overwrite.toLowerCase() !== 'yes') {
|
|
61
|
+
console.log(chalk.yellow('Setup cancelled.'));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
console.log('');
|
|
65
|
+
}
|
|
66
|
+
const currentConfig = readConfig();
|
|
67
|
+
let domain = await askQuestion(rl, `Enter your Canvas domain${currentConfig?.domain ? ` (${currentConfig.domain})` : ''}: `);
|
|
68
|
+
if (!domain && currentConfig?.domain) {
|
|
69
|
+
domain = currentConfig.domain;
|
|
70
|
+
}
|
|
71
|
+
if (!domain) {
|
|
72
|
+
console.log(chalk.red('Canvas domain is required.'));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
domain = domain.replace(/^https?:\/\//, '').replace(/\/$/, '');
|
|
76
|
+
if (!domain.includes('.')) {
|
|
77
|
+
console.log(chalk.red('Invalid domain format. Please enter a valid domain (e.g., school.instructure.com)'));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log(chalk.green(`Domain set to: ${domain}\n`));
|
|
81
|
+
const defaultToken = currentConfig?.token || '';
|
|
82
|
+
let token = await askQuestion(rl, `Enter your Canvas API token${defaultToken ? ' (press Enter to keep current)' : ''}: `);
|
|
83
|
+
if (!token && defaultToken) {
|
|
84
|
+
token = defaultToken;
|
|
85
|
+
}
|
|
86
|
+
if (!token) {
|
|
87
|
+
console.log(chalk.red('Canvas API token is required.'));
|
|
88
|
+
console.log(chalk.cyan('\nTo get your API token:'));
|
|
89
|
+
console.log(chalk.white('1. Log into your Canvas instance'));
|
|
90
|
+
console.log(chalk.white('2. Go to Account → Settings'));
|
|
91
|
+
console.log(chalk.white('3. Scroll down to "Approved Integrations"'));
|
|
92
|
+
console.log(chalk.white('4. Click "+ New Access Token"'));
|
|
93
|
+
console.log(chalk.white('5. Copy the generated token'));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (token.length < 10) {
|
|
97
|
+
console.log(chalk.red('API token seems too short. Please check your token.'));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.log('Token received\n');
|
|
101
|
+
const saved = saveConfig(domain, token);
|
|
102
|
+
if (saved) {
|
|
103
|
+
console.log(chalk.green('Success: Configuration setup completed successfully!'));
|
|
104
|
+
console.log(chalk.cyan('\nNext steps:'));
|
|
105
|
+
console.log(chalk.white(' canvas list # Test your setup by listing courses'));
|
|
106
|
+
console.log(chalk.white(' canvas profile # View your profile'));
|
|
107
|
+
console.log(chalk.white(' canvas config show # View your configuration'));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
112
|
+
console.error(chalk.red('Error: Setup failed: ') + errorMessage);
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
rl.close();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function editConfig() {
|
|
119
|
+
const rl = createReadlineInterface();
|
|
120
|
+
try {
|
|
121
|
+
if (!configExists()) {
|
|
122
|
+
console.log('No configuration file found. Run "canvas config setup" first.');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const config = readConfig();
|
|
126
|
+
if (!config) {
|
|
127
|
+
console.log(chalk.red('Error reading configuration.'));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
131
|
+
console.log(chalk.cyan.bold('Edit Canvas CLI Configuration'));
|
|
132
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
133
|
+
console.log(chalk.cyan('Current values:'));
|
|
134
|
+
console.log(chalk.white(' Domain: ') + config.domain);
|
|
135
|
+
console.log(chalk.white(' Token: ') + (config.token ? config.token.substring(0, 10) + '...' : 'Not set') + '\n');
|
|
136
|
+
const newDomain = await askQuestion(rl, `New Canvas domain (${config.domain}): `);
|
|
137
|
+
const domain = newDomain.trim() || config.domain;
|
|
138
|
+
const changeToken = await askQuestion(rl, 'Change API token? (y/N): ');
|
|
139
|
+
let token = config.token;
|
|
140
|
+
if (changeToken.toLowerCase() === 'y' || changeToken.toLowerCase() === 'yes') {
|
|
141
|
+
const newToken = await askQuestion(rl, 'New API token: ');
|
|
142
|
+
if (newToken.trim()) {
|
|
143
|
+
token = newToken.trim();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
console.log(chalk.cyan('New configuration:'));
|
|
147
|
+
console.log(chalk.white(' Domain: ') + domain);
|
|
148
|
+
console.log(chalk.white(' Token: ') + (token ? token.substring(0, 10) + '...' : 'Not set'));
|
|
149
|
+
const confirm = await askQuestion(rl, '\nSave changes? (Y/n): ');
|
|
150
|
+
if (confirm.toLowerCase() === 'n' || confirm.toLowerCase() === 'no') {
|
|
151
|
+
console.log(chalk.yellow('Changes cancelled.'));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const saved = saveConfig(domain, token);
|
|
155
|
+
if (saved) {
|
|
156
|
+
console.log(chalk.green('Success: Configuration updated successfully!'));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
161
|
+
console.error(chalk.red('Error: Edit failed: ') + errorMessage);
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
rl.close();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export function showConfigPath() {
|
|
168
|
+
console.log(chalk.cyan('Configuration file location: ') + getConfigPath());
|
|
169
|
+
console.log(chalk.white('Exists: ') + (configExists() ? chalk.green('Yes') : chalk.red('No')));
|
|
170
|
+
}
|
|
171
|
+
export function deleteConfigFile() {
|
|
172
|
+
console.log(chalk.cyan.bold('\n' + '-'.repeat(60)));
|
|
173
|
+
console.log(chalk.cyan.bold('Delete Configuration'));
|
|
174
|
+
console.log(chalk.cyan('-'.repeat(60)));
|
|
175
|
+
if (!configExists()) {
|
|
176
|
+
console.log(chalk.yellow('No configuration file found.'));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const config = readConfig();
|
|
180
|
+
console.log(chalk.cyan('Current configuration:'));
|
|
181
|
+
console.log(chalk.white(' Domain: ') + (config?.domain || 'N/A'));
|
|
182
|
+
console.log(chalk.white(' Token: ') + (config?.token ? 'Set (hidden)' : 'Not set'));
|
|
183
|
+
console.log(chalk.white(' File: ') + getConfigPath() + '\n');
|
|
184
|
+
console.log(chalk.red('This will permanently delete your Canvas CLI configuration.'));
|
|
185
|
+
console.log(chalk.yellow('You will need to run "canvas config setup" again to use the CLI.'));
|
|
186
|
+
console.log(chalk.cyan('\nTo confirm deletion, type: DELETE'));
|
|
187
|
+
const rl = readline.createInterface({
|
|
188
|
+
input: process.stdin,
|
|
189
|
+
output: process.stdout
|
|
190
|
+
});
|
|
191
|
+
rl.question('Confirmation: ', (answer) => {
|
|
192
|
+
if (answer === 'DELETE') {
|
|
193
|
+
deleteConfig();
|
|
194
|
+
console.log(chalk.green('Success: Configuration deleted.'));
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
console.log(chalk.yellow('Deletion cancelled.'));
|
|
198
|
+
}
|
|
199
|
+
rl.close();
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grades.d.ts","sourceRoot":"","sources":["../../commands/grades.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkC,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAM3F,wBAAsB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2JlG"}
|