canvaslms-cli 1.6.4 → 1.6.6
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 +25 -6
- package/README.md +73 -64
- package/dist/commands/calendar.d.ts +7 -0
- package/dist/commands/calendar.d.ts.map +1 -0
- package/dist/commands/calendar.js +150 -0
- package/dist/commands/calendar.js.map +1 -0
- package/dist/commands/grades.d.ts.map +1 -1
- package/dist/commands/grades.js +274 -109
- package/dist/commands/grades.js.map +1 -1
- package/dist/commands/list.js +2 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/modules.d.ts +5 -0
- package/dist/commands/modules.d.ts.map +1 -0
- package/dist/commands/modules.js +263 -0
- package/dist/commands/modules.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/display.d.ts +1 -1
- package/dist/lib/display.d.ts.map +1 -1
- package/dist/lib/display.js +16 -12
- package/dist/lib/display.js.map +1 -1
- package/dist/lib/interactive.d.ts +0 -3
- package/dist/lib/interactive.d.ts.map +1 -1
- package/dist/lib/interactive.js +4 -284
- package/dist/lib/interactive.js.map +1 -1
- package/dist/src/index.js +22 -1
- package/dist/src/index.js.map +1 -1
- package/dist/types/index.d.ts +33 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,16 +5,35 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [1.6.
|
|
8
|
+
## [1.6.6] - 2025-12-15
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
- **Update Readme**: Add new command and remove redundant paats
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- **Grades command refactored**: Replaced 3 custom tables with Table class for consistent styling
|
|
12
|
+
## [1.6.5] - 2025-12-15
|
|
14
13
|
|
|
15
|
-
###
|
|
14
|
+
### Removed (1.6.5)
|
|
16
15
|
|
|
17
|
-
- **
|
|
16
|
+
- **Unused Command File**: Deleted `api.ts` - Raw API command handler that was never imported or used in the CLI
|
|
17
|
+
- **Unused Functions from interactive.ts**: `getSubfoldersRecursive()`, `getFilesMatchingWildcard()`, `selectFilesImproved()`
|
|
18
|
+
- **Unused Dependencies**: Removed `adm-zip` and `@types/adm-zip` packages
|
|
19
|
+
|
|
20
|
+
## [1.6.4-fix] - 2025-12-15
|
|
21
|
+
|
|
22
|
+
### Fix (1.6.4)
|
|
23
|
+
|
|
24
|
+
- **Remove Postinstall Command**: Change to prepare husky
|
|
25
|
+
|
|
26
|
+
## [1.6.4] - 2025-12-15
|
|
27
|
+
|
|
28
|
+
### Added (1.6.4)
|
|
29
|
+
|
|
30
|
+
- **Modules Command**: New `modules` command to view course modules and their items with progress tracking
|
|
31
|
+
- **Calendar Command**: New `calendar` command to view upcoming assignments and events with due dates
|
|
32
|
+
|
|
33
|
+
### Changed (1.6.4)
|
|
34
|
+
|
|
35
|
+
- **Course Arguments**: Replaced course ID arguments with course name arguments across all commands (assignments, grades, announcements) for easier usage
|
|
36
|
+
- **Workflow Name**: Changed CI workflow name from "CI" to "Test & Build" for better clarity
|
|
18
37
|
|
|
19
38
|
## [1.6.3] - 2025-12-14
|
|
20
39
|
|
package/README.md
CHANGED
|
@@ -6,9 +6,12 @@ A modern, user-friendly command-line interface for Canvas LMS. Manage courses, a
|
|
|
6
6
|
|
|
7
7
|
- List and filter enrolled/starred courses
|
|
8
8
|
- View assignments, grades, and submission status
|
|
9
|
-
- Interactive file upload for assignments
|
|
9
|
+
- Interactive file upload for assignments with visual file browser
|
|
10
|
+
- View upcoming due dates and calendar events
|
|
11
|
+
- Browse course modules and content
|
|
10
12
|
- View course announcements
|
|
11
13
|
- Display user profile information
|
|
14
|
+
- Modern table displays with adaptive column widths
|
|
12
15
|
- Direct access to Canvas API endpoints
|
|
13
16
|
|
|
14
17
|
## Installation
|
|
@@ -47,85 +50,91 @@ npm install -g canvaslms-cli
|
|
|
47
50
|
### Common Commands
|
|
48
51
|
|
|
49
52
|
```bash
|
|
50
|
-
canvas config
|
|
51
|
-
canvas list
|
|
52
|
-
canvas list -a
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
canvas
|
|
56
|
-
canvas
|
|
57
|
-
canvas
|
|
58
|
-
canvas
|
|
53
|
+
canvas config # Configure domain and API token
|
|
54
|
+
canvas list # List starred courses
|
|
55
|
+
canvas list -a # List all enrolled courses
|
|
56
|
+
|
|
57
|
+
# Assignments (supports course name instead of ID)
|
|
58
|
+
canvas assignments # Interactive course selection
|
|
59
|
+
canvas assignments "math" # List assignments for course matching "math"
|
|
60
|
+
canvas assignments -s # Show only submitted assignments
|
|
61
|
+
canvas assignments -p # Show only pending assignments
|
|
62
|
+
|
|
63
|
+
# Grades (supports course name instead of ID)
|
|
64
|
+
canvas grades # Interactive course selection + detailed grades
|
|
65
|
+
canvas grades "database" # Show detailed grades for course matching "database"
|
|
66
|
+
canvas grades -a # Include inactive/completed courses
|
|
67
|
+
canvas grades -v # Include verbose enrollment details
|
|
68
|
+
|
|
69
|
+
# Announcements (supports course name instead of ID)
|
|
70
|
+
canvas announcements # Interactive course selection
|
|
71
|
+
canvas announcements "software" # Show announcements for course matching "software"
|
|
72
|
+
canvas announcements -l 10 # Show last 10 announcements
|
|
73
|
+
|
|
74
|
+
# Calendar & Due Dates
|
|
75
|
+
canvas calendar # View upcoming due dates (next 14 days)
|
|
76
|
+
canvas calendar -d 30 # View due dates for next 30 days
|
|
77
|
+
canvas calendar -p # Include past due items (last 7 days)
|
|
78
|
+
canvas calendar -a # Include all courses (not just starred)
|
|
79
|
+
|
|
80
|
+
# Modules
|
|
81
|
+
canvas modules # Interactive course selection
|
|
82
|
+
canvas modules "algorithms" # Browse modules for course matching "algorithms"
|
|
83
|
+
|
|
84
|
+
# Submission
|
|
85
|
+
canvas submit # Interactive assignment submission
|
|
86
|
+
canvas submit "tools" # Submit to course matching "tools"
|
|
87
|
+
canvas submit -f file.pdf # Submit specific file
|
|
88
|
+
canvas submit --dry-run # Test submission without uploading
|
|
89
|
+
|
|
90
|
+
# Profile
|
|
91
|
+
canvas profile # Show user profile
|
|
92
|
+
canvas profile -v # Show all profile fields
|
|
59
93
|
```
|
|
60
94
|
|
|
61
95
|
### Assignment Submission
|
|
62
96
|
|
|
97
|
+
The submit command provides an interactive file selection experience with a visual file browser:
|
|
98
|
+
|
|
63
99
|
```bash
|
|
64
|
-
canvas submit #
|
|
65
|
-
canvas submit
|
|
66
|
-
canvas submit -a <assignmentId> # Specify assignment
|
|
100
|
+
canvas submit # Full interactive mode
|
|
101
|
+
canvas submit "course name" # Specify course by name
|
|
67
102
|
canvas submit -f <file> # Submit specific file
|
|
103
|
+
canvas submit --dry-run # Test submission flow without uploading
|
|
104
|
+
canvas submit -a # Show all courses (not just starred)
|
|
68
105
|
```
|
|
69
106
|
|
|
70
|
-
###
|
|
71
|
-
|
|
72
|
-
The grades command provides an enhanced, interactive experience:
|
|
107
|
+
### Course Grades
|
|
73
108
|
|
|
74
109
|
```bash
|
|
75
110
|
canvas grades # Interactive course selection (active courses)
|
|
111
|
+
canvas grades "software" # View grades for course matching "software"
|
|
76
112
|
canvas grades --all # Include inactive/completed courses
|
|
77
|
-
canvas grades <course-id> # Direct course grade view
|
|
78
113
|
canvas grades --verbose # Include enrollment details
|
|
79
114
|
canvas grades -a -v # All courses with verbose details
|
|
80
115
|
```
|
|
81
116
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
| Command | Alias | Description |
|
|
104
|
-
| --------------- | ---------- | ----------------------- |
|
|
105
|
-
| `list` | `l` | List courses |
|
|
106
|
-
| `assignments` | `assign` | List assignments |
|
|
107
|
-
| `submit` | `sub` | Submit assignment files |
|
|
108
|
-
| `grades` | `grade` | Show grades |
|
|
109
|
-
| `announcements` | `announce` | Show announcements |
|
|
110
|
-
| `profile` | `me` | Show user profile |
|
|
111
|
-
| `config` | - | Show configuration |
|
|
112
|
-
|
|
113
|
-
## Requirements
|
|
114
|
-
|
|
115
|
-
- Node.js >= 14.x
|
|
116
|
-
- npm >= 6.x
|
|
117
|
-
- Valid Canvas LMS API token
|
|
118
|
-
|
|
119
|
-
## Contributing
|
|
120
|
-
|
|
121
|
-
1. Fork the repository
|
|
122
|
-
2. Create a feature branch: `git checkout -b feature-name`
|
|
123
|
-
3. Make your changes
|
|
124
|
-
4. Run tests: `npm test`
|
|
125
|
-
5. Commit: `git commit -am 'Add feature'`
|
|
126
|
-
6. Push: `git push origin feature-name`
|
|
127
|
-
7. Submit a pull request
|
|
117
|
+
### Calendar & Due Dates
|
|
118
|
+
|
|
119
|
+
View upcoming assignments and events across all your courses:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
canvas calendar # Next 14 days (default)
|
|
123
|
+
canvas calendar -d 30 # Next 30 days
|
|
124
|
+
canvas calendar -p # Include past due (last 7 days)
|
|
125
|
+
canvas calendar -a # Include all courses
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Course Modules
|
|
129
|
+
|
|
130
|
+
Browse and explore course content and modules:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
canvas modules # Interactive course selection
|
|
134
|
+
canvas modules "database" # Browse modules for specific course
|
|
135
|
+
canvas modules -a # Show all courses
|
|
136
|
+
```
|
|
128
137
|
|
|
129
138
|
## License
|
|
130
139
|
|
|
131
|
-
|
|
140
|
+
See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../commands/calendar.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8CD,wBAAsB,YAAY,CAChC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+If"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { makeCanvasRequest } from "../lib/api-client.js";
|
|
2
|
+
import { Table, printInfo, printError, printSuccess } from "../lib/display.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
function formatTimeRemaining(dueDate) {
|
|
5
|
+
const now = new Date();
|
|
6
|
+
const diff = dueDate.getTime() - now.getTime();
|
|
7
|
+
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
8
|
+
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
9
|
+
if (diff < 0) {
|
|
10
|
+
const pastDays = Math.abs(days);
|
|
11
|
+
if (pastDays === 0)
|
|
12
|
+
return { text: "Today", color: chalk.red };
|
|
13
|
+
if (pastDays === 1)
|
|
14
|
+
return { text: "1d ago", color: chalk.red };
|
|
15
|
+
return { text: `${pastDays}d ago`, color: chalk.red };
|
|
16
|
+
}
|
|
17
|
+
if (days === 0) {
|
|
18
|
+
if (hours <= 1)
|
|
19
|
+
return { text: "< 1 hour", color: chalk.red };
|
|
20
|
+
return { text: `${hours} hours`, color: chalk.red };
|
|
21
|
+
}
|
|
22
|
+
if (days === 1)
|
|
23
|
+
return { text: "Tomorrow", color: chalk.yellow };
|
|
24
|
+
if (days <= 3)
|
|
25
|
+
return { text: `${days} days`, color: chalk.yellow };
|
|
26
|
+
if (days <= 7)
|
|
27
|
+
return { text: `${days} days`, color: chalk.cyan };
|
|
28
|
+
return { text: `${days} days`, color: chalk.green };
|
|
29
|
+
}
|
|
30
|
+
function formatDueDate(date) {
|
|
31
|
+
const month = (date.getMonth() + 1).toString().padStart(2, "0");
|
|
32
|
+
const day = date.getDate().toString().padStart(2, "0");
|
|
33
|
+
const hours = date.getHours().toString().padStart(2, "0");
|
|
34
|
+
const mins = date.getMinutes().toString().padStart(2, "0");
|
|
35
|
+
return `${month}/${day} ${hours}:${mins}`;
|
|
36
|
+
}
|
|
37
|
+
export async function showCalendar(options = {}) {
|
|
38
|
+
try {
|
|
39
|
+
const days = parseInt(options.days || "14", 10);
|
|
40
|
+
const showPast = options.past || false;
|
|
41
|
+
printInfo("\n" + "-".repeat(60));
|
|
42
|
+
printInfo("Loading upcoming due dates...");
|
|
43
|
+
const queryParams = ["enrollment_state=active", "include[]=favorites"];
|
|
44
|
+
const courses = await makeCanvasRequest("get", "courses", queryParams);
|
|
45
|
+
if (!courses || courses.length === 0) {
|
|
46
|
+
printError("No courses found.");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
let targetCourses = courses;
|
|
50
|
+
if (!options.all) {
|
|
51
|
+
const starred = courses.filter((c) => c.is_favorite);
|
|
52
|
+
if (starred.length > 0) {
|
|
53
|
+
targetCourses = starred;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const now = new Date();
|
|
57
|
+
const futureDate = new Date(now.getTime() + days * 24 * 60 * 60 * 1000);
|
|
58
|
+
const pastDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
59
|
+
const assignmentPromises = targetCourses.map(async (course) => {
|
|
60
|
+
try {
|
|
61
|
+
const assignments = await makeCanvasRequest("get", `courses/${course.id}/assignments`, ["include[]=submission", "per_page=100"]);
|
|
62
|
+
return { course, assignments: assignments || [] };
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return { course, assignments: [] };
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
const results = await Promise.all(assignmentPromises);
|
|
69
|
+
const dueItems = [];
|
|
70
|
+
for (const { course, assignments } of results) {
|
|
71
|
+
for (const assignment of assignments) {
|
|
72
|
+
if (!assignment.due_at)
|
|
73
|
+
continue;
|
|
74
|
+
const dueAt = new Date(assignment.due_at);
|
|
75
|
+
const submission = assignment.submission;
|
|
76
|
+
const isSubmitted = !!(submission && submission.submitted_at);
|
|
77
|
+
if (showPast) {
|
|
78
|
+
if (dueAt < pastDate || dueAt > futureDate)
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
if (dueAt < now || dueAt > futureDate)
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
dueItems.push({
|
|
86
|
+
courseName: course.name,
|
|
87
|
+
courseId: course.id,
|
|
88
|
+
assignmentName: assignment.name,
|
|
89
|
+
assignmentId: assignment.id,
|
|
90
|
+
dueAt,
|
|
91
|
+
submitted: isSubmitted,
|
|
92
|
+
pointsPossible: assignment.points_possible || 0,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
dueItems.sort((a, b) => a.dueAt.getTime() - b.dueAt.getTime());
|
|
97
|
+
if (dueItems.length === 0) {
|
|
98
|
+
console.log(chalk.yellow(`\nNo upcoming assignments due in the next ${days} days.`));
|
|
99
|
+
if (!options.all) {
|
|
100
|
+
console.log(chalk.gray("Tip: Use --all to include all courses."));
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const courseLabel = options.all ? "all courses" : "starred courses";
|
|
105
|
+
console.log(chalk.cyan.bold(`\nUpcoming Due Dates (${courseLabel}, next ${days} days)`));
|
|
106
|
+
printSuccess(`Found ${dueItems.length} upcoming assignment(s).`);
|
|
107
|
+
const table = new Table([
|
|
108
|
+
{ key: "course", header: "Course", flex: 1, minWidth: 10 },
|
|
109
|
+
{ key: "assignment", header: "Assignment", flex: 1, minWidth: 15 },
|
|
110
|
+
{ key: "due", header: "Due", width: 12 },
|
|
111
|
+
{
|
|
112
|
+
key: "remaining",
|
|
113
|
+
header: "Remaining",
|
|
114
|
+
width: 10,
|
|
115
|
+
color: (value, row) => {
|
|
116
|
+
const colorFn = row._remainingColor;
|
|
117
|
+
return colorFn ? colorFn(value) : chalk.white(value);
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
key: "status",
|
|
122
|
+
header: "Status",
|
|
123
|
+
width: 8,
|
|
124
|
+
color: (value, row) => row._submitted ? chalk.green(value) : chalk.yellow(value),
|
|
125
|
+
},
|
|
126
|
+
], { showRowNumbers: true });
|
|
127
|
+
for (const item of dueItems) {
|
|
128
|
+
const remaining = formatTimeRemaining(item.dueAt);
|
|
129
|
+
table.addRow({
|
|
130
|
+
course: item.courseName,
|
|
131
|
+
assignment: item.assignmentName,
|
|
132
|
+
due: formatDueDate(item.dueAt),
|
|
133
|
+
remaining: remaining.text,
|
|
134
|
+
status: item.submitted ? "Done" : "Pending",
|
|
135
|
+
_submitted: item.submitted,
|
|
136
|
+
_remainingColor: remaining.color,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
table.renderWithResize();
|
|
140
|
+
const pending = dueItems.filter((d) => !d.submitted).length;
|
|
141
|
+
const done = dueItems.filter((d) => d.submitted).length;
|
|
142
|
+
console.log(chalk.gray(`\n ${pending} pending, ${done} submitted`));
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
146
|
+
console.error(chalk.red("Error fetching calendar:"), errorMessage);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../commands/calendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grades.d.ts","sourceRoot":"","sources":["../../commands/grades.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"grades.d.ts","sourceRoot":"","sources":["../../commands/grades.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAiZ3B,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmSf"}
|