Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

caccl-grade-passback

harvard-edtech493MIT2.3.3TypeScript support: included

Sends LTI 1.1 grade passback to Canvas. Support text and url submissions and overall score.

CACCL, Grade, Passback, Text, URL, Outcomes, LTI

readme

caccl-grade-passback

Sends LTI 1.1 grade passback to Canvas. Support text and url submissions and overall score.

Part of the CACCL library

C*anvas
*
A
pp
C*omplete
*
C
onnection
Library

Usage

To send pass grades back to Canvas, import this module and call it with three objects: request, info, and credentials (see below for descriptions of each).

import sendPassback from 'caccl-grade-passback';

await sendPassback({
    request,
    info,
    credentials,
});

Arguments

request

The request object contains all of the grade information to send to Canvas.

Including a Grade:

Either add the total score by including request.score:

// Give the student 15 out of 20 points (that's 75%)
const request = {
  score: 15,
  ...
};

...or add the percentage of the possible points by including request.percent:

// Give the student 15 out of 20 points (that's 75%)
const request = {
  percent: 75,
  ...
};

Including a Submission:

Only two types of submissions are supported: text submissions and url submissions.

To add a text submission, include request.text:

const request = {
  ...
  text: 'Body of the student submission',
  ...
};

To add a url submission, include request.url:

const request = {
  ...
  url: 'https://url.of/student/submission',
  ...
};

Including a "Submitted At" Timestamp:

To add a submission timestamp, include request.submittedAt:

const request = {
  ...
  submittedAt: /* ISO 8601 String OR Date object */,
  ...
};

info

The info object contains all of the relevant LTI parameters that were passed through in the original LTI launch request:

const info = {
    sourcedId: /* The LTI sourcedid, usually "lis_result_sourcedid" in the original LTI launch request */,
    url: /* The LTI outcome url, usually "lis_outcome_service_url" in the original LTI launch request */,
};

credentials

The credentials object contains the app's consumer credentials:

const credentials = {
    consumerKey: /* The app's consumer key */,
    consumerSecret: /* The app's shared secret */,
};

Full Example

Sending a passback of 78 points with a "Hello World" text submission. In this example, we have invented a launchBody object that contains the body of the original LTI launch request and we created a secureFile object that has getKey and getSecret functions that return the app's consumer key and consumer secret, respectively.

import sendPassback from 'caccl-grade-passback';

const request = {
    score: 78,
    text: 'Hello World',
};

const info = {
    sourcedId: launchBody.lis_result_sourcedid,
    url: launchBody.lis_outcome_service_url,
};

const credentials = {
    consumerKey: secureFile.getKey(),
    consumerSecret: secureFile.getSecret(),
};

await sendPassback(request, info, credentials);

changelog

Changelog

All notable changes to this project will be documented in this file.

1.0.2

Added special encoding of newlines so that Canvas recognizes them.