5.0.0-beta.7 • Published 10 months ago

@kth/canvas-api v5.0.0-beta.7

Weekly downloads
203
License
MIT
Repository
github
Last release
10 months ago

Canvas API (for TypeScript and JavaScript)

npm i @kth/canvas-api

Node.JS HTTP client (for both TypeScript and JavaScript) for the Canvas LMS API

Getting Started

First, generate a token by going to «YOUR CANVAS INSTANCE»/profile/settings. For example https://canvas.kth.se/profile/settings. Then you can do something like:

import { CanvasApi } from "@kth/canvas-api";

console.log("Making a GET request to /accounts/1");
const canvas = new CanvasApi(
  "<YOUR CANVAS INSTANCE>/api/v1",
  "<YOUR CANVAS TOKEN>"
);

const { json } = await canvas.get("accounts/1");
console.log(json);

Features

SIS Imports

Use the method .sisImport()

import { CanvasApi } from "@kth/canvas-api";

const canvas = new CanvasApi(
  "<YOUR CANVAS INSTANCE>/api/v1",
  "<YOUR CANVAS TOKEN>"
);

const buffer = await readFile("<FILE PATH>");

// Note: you must give the file name with the correct extension
const file = new File([buffer], "test.csv");

const { json } = await canvas.sisImport(file);
console.log(json);

If you need to pass extra parameters to Canvas, create a FormData object and pass it as body to the request() method:

import { CanvasApi } from "@kth/canvas-api";

const canvas = new CanvasApi(
  "<YOUR CANVAS INSTANCE>/api/v1",
  "<YOUR CANVAS TOKEN>"
);

const buffer = await readFile("<FILE PATH>");
const file = new File([buffer], "test.csv");
const formData = new FormData();
formData.set("attachment", file);
formData.set("key", "value");

const { json } = await canvas.request(
  "accounts/1/sis_import",
  "POST",
  formData
);
console.log(json);

Pagination

Use the method .listPages to automatically traverse pages.

import { CanvasApi } from "@kth/canvas-api";

const canvas = new CanvasApi(
  "<YOUR CANVAS INSTANCE>/api/v1",
  "<YOUR CANVAS TOKEN>"
);

const pages = canvas.listPages("accounts/1/courses");

for await (const { json } of pages) {
  console.log(json);
}

If the page returns a list of items, you can use .listItems to traverse through the items.

Note: the returned iterator does not include response headers

import { CanvasApi } from "@kth/canvas-api";

const canvas = new CanvasApi(
  "<YOUR CANVAS INSTANCE>/api/v1",
  "<YOUR CANVAS TOKEN>"
);

const courses = canvas.listItems("accounts/1/courses");

for await (const course of courses) {
  console.log(course);
}

Type safety

This library parses JSON responses from Canvas and convert them as JavaScript object. If you want to check types in runtime, use a library like Zod:

import { CanvasApi } from "@kth/canvas-api";
import { z } from "zod";

const canvas = new CanvasApi(
  "<YOUR CANVAS INSTANCE>/api/v1",
  "<YOUR CANVAS TOKEN>"
);
const accountSchema = z.object({
  id: z.number(),
  name: z.string(),
  workflow_state: z.string(),
});

const { json } = client.get("accounts/1");
const parsed = accountSchema.parse(json);

Error handling

This library returns instances of CanvasApiError. Check the file src/canvasApiError.ts to see all the error classes that this library throws

5.0.0-beta.6

10 months ago

5.0.0-beta.7

10 months ago

5.0.0-beta.4

11 months ago

5.0.0-beta.5

11 months ago

5.0.0-beta.2

11 months ago

5.0.0-beta.3

11 months ago

5.0.0-beta.0

12 months ago

5.0.0-beta.1

12 months ago

4.2.6

1 year ago

4.2.5

2 years ago

4.2.4

2 years ago

4.2.3

3 years ago

4.2.2

3 years ago

4.1.0

3 years ago

4.2.0

3 years ago

4.0.0-1

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

4.0.2

4 years ago

4.0.0-0

4 years ago

3.3.0-1

4 years ago

3.2.0

4 years ago

3.1.1

4 years ago

3.1.0

4 years ago

3.0.3

4 years ago

3.0.2

4 years ago

3.0.1

4 years ago

3.0.0

4 years ago

2.2.0

4 years ago

2.1.2

5 years ago

2.1.1

5 years ago

2.1.0

6 years ago

2.1.0-beta.2

6 years ago

2.1.0-beta.1

6 years ago

2.0.0

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.2-0

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago