@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.
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -11
- package/dist/cjs/assertions/index.d.ts +0 -85
- package/dist/cjs/assertions/index.js +0 -157
- package/dist/cjs/aws/ssmService.d.ts +0 -5
- package/dist/cjs/aws/ssmService.js +0 -9
- package/dist/cjs/config/awsParameterConfig.d.ts +0 -10
- package/dist/cjs/config/awsParameterConfig.js +0 -26
- package/dist/cjs/config/envConfig.d.ts +0 -24
- package/dist/cjs/config/envConfig.js +0 -57
- package/dist/cjs/config/index.d.ts +0 -48
- package/dist/cjs/config/index.js +0 -35
- package/dist/cjs/config/lambdaParameterConfig.d.ts +0 -12
- package/dist/cjs/config/lambdaParameterConfig.js +0 -45
- package/dist/cjs/config/replaceConfig.d.ts +0 -14
- package/dist/cjs/config/replaceConfig.js +0 -22
- package/dist/cjs/config/resolveConfigValue.d.ts +0 -5
- package/dist/cjs/config/resolveConfigValue.js +0 -12
- package/dist/cjs/errors/index.d.ts +0 -66
- package/dist/cjs/errors/index.js +0 -95
- package/dist/cjs/fetch/fetchStatusRetry.d.ts +0 -7
- package/dist/cjs/fetch/fetchStatusRetry.js +0 -16
- package/dist/cjs/fetch/index.d.ts +0 -64
- package/dist/cjs/fetch/index.js +0 -55
- package/dist/cjs/guards/index.d.ts +0 -30
- package/dist/cjs/guards/index.js +0 -35
- package/dist/cjs/index.d.ts +0 -4
- package/dist/cjs/index.js +0 -20
- package/dist/cjs/middleware/apiErrorHandler.d.ts +0 -23
- package/dist/cjs/middleware/apiErrorHandler.js +0 -40
- package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +0 -23
- package/dist/cjs/middleware/apiSlowResponseMiddleware.js +0 -54
- package/dist/cjs/middleware/index.d.ts +0 -47
- package/dist/cjs/middleware/index.js +0 -48
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +0 -42
- package/dist/cjs/middleware/throwNotFoundMiddleware.d.ts +0 -4
- package/dist/cjs/middleware/throwNotFoundMiddleware.js +0 -14
- package/dist/cjs/misc/hashValue.d.ts +0 -10
- package/dist/cjs/misc/hashValue.js +0 -17
- package/dist/cjs/misc/helpers.d.ts +0 -124
- package/dist/cjs/misc/helpers.js +0 -214
- package/dist/cjs/misc/merge.d.ts +0 -21
- package/dist/cjs/misc/merge.js +0 -45
- package/dist/cjs/misc/partitionSequence.d.ts +0 -35
- package/dist/cjs/misc/partitionSequence.js +0 -55
- package/dist/cjs/pagination/index.d.ts +0 -91
- package/dist/cjs/pagination/index.js +0 -83
- package/dist/cjs/routing/helpers.d.ts +0 -57
- package/dist/cjs/routing/helpers.js +0 -90
- package/dist/cjs/routing/index.d.ts +0 -272
- package/dist/cjs/routing/index.js +0 -270
- package/dist/cjs/routing/validators/zod.d.ts +0 -4
- package/dist/cjs/routing/validators/zod.js +0 -12
- package/dist/cjs/services/accountsGateway/index.d.ts +0 -85
- package/dist/cjs/services/accountsGateway/index.js +0 -118
- package/dist/cjs/services/apiGateway/index.d.ts +0 -59
- package/dist/cjs/services/apiGateway/index.js +0 -96
- package/dist/cjs/services/authProvider/browser.d.ts +0 -74
- package/dist/cjs/services/authProvider/browser.js +0 -154
- package/dist/cjs/services/authProvider/decryption.d.ts +0 -19
- package/dist/cjs/services/authProvider/decryption.js +0 -61
- package/dist/cjs/services/authProvider/index.d.ts +0 -61
- package/dist/cjs/services/authProvider/index.js +0 -26
- package/dist/cjs/services/authProvider/subrequest.d.ts +0 -16
- package/dist/cjs/services/authProvider/subrequest.js +0 -50
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +0 -29
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +0 -91
- package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
- package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +0 -47
- package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +0 -13
- package/dist/cjs/services/authProvider/utils/userRoleValidator.js +0 -37
- package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +0 -10
- package/dist/cjs/services/documentStore/dynamoEncoding.js +0 -52
- package/dist/cjs/services/documentStore/index.d.ts +0 -14
- package/dist/cjs/services/documentStore/index.js +0 -2
- package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +0 -16
- package/dist/cjs/services/documentStore/unversioned/dynamodb.js +0 -122
- package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +0 -18
- package/dist/cjs/services/documentStore/unversioned/file-system.js +0 -121
- package/dist/cjs/services/documentStore/unversioned/index.d.ts +0 -2
- package/dist/cjs/services/documentStore/unversioned/index.js +0 -2
- package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +0 -22
- package/dist/cjs/services/documentStore/versioned/dynamodb.js +0 -135
- package/dist/cjs/services/documentStore/versioned/file-system.d.ts +0 -24
- package/dist/cjs/services/documentStore/versioned/file-system.js +0 -62
- package/dist/cjs/services/documentStore/versioned/index.d.ts +0 -17
- package/dist/cjs/services/documentStore/versioned/index.js +0 -2
- package/dist/cjs/services/exercisesGateway/index.d.ts +0 -71
- package/dist/cjs/services/exercisesGateway/index.js +0 -97
- package/dist/cjs/services/fileServer/index.d.ts +0 -19
- package/dist/cjs/services/fileServer/index.js +0 -19
- package/dist/cjs/services/fileServer/localFileServer.d.ts +0 -17
- package/dist/cjs/services/fileServer/localFileServer.js +0 -80
- package/dist/cjs/services/fileServer/s3FileServer.d.ts +0 -16
- package/dist/cjs/services/fileServer/s3FileServer.js +0 -49
- package/dist/cjs/services/launchParams/index.d.ts +0 -2
- package/dist/cjs/services/launchParams/index.js +0 -7
- package/dist/cjs/services/launchParams/signer.d.ts +0 -27
- package/dist/cjs/services/launchParams/signer.js +0 -58
- package/dist/cjs/services/launchParams/verifier.d.ts +0 -22
- package/dist/cjs/services/launchParams/verifier.js +0 -94
- package/dist/cjs/services/logger/console.d.ts +0 -4
- package/dist/cjs/services/logger/console.js +0 -12
- package/dist/cjs/services/logger/index.d.ts +0 -39
- package/dist/cjs/services/logger/index.js +0 -31
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.js +0 -21
- package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +0 -70
- package/dist/cjs/services/lrsGateway/attempt-utils.js +0 -258
- package/dist/cjs/services/lrsGateway/file-system.d.ts +0 -17
- package/dist/cjs/services/lrsGateway/file-system.js +0 -140
- package/dist/cjs/services/lrsGateway/index.d.ts +0 -125
- package/dist/cjs/services/lrsGateway/index.js +0 -138
- package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +0 -61
- package/dist/cjs/services/lrsGateway/xapiUtils.js +0 -94
- package/dist/cjs/services/postgresConnection/index.d.ts +0 -35
- package/dist/cjs/services/postgresConnection/index.js +0 -65
- package/dist/cjs/services/searchProvider/index.d.ts +0 -31
- package/dist/cjs/services/searchProvider/index.js +0 -2
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +0 -14
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +0 -89
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +0 -1
- package/dist/cjs/types.d.ts +0 -31
- package/dist/cjs/types.js +0 -2
- package/dist/esm/assertions/index.d.ts +0 -85
- package/dist/esm/assertions/index.js +0 -146
- package/dist/esm/aws/ssmService.d.ts +0 -5
- package/dist/esm/aws/ssmService.js +0 -6
- package/dist/esm/config/awsParameterConfig.d.ts +0 -10
- package/dist/esm/config/awsParameterConfig.js +0 -22
- package/dist/esm/config/envConfig.d.ts +0 -24
- package/dist/esm/config/envConfig.js +0 -53
- package/dist/esm/config/index.d.ts +0 -48
- package/dist/esm/config/index.js +0 -17
- package/dist/esm/config/lambdaParameterConfig.d.ts +0 -12
- package/dist/esm/config/lambdaParameterConfig.js +0 -38
- package/dist/esm/config/replaceConfig.d.ts +0 -14
- package/dist/esm/config/replaceConfig.js +0 -18
- package/dist/esm/config/resolveConfigValue.d.ts +0 -5
- package/dist/esm/config/resolveConfigValue.js +0 -8
- package/dist/esm/errors/index.d.ts +0 -66
- package/dist/esm/errors/index.js +0 -86
- package/dist/esm/fetch/fetchStatusRetry.d.ts +0 -7
- package/dist/esm/fetch/fetchStatusRetry.js +0 -12
- package/dist/esm/fetch/index.d.ts +0 -64
- package/dist/esm/fetch/index.js +0 -46
- package/dist/esm/guards/index.d.ts +0 -30
- package/dist/esm/guards/index.js +0 -28
- package/dist/esm/index.d.ts +0 -4
- package/dist/esm/index.js +0 -4
- package/dist/esm/middleware/apiErrorHandler.d.ts +0 -23
- package/dist/esm/middleware/apiErrorHandler.js +0 -36
- package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +0 -23
- package/dist/esm/middleware/apiSlowResponseMiddleware.js +0 -50
- package/dist/esm/middleware/index.d.ts +0 -47
- package/dist/esm/middleware/index.js +0 -44
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +0 -38
- package/dist/esm/middleware/throwNotFoundMiddleware.d.ts +0 -4
- package/dist/esm/middleware/throwNotFoundMiddleware.js +0 -10
- package/dist/esm/misc/hashValue.d.ts +0 -10
- package/dist/esm/misc/hashValue.js +0 -13
- package/dist/esm/misc/helpers.d.ts +0 -124
- package/dist/esm/misc/helpers.js +0 -199
- package/dist/esm/misc/merge.d.ts +0 -21
- package/dist/esm/misc/merge.js +0 -40
- package/dist/esm/misc/partitionSequence.d.ts +0 -35
- package/dist/esm/misc/partitionSequence.js +0 -48
- package/dist/esm/pagination/index.d.ts +0 -91
- package/dist/esm/pagination/index.js +0 -77
- package/dist/esm/routing/helpers.d.ts +0 -57
- package/dist/esm/routing/helpers.js +0 -83
- package/dist/esm/routing/index.d.ts +0 -272
- package/dist/esm/routing/index.js +0 -232
- package/dist/esm/routing/validators/zod.d.ts +0 -4
- package/dist/esm/routing/validators/zod.js +0 -8
- package/dist/esm/services/accountsGateway/index.d.ts +0 -85
- package/dist/esm/services/accountsGateway/index.js +0 -111
- package/dist/esm/services/apiGateway/index.d.ts +0 -59
- package/dist/esm/services/apiGateway/index.js +0 -65
- package/dist/esm/services/authProvider/browser.d.ts +0 -74
- package/dist/esm/services/authProvider/browser.js +0 -150
- package/dist/esm/services/authProvider/decryption.d.ts +0 -19
- package/dist/esm/services/authProvider/decryption.js +0 -57
- package/dist/esm/services/authProvider/index.d.ts +0 -61
- package/dist/esm/services/authProvider/index.js +0 -18
- package/dist/esm/services/authProvider/subrequest.d.ts +0 -16
- package/dist/esm/services/authProvider/subrequest.js +0 -43
- package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +0 -29
- package/dist/esm/services/authProvider/utils/decryptAndVerify.js +0 -85
- package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
- package/dist/esm/services/authProvider/utils/embeddedAuthProvider.js +0 -40
- package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +0 -13
- package/dist/esm/services/authProvider/utils/userRoleValidator.js +0 -33
- package/dist/esm/services/documentStore/dynamoEncoding.d.ts +0 -10
- package/dist/esm/services/documentStore/dynamoEncoding.js +0 -45
- package/dist/esm/services/documentStore/index.d.ts +0 -14
- package/dist/esm/services/documentStore/index.js +0 -1
- package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +0 -16
- package/dist/esm/services/documentStore/unversioned/dynamodb.js +0 -118
- package/dist/esm/services/documentStore/unversioned/file-system.d.ts +0 -18
- package/dist/esm/services/documentStore/unversioned/file-system.js +0 -91
- package/dist/esm/services/documentStore/unversioned/index.d.ts +0 -2
- package/dist/esm/services/documentStore/unversioned/index.js +0 -1
- package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +0 -22
- package/dist/esm/services/documentStore/versioned/dynamodb.js +0 -131
- package/dist/esm/services/documentStore/versioned/file-system.d.ts +0 -24
- package/dist/esm/services/documentStore/versioned/file-system.js +0 -58
- package/dist/esm/services/documentStore/versioned/index.d.ts +0 -17
- package/dist/esm/services/documentStore/versioned/index.js +0 -1
- package/dist/esm/services/exercisesGateway/index.d.ts +0 -71
- package/dist/esm/services/exercisesGateway/index.js +0 -70
- package/dist/esm/services/fileServer/index.d.ts +0 -19
- package/dist/esm/services/fileServer/index.js +0 -13
- package/dist/esm/services/fileServer/localFileServer.d.ts +0 -17
- package/dist/esm/services/fileServer/localFileServer.js +0 -73
- package/dist/esm/services/fileServer/s3FileServer.d.ts +0 -16
- package/dist/esm/services/fileServer/s3FileServer.js +0 -45
- package/dist/esm/services/launchParams/index.d.ts +0 -2
- package/dist/esm/services/launchParams/index.js +0 -2
- package/dist/esm/services/launchParams/signer.d.ts +0 -27
- package/dist/esm/services/launchParams/signer.js +0 -51
- package/dist/esm/services/launchParams/verifier.d.ts +0 -22
- package/dist/esm/services/launchParams/verifier.js +0 -67
- package/dist/esm/services/logger/console.d.ts +0 -4
- package/dist/esm/services/logger/console.js +0 -8
- package/dist/esm/services/logger/index.d.ts +0 -39
- package/dist/esm/services/logger/index.js +0 -27
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.js +0 -14
- package/dist/esm/services/lrsGateway/attempt-utils.d.ts +0 -70
- package/dist/esm/services/lrsGateway/attempt-utils.js +0 -236
- package/dist/esm/services/lrsGateway/file-system.d.ts +0 -17
- package/dist/esm/services/lrsGateway/file-system.js +0 -110
- package/dist/esm/services/lrsGateway/index.d.ts +0 -125
- package/dist/esm/services/lrsGateway/index.js +0 -111
- package/dist/esm/services/lrsGateway/xapiUtils.d.ts +0 -61
- package/dist/esm/services/lrsGateway/xapiUtils.js +0 -84
- package/dist/esm/services/postgresConnection/index.d.ts +0 -35
- package/dist/esm/services/postgresConnection/index.js +0 -58
- package/dist/esm/services/searchProvider/index.d.ts +0 -31
- package/dist/esm/services/searchProvider/index.js +0 -1
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +0 -14
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +0 -85
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +0 -1
- package/dist/esm/types.d.ts +0 -31
- 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,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 {};
|