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 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.4] - 2025-12-14
8
+ ## [1.6.6] - 2025-12-15
9
9
 
10
- ### Changed
10
+ - **Update Readme**: Add new command and remove redundant paats
11
11
 
12
- - **Unified table rendering**: All commands (grades, list, assignments) now use the Table class with live resize support
13
- - **Grades command refactored**: Replaced 3 custom tables with Table class for consistent styling
12
+ ## [1.6.5] - 2025-12-15
14
13
 
15
- ### Fixed
14
+ ### Removed (1.6.5)
16
15
 
17
- - **ESLint warnings**: Fixed `no-constant-condition` and `no-control-regex` warnings in interactive.ts
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 # Configure domain and API token
51
- canvas list # List starred courses
52
- canvas list -a # List all enrolled courses
53
- canvas assignments <course> # List assignments for a course
54
- canvas grades # Interactive course selection + detailed grades
55
- canvas grades <course-id> # Show detailed grades for specific course
56
- canvas announcements # Show recent announcements
57
- canvas profile # Show user profile
58
- canvas submit # Interactive assignment submission
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 # Interactive mode
65
- canvas submit -c <courseId> # Specify course
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
- ### Viewing Grades
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
- **Features:**
83
-
84
- - 📊 Interactive course selection with grade summary table
85
- - 📝 Detailed assignment breakdown with scores
86
- - ✓ Color-coded status indicators (graded, pending, not done)
87
- - 📈 Calculated totals based on graded assignments
88
- - 📋 Table-formatted overall grades
89
- - 🔍 Option to view all courses including inactive ones
90
- - 🎯 Visual progress tracking with emojis
91
-
92
- **What you'll see:**
93
-
94
- 1. List of all courses with current/final scores
95
- 2. Select a course to view detailed breakdown
96
- 3. Overall grades (Canvas official + calculated average)
97
- 4. Complete assignment list with individual scores
98
- 5. Points earned vs points possible
99
- 6. Assignment submission status
100
-
101
- ## Command Reference
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
- MIT License - see [LICENSE](LICENSE) for details.
140
+ See [LICENSE](LICENSE) for details.
@@ -0,0 +1,7 @@
1
+ export interface CalendarOptions {
2
+ days?: string;
3
+ all?: boolean;
4
+ past?: boolean;
5
+ }
6
+ export declare function showCalendar(options?: CalendarOptions): Promise<void>;
7
+ //# sourceMappingURL=calendar.d.ts.map
@@ -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;AAkO3B,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAiLf"}
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"}