@lti-tool/core 0.14.0 → 0.14.1

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
@@ -1,5 +1,11 @@
1
1
  # @lti-tool/core
2
2
 
3
+ ## 0.14.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 25534f8: Fix score and results endpoint to use a cleansed ags line item endpoint without search params.
8
+
3
9
  ## 0.14.0
4
10
 
5
11
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"ags.service.d.ts","sourceRoot":"","sources":["../../src/services/ags.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAGtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;GAKG;AACH,qBAAa,UAAU;IASnB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IAVhB;;;;;;OAMG;gBAEO,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,UAAU;IAG5B;;;;;;;;;;;;;;;;;;OAkBG;IACG,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiCjF;;;;;;;;;;;;;OAaG;IACG,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4BvD;;;;;;;;;;;;;OAaG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsB3D;;;;;;;;;;;;;OAaG;IACG,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBzD;;;;;;;;;;;;;;;;;;;OAmBG;IACG,cAAc,CAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,QAAQ,CAAC;IAuBpB;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,QAAQ,CAAC;IAuBpB;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;YAqB9C,WAAW;YAeX,mBAAmB;CAalC"}
1
+ {"version":3,"file":"ags.service.d.ts","sourceRoot":"","sources":["../../src/services/ags.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAGtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;GAKG;AACH,qBAAa,UAAU;IASnB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IAVhB;;;;;;OAMG;gBAEO,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,UAAU;IAG5B;;;;;;;;;;;;;;;;;;OAkBG;IACG,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkCjF;;;;;;;;;;;;;OAaG;IACG,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwBvD;;;;;;;;;;;;;OAaG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsB3D;;;;;;;;;;;;;OAaG;IACG,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBzD;;;;;;;;;;;;;;;;;;;OAmBG;IACG,cAAc,CAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,QAAQ,CAAC;IAuBpB;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,QAAQ,CAAC;IAuBpB;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;YAqB9C,WAAW;YAeX,mBAAmB;CAalC"}
@@ -54,7 +54,8 @@ export class AGSService {
54
54
  activityProgress: score.activityProgress,
55
55
  gradingProgress: score.gradingProgress,
56
56
  };
57
- const response = await fetch(`${session.services.ags.lineitem}/scores`, {
57
+ const agsScoreEndpoint = `${session.services.ags.lineitem}/scores`;
58
+ const response = await fetch(agsScoreEndpoint, {
58
59
  method: 'POST',
59
60
  headers: {
60
61
  Authorization: `Bearer ${token}`,
@@ -84,12 +85,8 @@ export class AGSService {
84
85
  throw new Error('AGS line item not available for this session');
85
86
  }
86
87
  const token = await this.getAGSToken(session, 'https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly');
87
- // cleanse the results URL
88
- // we cannot include a search / query param
89
- const lineItemUrl = new URL(session.services.ags.lineitem);
90
- lineItemUrl.search = '';
91
- const resultsUrl = `${lineItemUrl.toString()}/results`;
92
- const response = await fetch(resultsUrl, {
88
+ const resultsEndpoint = `${session.services.ags.lineitem}/results`;
89
+ const response = await fetch(resultsEndpoint, {
93
90
  method: 'GET',
94
91
  headers: {
95
92
  Authorization: `Bearer ${token}`,
@@ -1 +1 @@
1
- {"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../src/services/session.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AAEH,wBAAgB,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG,UAAU,CAuG1E"}
1
+ {"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../src/services/session.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AAEH,wBAAgB,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG,UAAU,CA4G1E"}
@@ -20,9 +20,14 @@ export function createSession(lti13JwtPayload) {
20
20
  const isAdmin = roles.some((role) => role.includes('Administrator'));
21
21
  const services = {};
22
22
  if (agsEndpoint) {
23
+ let lineItemUrl;
24
+ if (agsEndpoint.lineitem) {
25
+ const url = new URL(agsEndpoint.lineitem);
26
+ lineItemUrl = `${url.origin}${url.pathname}`; // quirk: moodle adds a url search param
27
+ }
23
28
  services.ags = {
24
- lineitem: agsEndpoint.lineitem,
25
- lineitems: agsEndpoint.lineitems,
29
+ lineitem: lineItemUrl,
30
+ lineitems: agsEndpoint.lineitems, // quirk: keep the moodle url search param
26
31
  scopes: agsEndpoint.scope || [],
27
32
  };
28
33
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lti-tool/core",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "LTI 1.3 implementation for Node.js",
5
5
  "keywords": [
6
6
  "lti",
@@ -70,7 +70,8 @@ export class AGSService {
70
70
  gradingProgress: score.gradingProgress,
71
71
  };
72
72
 
73
- const response = await fetch(`${session.services.ags.lineitem}/scores`, {
73
+ const agsScoreEndpoint = `${session.services.ags.lineitem}/scores`;
74
+ const response = await fetch(agsScoreEndpoint, {
74
75
  method: 'POST',
75
76
  headers: {
76
77
  Authorization: `Bearer ${token}`,
@@ -107,13 +108,9 @@ export class AGSService {
107
108
  'https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly',
108
109
  );
109
110
 
110
- // cleanse the results URL
111
- // we cannot include a search / query param
112
- const lineItemUrl = new URL(session.services.ags.lineitem);
113
- lineItemUrl.search = '';
114
- const resultsUrl = `${lineItemUrl.toString()}/results`;
111
+ const resultsEndpoint = `${session.services.ags.lineitem}/results`;
115
112
 
116
- const response = await fetch(resultsUrl, {
113
+ const response = await fetch(resultsEndpoint, {
117
114
  method: 'GET',
118
115
  headers: {
119
116
  Authorization: `Bearer ${token}`,
@@ -31,9 +31,14 @@ export function createSession(lti13JwtPayload: LTI13JwtPayload): LTISession {
31
31
 
32
32
  const services: Record<string, unknown> = {};
33
33
  if (agsEndpoint) {
34
+ let lineItemUrl: string | undefined;
35
+ if (agsEndpoint.lineitem) {
36
+ const url = new URL(agsEndpoint.lineitem);
37
+ lineItemUrl = `${url.origin}${url.pathname}`; // quirk: moodle adds a url search param
38
+ }
34
39
  services.ags = {
35
- lineitem: agsEndpoint.lineitem,
36
- lineitems: agsEndpoint.lineitems,
40
+ lineitem: lineItemUrl,
41
+ lineitems: agsEndpoint.lineitems, // quirk: keep the moodle url search param
37
42
  scopes: agsEndpoint.scope || [],
38
43
  };
39
44
  }