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
*App
C*omplete
*Connection
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);