{"_id":"@avarant/canvas-lms-sdk","_rev":"2-f701b5a98bf690fac3a59fd3de94f66a","name":"@avarant/canvas-lms-sdk","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@avarant/canvas-lms-sdk","version":"0.1.0","keywords":["canvas","canvas-lms","lms","api","sdk","typescript","instructure","education","cloudflare-workers","node"],"author":{"name":"avarant"},"license":"MIT","_id":"@avarant/canvas-lms-sdk@0.1.0","maintainers":[{"name":"avarant","email":"varantarabian@gmail.com"}],"homepage":"https://github.com/avarant/canvas-lms-sdk#readme","bugs":{"url":"https://github.com/avarant/canvas-lms-sdk/issues"},"dist":{"shasum":"cf2d5d85966af6f0a9e912541beb87fc211c83ea","tarball":"https://registry.npmjs.org/@avarant/canvas-lms-sdk/-/canvas-lms-sdk-0.1.0.tgz","fileCount":970,"integrity":"sha512-1reuIUVDb3c88ZyNm1U8quzvFzidH5vpyR0ODZeBSPsGpLd1+52nLTYrUJTj7975UkvXkmWiUNdAcCpJXJIhDQ==","signatures":[{"sig":"MEQCIDGOVZAAFH68xiBFt305U0yv7PArjZ4JCdKGl1SAPzFfAiAremTVCiGuj4m9duYDE1xYq0iFjAqV1mCVUP0880rtIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5189013},"main":"./generated_typescript_sdk/dist/index.js","types":"./generated_typescript_sdk/dist/index.d.ts","module":"./generated_typescript_sdk/dist/esm/index.js","engines":{"node":">=18.0.0"},"gitHead":"882ef7b6219168845c789de25fb750b06292fd0b","scripts":{"docs":"typedoc --out docs/api generated_typescript_sdk/src/index.ts","lint":"cd generated_typescript_sdk && tsc --noEmit","test":"echo \"No tests configured yet\"","build":"cd generated_typescript_sdk && npm run build","clean":"rm -rf generated_typescript_sdk/dist","scrape":"./scripts/scrape-canvas-lms-api-docs.py","codegen":"openapi-generator generate -g typescript-fetch -i docs/canvas-lms-api/swagger/openapi_merged.yaml -o ./generated_typescript_sdk --additional-properties=npmName=canvas-lms-sdk,supportsES6=true,npmVersion=$(node -p \"require('./package.json').version\"),withInterfaces=true,platform=browser","prepare":"echo 'Skipping prepare for CI'","release":"npm version patch && git push && git push --tags","version":"npm run changelog && git add CHANGELOG.md","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","push-tags":"git push && git push --tags","prerelease":"npm version prerelease --preid=beta && git push && git push --tags","merge:specs":"cd docs/canvas-lms-api/swagger && npx openapi-merge-cli","postversion":"npm run push-tags","generate:sdk":"npm run merge:specs && npm run codegen","release:major":"npm version major && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","prepublishOnly":"npm run build","generate:swagger":"./scripts/generate-swagger-docs.py"},"_npmUser":{"name":"avarant","email":"varantarabian@gmail.com"},"repository":{"url":"git+https://github.com/avarant/canvas-lms-sdk.git","type":"git"},"_npmVersion":"11.1.0","description":"Unofficial TypeScript SDK for Canvas LMS API - compatible with Node.js and Cloudflare Workers","directories":{},"_nodeVersion":"23.5.0","dependencies":{"dotenv":"^16.4.5"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typedoc":"^0.25.0","typescript":"^5.0.0","@types/node":"^20.14.0","openapi-merge-cli":"^1.3.0","conventional-changelog-cli":"^4.1.0","@openapitools/openapi-generator-cli":"^2.13.0"},"peerDependencies":{"node-fetch":"^3.0.0"},"peerDependenciesMeta":{"node-fetch":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/canvas-lms-sdk_0.1.0_1756750338093_0.7540166877157333","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@avarant/canvas-lms-sdk","version":"0.1.1","description":"Unofficial TypeScript SDK for Canvas LMS API - compatible with Node.js and Cloudflare Workers","author":{"name":"avarant"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/avarant/canvas-lms-sdk.git"},"homepage":"https://github.com/avarant/canvas-lms-sdk#readme","bugs":{"url":"https://github.com/avarant/canvas-lms-sdk/issues"},"keywords":["canvas","canvas-lms","lms","api","sdk","typescript","instructure","education","cloudflare-workers","node"],"main":"./generated_typescript_sdk/dist/index.js","types":"./generated_typescript_sdk/dist/index.d.ts","module":"./generated_typescript_sdk/dist/esm/index.js","scripts":{"build":"cd generated_typescript_sdk && npm run build","prepare":"echo 'Skipping prepare for CI'","test":"echo \"No tests configured yet\"","lint":"cd generated_typescript_sdk && tsc --noEmit","clean":"rm -rf generated_typescript_sdk/dist","version":"npm run changelog && git add CHANGELOG.md","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","release":"npm version patch && git push && git push --tags","release:minor":"npm version minor && git push && git push --tags","release:major":"npm version major && git push && git push --tags","prerelease":"npm version prerelease --preid=beta && git push && git push --tags","prepublishOnly":"npm run build","postversion":"npm run push-tags","push-tags":"git push && git push --tags","docs":"typedoc --out docs/api generated_typescript_sdk/src/index.ts","scrape":"./scripts/scrape-canvas-lms-api-docs.py","generate:swagger":"./scripts/generate-swagger-docs.py","generate:sdk":"npm run merge:specs && npm run codegen","merge:specs":"cd docs/canvas-lms-api/swagger && npx openapi-merge-cli","codegen":"openapi-generator generate -g typescript-fetch -i docs/canvas-lms-api/swagger/openapi_merged.yaml -o ./generated_typescript_sdk --additional-properties=npmName=canvas-lms-sdk,supportsES6=true,npmVersion=$(node -p \"require('./package.json').version\"),withInterfaces=true,platform=browser"},"dependencies":{"dotenv":"^16.4.5"},"devDependencies":{"@types/node":"^20.14.0","conventional-changelog-cli":"^4.1.0","typedoc":"^0.25.0","typescript":"^5.0.0","@openapitools/openapi-generator-cli":"^2.13.0","openapi-merge-cli":"^1.3.0"},"peerDependencies":{"node-fetch":"^3.0.0"},"peerDependenciesMeta":{"node-fetch":{"optional":true}},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@avarant/canvas-lms-sdk@0.1.1","gitHead":"f0c5b8a5ff0d2abc893b04ef2b1ec138ce6707a9","_nodeVersion":"20.19.4","_npmVersion":"10.8.2","dist":{"integrity":"sha512-k89xgQ25mL6vLMikyZKD+dAAecy4tCMXWTatZm+wfTinINpwwW1URvvDopk3+CRE5ywbZHsICZ0z+Np4O9LWAg==","shasum":"9dddc8bfdc578b868a2365acc168bfa10cfc2682","tarball":"https://registry.npmjs.org/@avarant/canvas-lms-sdk/-/canvas-lms-sdk-0.1.1.tgz","fileCount":969,"unpackedSize":5180223,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEEU1ZBcC09AHtuzFQDhxFNeEvG1Aj85P8WUDXMqc+t8AiEArfrb6PZu9WelTAkQ3UVNGLL5n1gIOywec/36Hp41y9E="}]},"_npmUser":{"name":"avarant","email":"varantarabian@gmail.com"},"directories":{},"maintainers":[{"name":"avarant","email":"varantarabian@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/canvas-lms-sdk_0.1.1_1756751442716_0.000660824516514058"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-01T18:12:18.027Z","modified":"2025-09-01T18:30:43.220Z","0.1.0":"2025-09-01T18:12:18.314Z","0.1.1":"2025-09-01T18:30:43.024Z"},"bugs":{"url":"https://github.com/avarant/canvas-lms-sdk/issues"},"author":{"name":"avarant"},"license":"MIT","homepage":"https://github.com/avarant/canvas-lms-sdk#readme","keywords":["canvas","canvas-lms","lms","api","sdk","typescript","instructure","education","cloudflare-workers","node"],"repository":{"type":"git","url":"git+https://github.com/avarant/canvas-lms-sdk.git"},"description":"Unofficial TypeScript SDK for Canvas LMS API - compatible with Node.js and Cloudflare Workers","maintainers":[{"name":"avarant","email":"varantarabian@gmail.com"}],"readme":"# Unofficial TypeScript SDK for Canvas LMS\n\n[![npm version](https://img.shields.io/npm/v/canvas-lms-sdk.svg)](https://www.npmjs.com/package/canvas-lms-sdk)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-green)](https://avarant.github.io/canvas-lms-sdk/)\n\nA fully-typed TypeScript SDK for the Canvas LMS API, compatible with Node.js and Cloudflare Workers.\n\n## Features\n\n- 🚀 **Full TypeScript Support** - Complete type definitions for all API endpoints and models\n- 🔧 **Auto-generated** - Built from official Canvas LMS API documentation\n- 🌐 **Universal Compatibility** - Works in Node.js, browsers, and Cloudflare Workers\n- 📚 **Comprehensive Coverage** - Supports all major Canvas LMS API endpoints\n- ⚡ **Fetch-based** - Uses modern Fetch API for maximum compatibility\n\n## Installation\n\n```bash\nnpm install canvas-lms-sdk\n# or\nyarn add canvas-lms-sdk\n# or\npnpm add canvas-lms-sdk\n```\n\n## Quick Start\n\n### Basic Setup\n\n```typescript\nimport { Configuration, CoursesApi } from 'canvas-lms-sdk';\n\n// Configure the SDK\nconst config = new Configuration({\n    basePath: 'https://your-canvas-instance.instructure.com',\n    headers: {\n        'Authorization': `Bearer ${YOUR_API_TOKEN}`\n    }\n});\n\n// Create an API instance\nconst coursesApi = new CoursesApi(config);\n\n// Make API calls\nconst courses = await coursesApi.listCoursesForUser({\n    userId: 'self',\n    enrollmentState: 'active'\n});\n```\n\n## Usage Examples\n\n### List Active Courses\n\n```typescript\nimport { Configuration, CoursesApi } from 'canvas-lms-sdk';\n\nasync function listActiveCourses() {\n    const config = new Configuration({\n        basePath: process.env.CANVAS_HOST,\n        headers: {\n            'Authorization': `Bearer ${process.env.CANVAS_TOKEN}`\n        }\n    });\n\n    const coursesApi = new CoursesApi(config);\n    \n    try {\n        const courses = await coursesApi.listCoursesForUser({\n            userId: 'self',\n            enrollmentState: 'active'\n        });\n        \n        console.log('Active Courses:');\n        courses.forEach(course => {\n            console.log(`- ${course.name} (ID: ${course.id})`);\n        });\n    } catch (error) {\n        console.error('Error fetching courses:', error);\n    }\n}\n```\n\n### Get Assignment Due Dates\n\n```typescript\nimport { Configuration, AssignmentsApi } from 'canvas-lms-sdk';\n\nasync function getUpcomingAssignments(courseId: number) {\n    const config = new Configuration({\n        basePath: process.env.CANVAS_HOST,\n        headers: {\n            'Authorization': `Bearer ${process.env.CANVAS_TOKEN}`\n        }\n    });\n\n    const assignmentsApi = new AssignmentsApi(config);\n    \n    const assignments = await assignmentsApi.listAssignmentsForCourse({\n        courseId,\n        orderBy: 'due_at',\n        buckets: ['upcoming']\n    });\n    \n    return assignments.filter(a => a.dueAt && new Date(a.dueAt) > new Date());\n}\n```\n\n### Get Canvas Page Content\n\n```typescript\nimport { Configuration, PagesApi } from 'canvas-lms-sdk';\n\nasync function getCanvasPage(courseId: number, pageUrl: string) {\n    const config = new Configuration({\n        basePath: process.env.CANVAS_HOST,\n        headers: {\n            'Authorization': `Bearer ${process.env.CANVAS_TOKEN}`\n        }\n    });\n\n    const pagesApi = new PagesApi(config);\n    \n    const page = await pagesApi.apiV1CoursesCourseIdPagesUrlOrIdGet({\n        courseId,\n        urlOrId: pageUrl\n    });\n    \n    console.log(`Page Title: ${page.title}`);\n    console.log(`Content: ${page.body}`);\n    return page;\n}\n```\n\n### Submit an Assignment\n\n```typescript\nimport { Configuration, SubmissionsApi } from 'canvas-lms-sdk';\n\nasync function submitAssignment(courseId: number, assignmentId: number, body: string) {\n    const config = new Configuration({\n        basePath: process.env.CANVAS_HOST,\n        headers: {\n            'Authorization': `Bearer ${process.env.CANVAS_TOKEN}`\n        }\n    });\n\n    const submissionsApi = new SubmissionsApi(config);\n    \n    const submission = await submissionsApi.submitAssignment({\n        courseId,\n        assignmentId,\n        submissionType: 'online_text_entry',\n        submissionBody: body\n    });\n    \n    return submission;\n}\n```\n\n## Cloudflare Workers Example\n\n```typescript\nimport { Configuration, CoursesApi, AssignmentsApi } from 'canvas-lms-sdk';\n\nexport default {\n    async fetch(request: Request, env: Env): Promise<Response> {\n        const url = new URL(request.url);\n        \n        const config = new Configuration({\n            basePath: env.CANVAS_HOST,\n            headers: {\n                'Authorization': `Bearer ${env.CANVAS_TOKEN}`\n            }\n        });\n\n        if (url.pathname === '/api/courses') {\n            const coursesApi = new CoursesApi(config);\n            const courses = await coursesApi.listCoursesForUser({\n                userId: 'self',\n                enrollmentState: 'active'\n            });\n            return Response.json(courses);\n        }\n        \n        if (url.pathname.startsWith('/api/assignments/')) {\n            const courseId = parseInt(url.pathname.split('/')[3]);\n            const assignmentsApi = new AssignmentsApi(config);\n            const assignments = await assignmentsApi.listAssignmentsForCourse({\n                courseId,\n                orderBy: 'due_at'\n            });\n            return Response.json(assignments);\n        }\n        \n        return new Response('Not Found', { status: 404 });\n    }\n}\n```\n\n## Available APIs\n\nThe SDK provides the following API classes:\n\n- **CoursesApi** - Course management and information\n- **AssignmentsApi** - Assignment operations\n- **SubmissionsApi** - Assignment submissions\n- **UsersApi** - User management\n- **EnrollmentsApi** - Course enrollments\n- **GradesApi** - Gradebook operations\n- **PagesApi** - Wiki pages\n- **ModulesApi** - Course modules\n- **FilesApi** - File uploads and management\n- **QuizzesApi** - Quiz operations\n- **DiscussionTopicsApi** - Discussion forums\n- **AnnouncementsApi** - Course announcements\n- **CalendarEventsApi** - Calendar and scheduling\n- **ConversationsApi** - Messaging system\n- **GroupsApi** - Group management\n- **SectionsApi** - Course sections\n- **RubricsApi** - Rubric management\n- **OutcomesApi** - Learning outcomes\n\nAnd many more! See the [full API documentation](https://avarant.github.io/canvas-lms-sdk/) for complete details.\n\n## Environment Setup\n\nCreate a `.env` file in your project root:\n\n```env\nCANVAS_HOST=https://your-canvas-instance.instructure.com\nCANVAS_TOKEN=your_api_token_here\n```\n\n### Getting an API Token\n\n1. Log into your Canvas instance\n2. Go to Account → Settings\n3. Click \"+ New Access Token\"\n4. Enter a purpose and expiration (optional)\n5. Copy the generated token\n\n## TypeScript Configuration\n\nThe SDK is built with TypeScript and includes full type definitions. For best results, use these TypeScript settings:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"module\": \"commonjs\",\n    \"lib\": [\"ES2020\"],\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true\n  }\n}\n```\n\n## Error Handling\n\nThe SDK throws errors for failed API calls. Always wrap API calls in try-catch blocks:\n\n```typescript\ntry {\n    const courses = await coursesApi.listCoursesForUser({\n        userId: 'self'\n    });\n} catch (error) {\n    if (error.response) {\n        // API returned an error response\n        console.error('Status:', error.response.status);\n        const errorBody = await error.response.text();\n        console.error('Error:', errorBody);\n    } else {\n        // Network or other error\n        console.error('Error:', error.message);\n    }\n}\n```\n\n## Pagination\n\nMany Canvas APIs return paginated results. The SDK handles this automatically:\n\n```typescript\n// The SDK automatically follows pagination links\nconst allAssignments = await assignmentsApi.listAssignmentsForCourse({\n    courseId: 123,\n    perPage: 100  // Adjust page size (max 100)\n});\n```\n\n## Development\n\nFor information on contributing to the SDK or regenerating from updated Canvas API documentation, see [Development Documentation](docs/DEVELOPMENT.md).\n\n## API Documentation\n\nComplete API documentation is available at: [https://avarant.github.io/canvas-lms-sdk/](https://avarant.github.io/canvas-lms-sdk/)\n\nThis includes:\n- Detailed endpoint descriptions\n- Request/response models\n- Parameter specifications\n- Example requests\n\n## Examples\n\nThe `examples/` directory contains runnable examples:\n\n```bash\ncd examples\nnpm install\n\n# List active courses\nnpx ts-node list_active_courses.ts\n\n# Get assignment due dates\nnpx ts-node fetch_assignment_due_dates.ts 123  # Replace with course ID\n\n# Get a Canvas page\nnpx ts-node get_canvas_page.ts 123 \"page-url\"  # Course ID and page URL\n```\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/avarant/canvas-lms-sdk/issues)\n- **Canvas API Docs**: [Canvas LMS REST API Documentation](https://canvas.instructure.com/doc/api/)\n- **SDK Documentation**: [API Reference](https://avarant.github.io/canvas-lms-sdk/)\n\n## License\n\nMIT - See [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\nThis SDK is auto-generated from the official Canvas LMS API documentation. Canvas LMS is a product of Instructure, Inc.\n","readmeFilename":"README.md"}