@openstax/ts-utils 1.21.9 → 1.21.11

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.
Files changed (248) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -0
  2. package/package.json +1 -11
  3. package/dist/cjs/assertions/index.d.ts +0 -85
  4. package/dist/cjs/assertions/index.js +0 -157
  5. package/dist/cjs/aws/ssmService.d.ts +0 -5
  6. package/dist/cjs/aws/ssmService.js +0 -9
  7. package/dist/cjs/config/awsParameterConfig.d.ts +0 -10
  8. package/dist/cjs/config/awsParameterConfig.js +0 -26
  9. package/dist/cjs/config/envConfig.d.ts +0 -24
  10. package/dist/cjs/config/envConfig.js +0 -57
  11. package/dist/cjs/config/index.d.ts +0 -48
  12. package/dist/cjs/config/index.js +0 -35
  13. package/dist/cjs/config/lambdaParameterConfig.d.ts +0 -12
  14. package/dist/cjs/config/lambdaParameterConfig.js +0 -45
  15. package/dist/cjs/config/replaceConfig.d.ts +0 -14
  16. package/dist/cjs/config/replaceConfig.js +0 -22
  17. package/dist/cjs/config/resolveConfigValue.d.ts +0 -5
  18. package/dist/cjs/config/resolveConfigValue.js +0 -12
  19. package/dist/cjs/errors/index.d.ts +0 -66
  20. package/dist/cjs/errors/index.js +0 -95
  21. package/dist/cjs/fetch/fetchStatusRetry.d.ts +0 -7
  22. package/dist/cjs/fetch/fetchStatusRetry.js +0 -16
  23. package/dist/cjs/fetch/index.d.ts +0 -64
  24. package/dist/cjs/fetch/index.js +0 -55
  25. package/dist/cjs/guards/index.d.ts +0 -30
  26. package/dist/cjs/guards/index.js +0 -35
  27. package/dist/cjs/index.d.ts +0 -4
  28. package/dist/cjs/index.js +0 -20
  29. package/dist/cjs/middleware/apiErrorHandler.d.ts +0 -23
  30. package/dist/cjs/middleware/apiErrorHandler.js +0 -40
  31. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +0 -23
  32. package/dist/cjs/middleware/apiSlowResponseMiddleware.js +0 -54
  33. package/dist/cjs/middleware/index.d.ts +0 -47
  34. package/dist/cjs/middleware/index.js +0 -48
  35. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
  36. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +0 -42
  37. package/dist/cjs/middleware/throwNotFoundMiddleware.d.ts +0 -4
  38. package/dist/cjs/middleware/throwNotFoundMiddleware.js +0 -14
  39. package/dist/cjs/misc/hashValue.d.ts +0 -10
  40. package/dist/cjs/misc/hashValue.js +0 -17
  41. package/dist/cjs/misc/helpers.d.ts +0 -124
  42. package/dist/cjs/misc/helpers.js +0 -214
  43. package/dist/cjs/misc/merge.d.ts +0 -21
  44. package/dist/cjs/misc/merge.js +0 -45
  45. package/dist/cjs/misc/partitionSequence.d.ts +0 -35
  46. package/dist/cjs/misc/partitionSequence.js +0 -55
  47. package/dist/cjs/pagination/index.d.ts +0 -91
  48. package/dist/cjs/pagination/index.js +0 -83
  49. package/dist/cjs/routing/helpers.d.ts +0 -57
  50. package/dist/cjs/routing/helpers.js +0 -90
  51. package/dist/cjs/routing/index.d.ts +0 -272
  52. package/dist/cjs/routing/index.js +0 -270
  53. package/dist/cjs/routing/validators/zod.d.ts +0 -4
  54. package/dist/cjs/routing/validators/zod.js +0 -12
  55. package/dist/cjs/services/accountsGateway/index.d.ts +0 -85
  56. package/dist/cjs/services/accountsGateway/index.js +0 -118
  57. package/dist/cjs/services/apiGateway/index.d.ts +0 -59
  58. package/dist/cjs/services/apiGateway/index.js +0 -96
  59. package/dist/cjs/services/authProvider/browser.d.ts +0 -74
  60. package/dist/cjs/services/authProvider/browser.js +0 -154
  61. package/dist/cjs/services/authProvider/decryption.d.ts +0 -19
  62. package/dist/cjs/services/authProvider/decryption.js +0 -61
  63. package/dist/cjs/services/authProvider/index.d.ts +0 -61
  64. package/dist/cjs/services/authProvider/index.js +0 -26
  65. package/dist/cjs/services/authProvider/subrequest.d.ts +0 -16
  66. package/dist/cjs/services/authProvider/subrequest.js +0 -50
  67. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +0 -29
  68. package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +0 -91
  69. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
  70. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +0 -47
  71. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +0 -13
  72. package/dist/cjs/services/authProvider/utils/userRoleValidator.js +0 -37
  73. package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +0 -10
  74. package/dist/cjs/services/documentStore/dynamoEncoding.js +0 -52
  75. package/dist/cjs/services/documentStore/index.d.ts +0 -14
  76. package/dist/cjs/services/documentStore/index.js +0 -2
  77. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +0 -16
  78. package/dist/cjs/services/documentStore/unversioned/dynamodb.js +0 -122
  79. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +0 -18
  80. package/dist/cjs/services/documentStore/unversioned/file-system.js +0 -121
  81. package/dist/cjs/services/documentStore/unversioned/index.d.ts +0 -2
  82. package/dist/cjs/services/documentStore/unversioned/index.js +0 -2
  83. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +0 -22
  84. package/dist/cjs/services/documentStore/versioned/dynamodb.js +0 -135
  85. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +0 -24
  86. package/dist/cjs/services/documentStore/versioned/file-system.js +0 -62
  87. package/dist/cjs/services/documentStore/versioned/index.d.ts +0 -17
  88. package/dist/cjs/services/documentStore/versioned/index.js +0 -2
  89. package/dist/cjs/services/exercisesGateway/index.d.ts +0 -71
  90. package/dist/cjs/services/exercisesGateway/index.js +0 -97
  91. package/dist/cjs/services/fileServer/index.d.ts +0 -19
  92. package/dist/cjs/services/fileServer/index.js +0 -19
  93. package/dist/cjs/services/fileServer/localFileServer.d.ts +0 -17
  94. package/dist/cjs/services/fileServer/localFileServer.js +0 -80
  95. package/dist/cjs/services/fileServer/s3FileServer.d.ts +0 -16
  96. package/dist/cjs/services/fileServer/s3FileServer.js +0 -49
  97. package/dist/cjs/services/launchParams/index.d.ts +0 -2
  98. package/dist/cjs/services/launchParams/index.js +0 -7
  99. package/dist/cjs/services/launchParams/signer.d.ts +0 -27
  100. package/dist/cjs/services/launchParams/signer.js +0 -58
  101. package/dist/cjs/services/launchParams/verifier.d.ts +0 -22
  102. package/dist/cjs/services/launchParams/verifier.js +0 -94
  103. package/dist/cjs/services/logger/console.d.ts +0 -4
  104. package/dist/cjs/services/logger/console.js +0 -12
  105. package/dist/cjs/services/logger/index.d.ts +0 -39
  106. package/dist/cjs/services/logger/index.js +0 -31
  107. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
  108. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.js +0 -21
  109. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +0 -70
  110. package/dist/cjs/services/lrsGateway/attempt-utils.js +0 -258
  111. package/dist/cjs/services/lrsGateway/file-system.d.ts +0 -17
  112. package/dist/cjs/services/lrsGateway/file-system.js +0 -140
  113. package/dist/cjs/services/lrsGateway/index.d.ts +0 -125
  114. package/dist/cjs/services/lrsGateway/index.js +0 -138
  115. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +0 -61
  116. package/dist/cjs/services/lrsGateway/xapiUtils.js +0 -94
  117. package/dist/cjs/services/postgresConnection/index.d.ts +0 -35
  118. package/dist/cjs/services/postgresConnection/index.js +0 -65
  119. package/dist/cjs/services/searchProvider/index.d.ts +0 -31
  120. package/dist/cjs/services/searchProvider/index.js +0 -2
  121. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +0 -14
  122. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +0 -89
  123. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +0 -1
  124. package/dist/cjs/types.d.ts +0 -31
  125. package/dist/cjs/types.js +0 -2
  126. package/dist/esm/assertions/index.d.ts +0 -85
  127. package/dist/esm/assertions/index.js +0 -146
  128. package/dist/esm/aws/ssmService.d.ts +0 -5
  129. package/dist/esm/aws/ssmService.js +0 -6
  130. package/dist/esm/config/awsParameterConfig.d.ts +0 -10
  131. package/dist/esm/config/awsParameterConfig.js +0 -22
  132. package/dist/esm/config/envConfig.d.ts +0 -24
  133. package/dist/esm/config/envConfig.js +0 -53
  134. package/dist/esm/config/index.d.ts +0 -48
  135. package/dist/esm/config/index.js +0 -17
  136. package/dist/esm/config/lambdaParameterConfig.d.ts +0 -12
  137. package/dist/esm/config/lambdaParameterConfig.js +0 -38
  138. package/dist/esm/config/replaceConfig.d.ts +0 -14
  139. package/dist/esm/config/replaceConfig.js +0 -18
  140. package/dist/esm/config/resolveConfigValue.d.ts +0 -5
  141. package/dist/esm/config/resolveConfigValue.js +0 -8
  142. package/dist/esm/errors/index.d.ts +0 -66
  143. package/dist/esm/errors/index.js +0 -86
  144. package/dist/esm/fetch/fetchStatusRetry.d.ts +0 -7
  145. package/dist/esm/fetch/fetchStatusRetry.js +0 -12
  146. package/dist/esm/fetch/index.d.ts +0 -64
  147. package/dist/esm/fetch/index.js +0 -46
  148. package/dist/esm/guards/index.d.ts +0 -30
  149. package/dist/esm/guards/index.js +0 -28
  150. package/dist/esm/index.d.ts +0 -4
  151. package/dist/esm/index.js +0 -4
  152. package/dist/esm/middleware/apiErrorHandler.d.ts +0 -23
  153. package/dist/esm/middleware/apiErrorHandler.js +0 -36
  154. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +0 -23
  155. package/dist/esm/middleware/apiSlowResponseMiddleware.js +0 -50
  156. package/dist/esm/middleware/index.d.ts +0 -47
  157. package/dist/esm/middleware/index.js +0 -44
  158. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
  159. package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +0 -38
  160. package/dist/esm/middleware/throwNotFoundMiddleware.d.ts +0 -4
  161. package/dist/esm/middleware/throwNotFoundMiddleware.js +0 -10
  162. package/dist/esm/misc/hashValue.d.ts +0 -10
  163. package/dist/esm/misc/hashValue.js +0 -13
  164. package/dist/esm/misc/helpers.d.ts +0 -124
  165. package/dist/esm/misc/helpers.js +0 -199
  166. package/dist/esm/misc/merge.d.ts +0 -21
  167. package/dist/esm/misc/merge.js +0 -40
  168. package/dist/esm/misc/partitionSequence.d.ts +0 -35
  169. package/dist/esm/misc/partitionSequence.js +0 -48
  170. package/dist/esm/pagination/index.d.ts +0 -91
  171. package/dist/esm/pagination/index.js +0 -77
  172. package/dist/esm/routing/helpers.d.ts +0 -57
  173. package/dist/esm/routing/helpers.js +0 -83
  174. package/dist/esm/routing/index.d.ts +0 -272
  175. package/dist/esm/routing/index.js +0 -232
  176. package/dist/esm/routing/validators/zod.d.ts +0 -4
  177. package/dist/esm/routing/validators/zod.js +0 -8
  178. package/dist/esm/services/accountsGateway/index.d.ts +0 -85
  179. package/dist/esm/services/accountsGateway/index.js +0 -111
  180. package/dist/esm/services/apiGateway/index.d.ts +0 -59
  181. package/dist/esm/services/apiGateway/index.js +0 -65
  182. package/dist/esm/services/authProvider/browser.d.ts +0 -74
  183. package/dist/esm/services/authProvider/browser.js +0 -150
  184. package/dist/esm/services/authProvider/decryption.d.ts +0 -19
  185. package/dist/esm/services/authProvider/decryption.js +0 -57
  186. package/dist/esm/services/authProvider/index.d.ts +0 -61
  187. package/dist/esm/services/authProvider/index.js +0 -18
  188. package/dist/esm/services/authProvider/subrequest.d.ts +0 -16
  189. package/dist/esm/services/authProvider/subrequest.js +0 -43
  190. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +0 -29
  191. package/dist/esm/services/authProvider/utils/decryptAndVerify.js +0 -85
  192. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
  193. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.js +0 -40
  194. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +0 -13
  195. package/dist/esm/services/authProvider/utils/userRoleValidator.js +0 -33
  196. package/dist/esm/services/documentStore/dynamoEncoding.d.ts +0 -10
  197. package/dist/esm/services/documentStore/dynamoEncoding.js +0 -45
  198. package/dist/esm/services/documentStore/index.d.ts +0 -14
  199. package/dist/esm/services/documentStore/index.js +0 -1
  200. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +0 -16
  201. package/dist/esm/services/documentStore/unversioned/dynamodb.js +0 -118
  202. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +0 -18
  203. package/dist/esm/services/documentStore/unversioned/file-system.js +0 -91
  204. package/dist/esm/services/documentStore/unversioned/index.d.ts +0 -2
  205. package/dist/esm/services/documentStore/unversioned/index.js +0 -1
  206. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +0 -22
  207. package/dist/esm/services/documentStore/versioned/dynamodb.js +0 -131
  208. package/dist/esm/services/documentStore/versioned/file-system.d.ts +0 -24
  209. package/dist/esm/services/documentStore/versioned/file-system.js +0 -58
  210. package/dist/esm/services/documentStore/versioned/index.d.ts +0 -17
  211. package/dist/esm/services/documentStore/versioned/index.js +0 -1
  212. package/dist/esm/services/exercisesGateway/index.d.ts +0 -71
  213. package/dist/esm/services/exercisesGateway/index.js +0 -70
  214. package/dist/esm/services/fileServer/index.d.ts +0 -19
  215. package/dist/esm/services/fileServer/index.js +0 -13
  216. package/dist/esm/services/fileServer/localFileServer.d.ts +0 -17
  217. package/dist/esm/services/fileServer/localFileServer.js +0 -73
  218. package/dist/esm/services/fileServer/s3FileServer.d.ts +0 -16
  219. package/dist/esm/services/fileServer/s3FileServer.js +0 -45
  220. package/dist/esm/services/launchParams/index.d.ts +0 -2
  221. package/dist/esm/services/launchParams/index.js +0 -2
  222. package/dist/esm/services/launchParams/signer.d.ts +0 -27
  223. package/dist/esm/services/launchParams/signer.js +0 -51
  224. package/dist/esm/services/launchParams/verifier.d.ts +0 -22
  225. package/dist/esm/services/launchParams/verifier.js +0 -67
  226. package/dist/esm/services/logger/console.d.ts +0 -4
  227. package/dist/esm/services/logger/console.js +0 -8
  228. package/dist/esm/services/logger/index.d.ts +0 -39
  229. package/dist/esm/services/logger/index.js +0 -27
  230. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
  231. package/dist/esm/services/lrsGateway/addStatementDefaultFields.js +0 -14
  232. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +0 -70
  233. package/dist/esm/services/lrsGateway/attempt-utils.js +0 -236
  234. package/dist/esm/services/lrsGateway/file-system.d.ts +0 -17
  235. package/dist/esm/services/lrsGateway/file-system.js +0 -110
  236. package/dist/esm/services/lrsGateway/index.d.ts +0 -125
  237. package/dist/esm/services/lrsGateway/index.js +0 -111
  238. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +0 -61
  239. package/dist/esm/services/lrsGateway/xapiUtils.js +0 -84
  240. package/dist/esm/services/postgresConnection/index.d.ts +0 -35
  241. package/dist/esm/services/postgresConnection/index.js +0 -58
  242. package/dist/esm/services/searchProvider/index.d.ts +0 -31
  243. package/dist/esm/services/searchProvider/index.js +0 -1
  244. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +0 -14
  245. package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +0 -85
  246. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +0 -1
  247. package/dist/esm/types.d.ts +0 -31
  248. package/dist/esm/types.js +0 -1
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.createLaunchVerifier = void 0;
27
- const jsonwebtoken_1 = __importStar(require("jsonwebtoken"));
28
- const jwks_rsa_1 = require("jwks-rsa");
29
- const __1 = require("../..");
30
- const config_1 = require("../../config");
31
- const errors_1 = require("../../errors");
32
- const guards_1 = require("../../guards");
33
- /**
34
- * Creates a class that can verify launch params
35
- */
36
- const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvider) => {
37
- const config = configProvider[(0, guards_1.ifDefined)(configSpace, 'launch')];
38
- const getJwksClient = (0, __1.memoize)((jwksUri) => new jwks_rsa_1.JwksClient({ fetcher, jwksUri }));
39
- const getJwksKey = (0, __1.memoize)(async (jwksUri, kid) => {
40
- const client = getJwksClient(jwksUri);
41
- const key = await client.getSigningKey(kid);
42
- return key.getPublicKey();
43
- });
44
- const getKey = async (header, callback) => {
45
- // The JWT spec allows iss in the header as a copy of the iss claim, but we require it
46
- if (!header.iss) {
47
- return callback(new Error('JWT header missing iss claim'));
48
- }
49
- const { iss, kid } = header;
50
- try {
51
- const jwksUrl = new URL('/.well-known/jwks.json', iss);
52
- const launchDomain = jwksUrl.hostname;
53
- const trustedDomain = await (0, config_1.resolveConfigValue)(config.trustedDomain);
54
- if (launchDomain !== trustedDomain && !launchDomain.endsWith(`.${trustedDomain}`)) {
55
- return callback(new Error(`Untrusted launch domain: "${launchDomain}"`));
56
- }
57
- callback(null, await getJwksKey(jwksUrl.toString(), kid));
58
- }
59
- catch (error) {
60
- callback(error);
61
- }
62
- };
63
- const verify = (...[token, validator]) => new Promise((resolve, reject) => jsonwebtoken_1.default.verify(token, getKey, {}, (err, payload) => {
64
- if (err && err instanceof jsonwebtoken_1.TokenExpiredError) {
65
- reject(new errors_1.SessionExpiredError());
66
- }
67
- else if (err) {
68
- reject(err);
69
- }
70
- else if (typeof payload !== 'object') {
71
- reject(new Error('received JWT token with unexpected non-JSON payload'));
72
- }
73
- else if (!payload.sub) {
74
- reject(new Error('JWT payload missing sub claim'));
75
- }
76
- else {
77
- // we are migrating away from json encoding all the parameters into the `sub` claim
78
- // and into using separate claims for each parameter. in transition, we check if the sub
79
- // is json and return it if it is. this is still a breaking change when using this
80
- // utility because applications no longer need to independently json parse the result
81
- // starting now.
82
- const parsed = payload;
83
- try {
84
- const jsonSubContents = JSON.parse(payload.sub);
85
- Object.assign(parsed, jsonSubContents);
86
- }
87
- catch (e) { } // eslint-disable-line no-empty
88
- // conditional return types are annoying
89
- resolve((validator ? validator(parsed) : parsed));
90
- }
91
- }));
92
- return { verify };
93
- };
94
- exports.createLaunchVerifier = createLaunchVerifier;
@@ -1,4 +0,0 @@
1
- /**
2
- * Creates a logger that logs to the console.
3
- */
4
- export declare const createConsoleLogger: () => import(".").Logger;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createConsoleLogger = void 0;
4
- const _1 = require(".");
5
- /**
6
- * Creates a logger that logs to the console.
7
- */
8
- const createConsoleLogger = () => (0, _1.createCoreLogger)((level, event) => console[level](JSON.stringify({
9
- eventType: level.toUpperCase(),
10
- ...event,
11
- })));
12
- exports.createConsoleLogger = createConsoleLogger;
@@ -1,39 +0,0 @@
1
- import { JsonCompatibleStruct } from '../../routing';
2
- /**
3
- * The log level
4
- */
5
- export declare enum Level {
6
- Info = "info",
7
- Warn = "warn",
8
- Error = "error"
9
- }
10
- /**
11
- * A function that logs an event at a certain level.
12
- *
13
- * @param level - log level
14
- * @param event - event to log
15
- */
16
- export declare type LogEvent = (level: Level, event: JsonCompatibleStruct) => void;
17
- /**
18
- * A logger that can be used to log events.
19
- *
20
- * @property setContext - sets a context object to be included in all future logged events
21
- * @property logEvent - logs an arbitrary event at a certain level, without context
22
- * @property log - logs a message and the context at a certain level
23
- * @property createSubContext - creates a new logger that inherits the context of this logger
24
- */
25
- export interface Logger {
26
- setContext: (obj: JsonCompatibleStruct) => void;
27
- logEvent: LogEvent;
28
- log: (message: string, level?: Level) => void;
29
- createSubContext: () => Logger;
30
- }
31
- /**
32
- * Creates a logger that logs events using the given driver and context provider.
33
- *
34
- * @param driver the driver that logs events
35
- * @param getParentContext a provider that returns the context to use for this logger
36
- * (the context is returned when messages are logged with the logger)
37
- * @returns a Logger
38
- */
39
- export declare const createCoreLogger: (driver: LogEvent, getParentContext?: (() => JsonCompatibleStruct) | undefined) => Logger;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCoreLogger = exports.Level = void 0;
4
- /**
5
- * The log level
6
- */
7
- var Level;
8
- (function (Level) {
9
- Level["Info"] = "info";
10
- Level["Warn"] = "warn";
11
- Level["Error"] = "error";
12
- })(Level = exports.Level || (exports.Level = {}));
13
- /**
14
- * Creates a logger that logs events using the given driver and context provider.
15
- *
16
- * @param driver the driver that logs events
17
- * @param getParentContext a provider that returns the context to use for this logger
18
- * (the context is returned when messages are logged with the logger)
19
- * @returns a Logger
20
- */
21
- const createCoreLogger = (driver, getParentContext) => {
22
- const context = {};
23
- const getContext = () => ({ ...getParentContext === null || getParentContext === void 0 ? void 0 : getParentContext(), ...context });
24
- return {
25
- logEvent: (level, event) => driver(level, { ...event, context: getContext() }),
26
- log: (message, level = Level.Info) => driver(level, { message, context: getContext() }),
27
- setContext: (obj) => { Object.assign(context, obj); },
28
- createSubContext: () => (0, exports.createCoreLogger)(driver, getContext),
29
- };
30
- };
31
- exports.createCoreLogger = createCoreLogger;
@@ -1,5 +0,0 @@
1
- import { User } from '../authProvider';
2
- import { EagerXapiStatement, UXapiStatement, XapiStatement } from '.';
3
- export declare const addStatementDefaultFields: (statement: (Pick<XapiStatement, 'object' | 'verb' | 'context' | 'result'> & {
4
- id?: string;
5
- }) | UXapiStatement, user: User) => EagerXapiStatement;
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.addStatementDefaultFields = void 0;
7
- const formatISO_1 = __importDefault(require("date-fns/formatISO"));
8
- const uuid_1 = require("uuid");
9
- const addStatementDefaultFields = (statement, user) => ({
10
- id: (0, uuid_1.v4)(),
11
- actor: {
12
- account: {
13
- homePage: 'https://openstax.org',
14
- name: user.uuid,
15
- },
16
- objectType: 'Agent',
17
- },
18
- timestamp: (0, formatISO_1.default)(new Date()),
19
- ...statement,
20
- });
21
- exports.addStatementDefaultFields = addStatementDefaultFields;
@@ -1,70 +0,0 @@
1
- import { LrsGateway, UXapiStatement } from '.';
2
- export declare type ActivityState = {
3
- attempts: number;
4
- completedAttempts: number;
5
- currentAttempt?: UXapiStatement;
6
- currentAttemptCompleted?: UXapiStatement;
7
- currentAttemptStatements: UXapiStatement[];
8
- mostRecentAttemptWithCompleted?: UXapiStatement;
9
- mostRecentAttemptWithCompletedCompleted?: UXapiStatement;
10
- };
11
- export declare const matchAttempt: (statement: UXapiStatement) => boolean;
12
- export declare const matchAttemptCompleted: (attempt: UXapiStatement) => (statement: UXapiStatement) => boolean;
13
- export declare const resolveAttempts: (statements: UXapiStatement[], options?: {
14
- activityIRI?: string | undefined;
15
- parentActivityAttempt?: string | undefined;
16
- } | undefined) => UXapiStatement[];
17
- export declare const resolveCompletedForAttempt: (statements: UXapiStatement[], attempt: UXapiStatement, activityIRI?: string | undefined) => UXapiStatement | undefined;
18
- export declare const oldestStatement: (statements: UXapiStatement[]) => UXapiStatement | undefined;
19
- export declare const mostRecentStatement: (statements: UXapiStatement[]) => UXapiStatement | undefined;
20
- export declare const resolveAttemptInfo: (statements: UXapiStatement[], options?: {
21
- activityIRI?: string | undefined;
22
- currentAttempt?: string | undefined;
23
- parentActivityAttempt?: string | undefined;
24
- currentPreference?: "latest" | "oldest" | undefined;
25
- } | undefined) => ActivityState;
26
- export declare const loadStatementsForActivityAndFirstChildren: (gateway: LrsGateway, activityIRI: string, options?: {
27
- anyUser?: boolean | undefined;
28
- attempt?: string | undefined;
29
- ensureSync?: boolean | undefined;
30
- user?: string | undefined;
31
- } | undefined) => Promise<import(".").XapiStatement[]>;
32
- export declare const loadActivityAttemptInfo: (gateway: LrsGateway, activityIRI: string, options?: {
33
- currentAttempt?: string | undefined;
34
- parentActivityAttempt?: string | undefined;
35
- ensureSync?: boolean | undefined;
36
- } | undefined) => Promise<ActivityState>;
37
- export declare const createStatement: (verb: UXapiStatement['verb'], activity: {
38
- iri: string;
39
- type: string;
40
- name: string;
41
- extensions?: {
42
- [key: string]: string;
43
- } | undefined;
44
- }, attempt: string, parentActivityIRI?: string | undefined) => Pick<UXapiStatement, 'object' | 'verb' | 'context'>;
45
- export declare const createAttemptStatement: (activity: {
46
- iri: string;
47
- type: string;
48
- name: string;
49
- extensions?: {
50
- [key: string]: string;
51
- } | undefined;
52
- }, parentActivity?: {
53
- iri?: string | undefined;
54
- attempt?: string | undefined;
55
- } | undefined) => Pick<UXapiStatement, 'object' | 'verb' | 'context'>;
56
- export declare const putAttemptStatement: (gateway: LrsGateway, activity: {
57
- iri: string;
58
- type: string;
59
- name: string;
60
- extensions?: {
61
- [key: string]: string;
62
- } | undefined;
63
- }, parentActivity?: {
64
- iri?: string | undefined;
65
- attempt?: string | undefined;
66
- } | undefined) => Promise<import(".").EagerXapiStatement>;
67
- export declare const createAttemptActivityStatement: (attemptStatement: UXapiStatement, verb: UXapiStatement['verb'], result?: UXapiStatement['result']) => Pick<UXapiStatement, 'object' | 'verb' | 'context' | 'result'>;
68
- export declare const putAttemptActivityStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, verb: UXapiStatement['verb'], result?: UXapiStatement['result']) => Promise<import(".").EagerXapiStatement>;
69
- export declare const createCompletedStatement: (attemptStatement: UXapiStatement, result?: UXapiStatement['result']) => Pick<UXapiStatement, 'object' | 'verb' | 'context' | 'result'>;
70
- export declare const putCompletedStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement['result']) => Promise<import(".").EagerXapiStatement>;
@@ -1,258 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.putCompletedStatement = exports.createCompletedStatement = exports.putAttemptActivityStatement = exports.createAttemptActivityStatement = exports.putAttemptStatement = exports.createAttemptStatement = exports.createStatement = exports.loadActivityAttemptInfo = exports.loadStatementsForActivityAndFirstChildren = exports.resolveAttemptInfo = exports.mostRecentStatement = exports.oldestStatement = exports.resolveCompletedForAttempt = exports.resolveAttempts = exports.matchAttemptCompleted = exports.matchAttempt = void 0;
7
- /*
8
- * the structure of xapi statements for handling multiple attempts of an activity
9
- * including the option of a parent activity/attempt such that a new attempt
10
- * of a parent activity inherently creates a new attempt scope for sub-activities
11
- * is done by convention using certain context and verb pieces of a statement.
12
- * this module provides helpers for creating and retrieving statements according
13
- * to this convention.
14
- */
15
- const formatISODuration_1 = __importDefault(require("date-fns/formatISODuration"));
16
- const intervalToDuration_1 = __importDefault(require("date-fns/intervalToDuration"));
17
- const isAfter_1 = __importDefault(require("date-fns/isAfter"));
18
- const isBefore_1 = __importDefault(require("date-fns/isBefore"));
19
- const parseISO_1 = __importDefault(require("date-fns/parseISO"));
20
- var Verb;
21
- (function (Verb) {
22
- Verb["Attempted"] = "http://adlnet.gov/expapi/verbs/attempted";
23
- Verb["Completed"] = "http://adlnet.gov/expapi/verbs/completed";
24
- })(Verb || (Verb = {}));
25
- const matchAttempt = (statement) => statement.verb.id === Verb.Attempted;
26
- exports.matchAttempt = matchAttempt;
27
- const matchAttemptCompleted = (attempt) => (statement) => {
28
- var _a, _b;
29
- return statement.verb.id === Verb.Completed
30
- && statement.context !== undefined
31
- && ((_a = statement.context.statement) === null || _a === void 0 ? void 0 : _a.id) === attempt.id
32
- && statement.context.registration === ((_b = attempt.context) === null || _b === void 0 ? void 0 : _b.registration);
33
- };
34
- exports.matchAttemptCompleted = matchAttemptCompleted;
35
- const resolveAttempts = (statements, options) => statements.filter(statement => {
36
- var _a;
37
- return (0, exports.matchAttempt)(statement)
38
- && (!(options === null || options === void 0 ? void 0 : options.activityIRI) || statement.object.id === options.activityIRI)
39
- && (!(options === null || options === void 0 ? void 0 : options.parentActivityAttempt) || ((_a = statement.context) === null || _a === void 0 ? void 0 : _a.registration) === options.parentActivityAttempt);
40
- });
41
- exports.resolveAttempts = resolveAttempts;
42
- const resolveCompletedForAttempt = (statements, attempt, activityIRI) => statements.find(statement => (0, exports.matchAttemptCompleted)(attempt)(statement)
43
- && (!activityIRI || statement.object.id === activityIRI));
44
- exports.resolveCompletedForAttempt = resolveCompletedForAttempt;
45
- const oldestStatement = (statements) => statements.reduce((result, statement) => result && (0, isBefore_1.default)((0, parseISO_1.default)('stored' in result && result.stored ? result.stored : result.timestamp), (0, parseISO_1.default)(statement.timestamp)) ? result : statement, statements[0]);
46
- exports.oldestStatement = oldestStatement;
47
- const mostRecentStatement = (statements) => statements.reduce((result, statement) => result && (0, isAfter_1.default)((0, parseISO_1.default)('stored' in result && result.stored ? result.stored : result.timestamp), (0, parseISO_1.default)(statement.timestamp)) ? result : statement, statements[0]);
48
- exports.mostRecentStatement = mostRecentStatement;
49
- const resolveAttemptInfo = (statements, options) => {
50
- // TODO optimize. i'm 100% that this could all be done in one iteration but i'm not messing around with that for now.
51
- const attempts = (0, exports.resolveAttempts)(statements, options);
52
- /* attempts that have a completed statement */
53
- const completedAttempts = attempts.filter(attempt => !!(0, exports.resolveCompletedForAttempt)(statements, attempt, options === null || options === void 0 ? void 0 : options.activityIRI));
54
- /* the last attempt sorted by timestamp */
55
- const currentAttempt = (options === null || options === void 0 ? void 0 : options.currentAttempt)
56
- ? attempts.find(attempt => attempt.id === options.currentAttempt)
57
- : (options === null || options === void 0 ? void 0 : options.currentPreference) === 'oldest'
58
- ? (0, exports.oldestStatement)(attempts)
59
- : (0, exports.mostRecentStatement)(attempts);
60
- /* all statements for the current attempt (doesn't include the attempt or completed statements) */
61
- const currentAttemptStatements = currentAttempt ? statements.filter(statement => {
62
- var _a;
63
- return (!(options === null || options === void 0 ? void 0 : options.activityIRI) || statement.object.id === options.activityIRI)
64
- && ((_a = statement.context) === null || _a === void 0 ? void 0 : _a.registration) === currentAttempt.id;
65
- }) : [];
66
- const currentAttemptCompleted = currentAttempt && (0, exports.resolveCompletedForAttempt)(statements, currentAttempt, options === null || options === void 0 ? void 0 : options.activityIRI);
67
- const mostRecentAttemptWithCompleted = completedAttempts.reduce((current, attempt) => current && (0, isAfter_1.default)((0, parseISO_1.default)(current.timestamp), (0, parseISO_1.default)(attempt.timestamp)) ? current : attempt, completedAttempts[0]);
68
- const mostRecentAttemptWithCompletedCompleted = mostRecentAttemptWithCompleted
69
- && (0, exports.resolveCompletedForAttempt)(statements, mostRecentAttemptWithCompleted, options === null || options === void 0 ? void 0 : options.activityIRI);
70
- /*
71
- * the structure allows for the possibility of multiple incomplete attempts.
72
- * the implementation can choose at its discretion to ignore the currentAttempt
73
- * and instead make a new one, for instance if the implementation desires
74
- * an attempt timeout feature
75
- */
76
- return {
77
- attempts: attempts.length,
78
- completedAttempts: completedAttempts.length,
79
- currentAttempt,
80
- currentAttemptCompleted: currentAttemptCompleted,
81
- currentAttemptStatements,
82
- mostRecentAttemptWithCompleted,
83
- mostRecentAttemptWithCompletedCompleted,
84
- };
85
- };
86
- exports.resolveAttemptInfo = resolveAttemptInfo;
87
- /*
88
- * loads all statements (for this actor) that have the given activityIRI as the object.id or the context.contextActivities.parent.id
89
- *
90
- * note: if you filter on attempt you're only gonna get the `Attempted` statements from the child activities, subsequent child activity
91
- * statements would then have to be fetched using
92
- * `gateway.getAllXapiStatements({ activity: childActivityIRI, registration: childAttemptStatementID })`.
93
- * this is because child activities could have multiple attempts under one attempt on the parent activity.
94
- */
95
- const loadStatementsForActivityAndFirstChildren = (gateway, activityIRI, options) => {
96
- const { attempt, ...partialOptions } = options ? options : { attempt: undefined };
97
- const getOptions = attempt ? { registration: attempt, ...partialOptions } : partialOptions;
98
- return gateway.getAllXapiStatements({
99
- activity: activityIRI,
100
- related_activities: true,
101
- ...getOptions,
102
- });
103
- };
104
- exports.loadStatementsForActivityAndFirstChildren = loadStatementsForActivityAndFirstChildren;
105
- const loadActivityAttemptInfo = async (gateway, activityIRI, options) => {
106
- const { parentActivityAttempt, ...partialOptions } = options ? options : { parentActivityAttempt: undefined };
107
- const loadOptions = parentActivityAttempt ? { ...partialOptions, registration: parentActivityAttempt } : partialOptions;
108
- return (0, exports.resolveAttemptInfo)(await gateway.getAllXapiStatements({ ...loadOptions, activity: activityIRI }), { ...options, activityIRI });
109
- };
110
- exports.loadActivityAttemptInfo = loadActivityAttemptInfo;
111
- const createStatement = (verb, activity, attempt, parentActivityIRI) => {
112
- return {
113
- context: {
114
- ...(parentActivityIRI ? {
115
- contextActivities: {
116
- parent: [
117
- {
118
- id: parentActivityIRI,
119
- objectType: 'Activity',
120
- },
121
- ],
122
- },
123
- } : {}),
124
- registration: attempt,
125
- },
126
- object: {
127
- definition: {
128
- extensions: {
129
- ...activity.extensions
130
- },
131
- name: {
132
- 'en-US': activity.name,
133
- },
134
- type: activity.type,
135
- },
136
- id: activity.iri,
137
- objectType: 'Activity'
138
- },
139
- verb,
140
- };
141
- };
142
- exports.createStatement = createStatement;
143
- /*
144
- * activity:
145
- * - iri: the IRI formatted id for this activity
146
- * - type: the IRI formatted activity type (eg: http://id.tincanapi.com/activitytype/school-assignment)
147
- * - name: the plaintext name of the activity, for reporting
148
- *
149
- * parentActivity:
150
- * - iri: the IRI formatted id for the parent activity
151
- * - attempt: the statement id for the parent attempt (the object of which should be the parentActivity.iri)
152
- */
153
- const createAttemptStatement = (activity, parentActivity) => {
154
- return {
155
- ...((parentActivity === null || parentActivity === void 0 ? void 0 : parentActivity.iri) || (parentActivity === null || parentActivity === void 0 ? void 0 : parentActivity.attempt) ? {
156
- context: {
157
- ...(parentActivity.iri ? {
158
- contextActivities: {
159
- parent: [
160
- {
161
- id: parentActivity.iri,
162
- objectType: 'Activity',
163
- },
164
- ],
165
- },
166
- } : {}),
167
- ...(parentActivity.attempt ? {
168
- registration: parentActivity.attempt,
169
- } : {})
170
- },
171
- } : {}),
172
- object: {
173
- definition: {
174
- extensions: {
175
- ...activity.extensions
176
- },
177
- name: {
178
- 'en-US': activity.name,
179
- },
180
- type: activity.type,
181
- },
182
- id: activity.iri,
183
- objectType: 'Activity'
184
- },
185
- verb: {
186
- display: { 'en-US': 'Attempted' },
187
- id: Verb.Attempted,
188
- },
189
- };
190
- };
191
- exports.createAttemptStatement = createAttemptStatement;
192
- /* resolves with the statement id */
193
- const putAttemptStatement = async (gateway, activity, parentActivity) => {
194
- return (await gateway.putXapiStatements([(0, exports.createAttemptStatement)(activity, parentActivity)]))[0];
195
- };
196
- exports.putAttemptStatement = putAttemptStatement;
197
- /*
198
- * creates a statement under the given attempt.
199
- *
200
- * `result` optional context for the attempt result (score, selected answer, etc)
201
- */
202
- const createAttemptActivityStatement = (attemptStatement, verb, result) => {
203
- var _a;
204
- return {
205
- context: {
206
- ...(((_a = attemptStatement.context) === null || _a === void 0 ? void 0 : _a.contextActivities) ? {
207
- contextActivities: attemptStatement.context.contextActivities,
208
- } : {}),
209
- registration: attemptStatement.id,
210
- },
211
- object: attemptStatement.object,
212
- verb: verb,
213
- ...(result ? { result } : {}),
214
- };
215
- };
216
- exports.createAttemptActivityStatement = createAttemptActivityStatement;
217
- const putAttemptActivityStatement = async (gateway, attemptStatement, verb, result) => {
218
- return (await gateway.putXapiStatements([(0, exports.createAttemptActivityStatement)(attemptStatement, verb, result)]))[0];
219
- };
220
- exports.putAttemptActivityStatement = putAttemptActivityStatement;
221
- /*
222
- * creates a statement that completes the given attempt.
223
- *
224
- * `result` optional context for the attempt result (score, selected answer, etc)
225
- */
226
- const createCompletedStatement = (attemptStatement, result) => {
227
- var _a, _b;
228
- return {
229
- context: {
230
- ...(((_a = attemptStatement.context) === null || _a === void 0 ? void 0 : _a.contextActivities) ? {
231
- contextActivities: attemptStatement.context.contextActivities,
232
- } : {}),
233
- ...(((_b = attemptStatement.context) === null || _b === void 0 ? void 0 : _b.registration) ? {
234
- registration: attemptStatement.context.registration,
235
- } : {}),
236
- statement: {
237
- objectType: 'StatementRef',
238
- id: attemptStatement.id,
239
- }
240
- },
241
- object: attemptStatement.object,
242
- verb: {
243
- display: { 'en-US': 'Completed' },
244
- id: Verb.Completed,
245
- },
246
- result: {
247
- duration: (0, formatISODuration_1.default)((0, intervalToDuration_1.default)({
248
- start: (0, parseISO_1.default)(attemptStatement.timestamp), end: new Date()
249
- })),
250
- ...result,
251
- }
252
- };
253
- };
254
- exports.createCompletedStatement = createCompletedStatement;
255
- const putCompletedStatement = async (gateway, attemptStatement, result) => {
256
- return (await gateway.putXapiStatements([(0, exports.createCompletedStatement)(attemptStatement, result)]))[0];
257
- };
258
- exports.putCompletedStatement = putCompletedStatement;
@@ -1,17 +0,0 @@
1
- import { ConfigProviderForConfig } from '../../config';
2
- import { AuthProvider } from '../authProvider';
3
- import { LrsGateway } from '.';
4
- declare type Config = {
5
- name: string;
6
- };
7
- interface Initializer<C> {
8
- dataDir: string;
9
- fs?: Pick<typeof import('fs'), 'readFile' | 'writeFile'>;
10
- configSpace?: C;
11
- }
12
- export declare const fileSystemLrsGateway: <C extends string = "fileSystem">(initializer: Initializer<C>) => (configProvider: { [key in C]: {
13
- name: import("../../config").ConfigValueProvider<string>;
14
- }; }) => ({ authProvider }: {
15
- authProvider: AuthProvider;
16
- }) => LrsGateway;
17
- export {};