@openstax/ts-utils 1.44.1 → 1.44.3
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/cjs/aws/ssmService.js +2 -2
- package/dist/cjs/config/awsParameterConfig.d.ts +1 -1
- package/dist/cjs/config/awsParameterConfig.js +7 -7
- package/dist/cjs/config/envConfig.d.ts +1 -1
- package/dist/cjs/config/envConfig.js +2 -2
- package/dist/cjs/config/index.d.ts +5 -5
- package/dist/cjs/config/index.js +5 -5
- package/dist/cjs/config/lambdaParameterConfig.d.ts +1 -1
- package/dist/cjs/config/lambdaParameterConfig.js +10 -10
- package/dist/cjs/config/replaceConfig.d.ts +1 -1
- package/dist/cjs/config/replaceConfig.js +3 -3
- package/dist/cjs/config/resolveConfigValue.d.ts +1 -1
- package/dist/cjs/errors/index.d.ts +1 -1
- package/dist/cjs/fetch/fetchStatusRetry.d.ts +2 -2
- package/dist/cjs/fetch/fetchStatusRetry.js +2 -2
- package/dist/cjs/fetch/index.d.ts +1 -1
- package/dist/cjs/index.d.ts +5 -5
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/middleware/apiErrorHandler.d.ts +3 -3
- package/dist/cjs/middleware/apiErrorHandler.js +12 -12
- package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +3 -3
- package/dist/cjs/middleware/apiSlowResponseMiddleware.js +9 -9
- package/dist/cjs/middleware/index.d.ts +1 -1
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +5 -5
- package/dist/cjs/middleware/throwNotFoundMiddleware.js +2 -2
- package/dist/cjs/misc/helpers.d.ts +1 -1
- package/dist/cjs/misc/jwks.js +3 -3
- package/dist/cjs/misc/merge.d.ts +1 -1
- package/dist/cjs/misc/merge.js +2 -2
- package/dist/cjs/pagination/index.d.ts +1 -1
- package/dist/cjs/pagination/index.js +10 -10
- package/dist/cjs/routing/helpers.d.ts +1 -1
- package/dist/cjs/routing/helpers.js +7 -7
- package/dist/cjs/routing/index.d.ts +2 -2
- package/dist/cjs/routing/index.js +6 -6
- package/dist/cjs/routing/lambdaBatchRequestHandler.d.ts +2 -2
- package/dist/cjs/routing/lambdaBatchRequestHandler.js +6 -6
- package/dist/cjs/routing/validators/zod.js +2 -2
- package/dist/cjs/services/accountsGateway/index.d.ts +5 -5
- package/dist/cjs/services/accountsGateway/index.js +18 -18
- package/dist/cjs/services/apiGateway/index.d.ts +5 -5
- package/dist/cjs/services/apiGateway/index.js +12 -12
- package/dist/cjs/services/authProvider/browser.d.ts +4 -4
- package/dist/cjs/services/authProvider/browser.js +14 -14
- package/dist/cjs/services/authProvider/decryption.d.ts +3 -3
- package/dist/cjs/services/authProvider/decryption.js +17 -17
- package/dist/cjs/services/authProvider/index.d.ts +3 -3
- package/dist/cjs/services/authProvider/index.js +7 -7
- package/dist/cjs/services/authProvider/launchToken.d.ts +4 -4
- package/dist/cjs/services/authProvider/launchToken.js +6 -6
- package/dist/cjs/services/authProvider/subrequest.d.ts +3 -3
- package/dist/cjs/services/authProvider/subrequest.js +12 -12
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +3 -3
- package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +2 -2
- package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +3 -3
- package/dist/cjs/services/authProvider/utils/userRoleValidator.js +7 -7
- package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +2 -2
- package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +1 -1
- package/dist/cjs/services/documentStore/dynamoEncoding.js +2 -2
- package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +2 -2
- package/dist/cjs/services/documentStore/unversioned/dynamodb.js +30 -30
- package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +2 -2
- package/dist/cjs/services/documentStore/unversioned/file-system.js +13 -13
- package/dist/cjs/services/documentStore/unversioned/index.d.ts +1 -1
- package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +3 -3
- package/dist/cjs/services/documentStore/versioned/dynamodb.js +17 -17
- package/dist/cjs/services/documentStore/versioned/file-system.d.ts +3 -3
- package/dist/cjs/services/documentStore/versioned/file-system.js +2 -2
- package/dist/cjs/services/documentStore/versioned/index.d.ts +2 -2
- package/dist/cjs/services/exercisesGateway/index.d.ts +2 -2
- package/dist/cjs/services/exercisesGateway/index.js +14 -14
- package/dist/cjs/services/fileServer/index.js +3 -3
- package/dist/cjs/services/fileServer/localFileServer.d.ts +2 -2
- package/dist/cjs/services/fileServer/localFileServer.js +89 -28
- package/dist/cjs/services/fileServer/s3FileServer.d.ts +2 -2
- package/dist/cjs/services/fileServer/s3FileServer.js +14 -14
- package/dist/cjs/services/httpMessageVerifier/index.d.ts +1 -1
- package/dist/cjs/services/httpMessageVerifier/index.js +20 -20
- package/dist/cjs/services/launchParams/index.d.ts +2 -2
- package/dist/cjs/services/launchParams/index.js +4 -4
- package/dist/cjs/services/launchParams/signer.d.ts +2 -2
- package/dist/cjs/services/launchParams/signer.js +9 -9
- package/dist/cjs/services/launchParams/verifier.d.ts +1 -1
- package/dist/cjs/services/launchParams/verifier.js +11 -11
- package/dist/cjs/services/logger/console.d.ts +1 -1
- package/dist/cjs/services/logger/console.js +2 -2
- package/dist/cjs/services/logger/index.d.ts +1 -1
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.js +2 -7
- package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +11 -10
- package/dist/cjs/services/lrsGateway/attempt-utils.js +23 -8
- package/dist/cjs/services/lrsGateway/batching.d.ts +2 -2
- package/dist/cjs/services/lrsGateway/batching.js +2 -2
- package/dist/cjs/services/lrsGateway/file-system.d.ts +3 -3
- package/dist/cjs/services/lrsGateway/file-system.js +12 -17
- package/dist/cjs/services/lrsGateway/index.d.ts +7 -12
- package/dist/cjs/services/lrsGateway/index.js +26 -47
- package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +4 -4
- package/dist/cjs/services/lrsGateway/xapiUtils.js +7 -7
- package/dist/cjs/services/postgresConnection/index.d.ts +2 -2
- package/dist/cjs/services/postgresConnection/index.js +14 -14
- package/dist/cjs/services/queueProvider/local.d.ts +2 -2
- package/dist/cjs/services/queueProvider/local.js +6 -7
- package/dist/cjs/services/queueProvider/sqs.d.ts +2 -2
- package/dist/cjs/services/queueProvider/sqs.js +7 -7
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +9 -9
- package/dist/cjs/services/searchProvider/openSearch.d.ts +2 -2
- package/dist/cjs/services/searchProvider/openSearch.js +9 -9
- package/dist/cjs/services/searchProvider/streamIndexer.d.ts +2 -2
- package/dist/cjs/services/searchProvider/streamIndexer.js +3 -3
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
- package/dist/esm/aws/ssmService.js +1 -1
- package/dist/esm/config/awsParameterConfig.d.ts +1 -1
- package/dist/esm/config/awsParameterConfig.js +3 -3
- package/dist/esm/config/envConfig.d.ts +1 -1
- package/dist/esm/config/envConfig.js +1 -1
- package/dist/esm/config/index.d.ts +5 -5
- package/dist/esm/config/index.js +5 -5
- package/dist/esm/config/lambdaParameterConfig.d.ts +1 -1
- package/dist/esm/config/lambdaParameterConfig.js +4 -4
- package/dist/esm/config/replaceConfig.d.ts +1 -1
- package/dist/esm/config/replaceConfig.js +1 -1
- package/dist/esm/config/resolveConfigValue.d.ts +1 -1
- package/dist/esm/errors/index.d.ts +1 -1
- package/dist/esm/fetch/fetchStatusRetry.d.ts +2 -2
- package/dist/esm/fetch/fetchStatusRetry.js +1 -1
- package/dist/esm/fetch/index.d.ts +1 -1
- package/dist/esm/index.d.ts +5 -5
- package/dist/esm/index.js +5 -5
- package/dist/esm/middleware/apiErrorHandler.d.ts +3 -3
- package/dist/esm/middleware/apiErrorHandler.js +3 -3
- package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +3 -3
- package/dist/esm/middleware/apiSlowResponseMiddleware.js +4 -4
- package/dist/esm/middleware/index.d.ts +1 -1
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +3 -3
- package/dist/esm/middleware/throwNotFoundMiddleware.js +1 -1
- package/dist/esm/misc/helpers.d.ts +1 -1
- package/dist/esm/misc/jwks.js +1 -1
- package/dist/esm/misc/merge.d.ts +1 -1
- package/dist/esm/misc/merge.js +1 -1
- package/dist/esm/pagination/index.d.ts +1 -1
- package/dist/esm/pagination/index.js +3 -3
- package/dist/esm/routing/helpers.d.ts +1 -1
- package/dist/esm/routing/helpers.js +3 -3
- package/dist/esm/routing/index.d.ts +2 -2
- package/dist/esm/routing/index.js +3 -3
- package/dist/esm/routing/lambdaBatchRequestHandler.d.ts +2 -2
- package/dist/esm/routing/lambdaBatchRequestHandler.js +3 -3
- package/dist/esm/routing/validators/zod.js +1 -1
- package/dist/esm/services/accountsGateway/index.d.ts +5 -5
- package/dist/esm/services/accountsGateway/index.js +5 -5
- package/dist/esm/services/apiGateway/index.d.ts +5 -5
- package/dist/esm/services/apiGateway/index.js +5 -5
- package/dist/esm/services/authProvider/browser.d.ts +4 -4
- package/dist/esm/services/authProvider/browser.js +6 -6
- package/dist/esm/services/authProvider/decryption.d.ts +3 -3
- package/dist/esm/services/authProvider/decryption.js +7 -7
- package/dist/esm/services/authProvider/index.d.ts +3 -3
- package/dist/esm/services/authProvider/index.js +2 -2
- package/dist/esm/services/authProvider/launchToken.d.ts +4 -4
- package/dist/esm/services/authProvider/launchToken.js +2 -2
- package/dist/esm/services/authProvider/subrequest.d.ts +3 -3
- package/dist/esm/services/authProvider/subrequest.js +5 -5
- package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
- package/dist/esm/services/authProvider/utils/decryptAndVerify.js +1 -1
- package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +2 -2
- package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +3 -3
- package/dist/esm/services/authProvider/utils/userRoleValidator.js +4 -4
- package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +2 -2
- package/dist/esm/services/documentStore/dynamoEncoding.d.ts +1 -1
- package/dist/esm/services/documentStore/dynamoEncoding.js +1 -1
- package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +2 -2
- package/dist/esm/services/documentStore/unversioned/dynamodb.js +5 -5
- package/dist/esm/services/documentStore/unversioned/file-system.d.ts +2 -2
- package/dist/esm/services/documentStore/unversioned/file-system.js +4 -4
- package/dist/esm/services/documentStore/unversioned/index.d.ts +1 -1
- package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +3 -3
- package/dist/esm/services/documentStore/versioned/dynamodb.js +4 -4
- package/dist/esm/services/documentStore/versioned/file-system.d.ts +3 -3
- package/dist/esm/services/documentStore/versioned/file-system.js +1 -1
- package/dist/esm/services/documentStore/versioned/index.d.ts +2 -2
- package/dist/esm/services/exercisesGateway/index.d.ts +2 -2
- package/dist/esm/services/exercisesGateway/index.js +5 -5
- package/dist/esm/services/fileServer/index.js +1 -1
- package/dist/esm/services/fileServer/localFileServer.d.ts +2 -2
- package/dist/esm/services/fileServer/localFileServer.js +83 -22
- package/dist/esm/services/fileServer/s3FileServer.d.ts +2 -2
- package/dist/esm/services/fileServer/s3FileServer.js +5 -5
- package/dist/esm/services/httpMessageVerifier/index.d.ts +1 -1
- package/dist/esm/services/httpMessageVerifier/index.js +6 -6
- package/dist/esm/services/launchParams/index.d.ts +2 -2
- package/dist/esm/services/launchParams/index.js +2 -2
- package/dist/esm/services/launchParams/signer.d.ts +2 -2
- package/dist/esm/services/launchParams/signer.js +3 -3
- package/dist/esm/services/launchParams/verifier.d.ts +1 -1
- package/dist/esm/services/launchParams/verifier.js +5 -5
- package/dist/esm/services/logger/console.d.ts +1 -1
- package/dist/esm/services/logger/console.js +1 -1
- package/dist/esm/services/logger/index.d.ts +1 -1
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.js +2 -7
- package/dist/esm/services/lrsGateway/attempt-utils.d.ts +11 -10
- package/dist/esm/services/lrsGateway/attempt-utils.js +21 -7
- package/dist/esm/services/lrsGateway/batching.d.ts +2 -2
- package/dist/esm/services/lrsGateway/batching.js +1 -1
- package/dist/esm/services/lrsGateway/file-system.d.ts +3 -3
- package/dist/esm/services/lrsGateway/file-system.js +7 -12
- package/dist/esm/services/lrsGateway/index.d.ts +7 -12
- package/dist/esm/services/lrsGateway/index.js +12 -33
- package/dist/esm/services/lrsGateway/xapiUtils.d.ts +4 -4
- package/dist/esm/services/lrsGateway/xapiUtils.js +2 -2
- package/dist/esm/services/postgresConnection/index.d.ts +2 -2
- package/dist/esm/services/postgresConnection/index.js +4 -4
- package/dist/esm/services/queueProvider/local.d.ts +2 -2
- package/dist/esm/services/queueProvider/local.js +3 -4
- package/dist/esm/services/queueProvider/sqs.d.ts +2 -2
- package/dist/esm/services/queueProvider/sqs.js +3 -3
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +3 -3
- package/dist/esm/services/searchProvider/openSearch.d.ts +2 -2
- package/dist/esm/services/searchProvider/openSearch.js +4 -4
- package/dist/esm/services/searchProvider/streamIndexer.d.ts +2 -2
- package/dist/esm/services/searchProvider/streamIndexer.js +1 -1
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
- package/package.json +39 -44
- package/script/build.bash +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { LrsGateway, UXapiStatement } from '.';
|
|
1
|
+
import { LrsGateway, UXapiStatement, XapiAgent } from './index.js';
|
|
2
|
+
export declare const formatAgent: (agent: string | XapiAgent) => XapiAgent;
|
|
2
3
|
export declare const EXT_PENDING_SCORING = "https://openstax.org/xapi/extensions/pending-scoring";
|
|
3
4
|
export type AttemptEntry = {
|
|
4
5
|
attempt: UXapiStatement;
|
|
@@ -41,7 +42,7 @@ export declare const loadStatementsForActivityAndFirstChildren: (gateway: LrsGat
|
|
|
41
42
|
attempt?: string;
|
|
42
43
|
ensureSync?: boolean;
|
|
43
44
|
user?: string;
|
|
44
|
-
}) => Promise<import(".").XapiStatement[]>;
|
|
45
|
+
}) => Promise<import("./index.js").XapiStatement[]>;
|
|
45
46
|
export declare const loadActivityAttemptInfo: (gateway: LrsGateway, activityIRI: string, options?: {
|
|
46
47
|
currentAttempt?: string;
|
|
47
48
|
parentActivityAttempt?: string;
|
|
@@ -54,7 +55,7 @@ export declare const createStatement: (verb: UXapiStatement["verb"], activity: {
|
|
|
54
55
|
extensions?: {
|
|
55
56
|
[key: string]: string;
|
|
56
57
|
};
|
|
57
|
-
}, attempt: string, parentActivityIRI?: string) => Pick<UXapiStatement, "object" | "verb" | "context">;
|
|
58
|
+
}, attempt: string, parentActivityIRI?: string, instructor?: string) => Pick<UXapiStatement, "object" | "verb" | "context">;
|
|
58
59
|
export declare const createAttemptStatement: (activity: {
|
|
59
60
|
iri: string;
|
|
60
61
|
type: string;
|
|
@@ -76,14 +77,14 @@ export declare const putAttemptStatement: (gateway: LrsGateway, activity: {
|
|
|
76
77
|
}, parentActivity?: {
|
|
77
78
|
iri?: string;
|
|
78
79
|
attempt?: string;
|
|
79
|
-
}) => Promise<import(".").EagerXapiStatement>;
|
|
80
|
+
}) => Promise<import("./index.js").EagerXapiStatement>;
|
|
80
81
|
export declare const createAttemptActivityStatement: (attemptStatement: UXapiStatement, verb: UXapiStatement["verb"], result?: UXapiStatement["result"]) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
81
|
-
export declare const putAttemptActivityStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, verb: UXapiStatement["verb"], result?: UXapiStatement["result"]) => Promise<import(".").EagerXapiStatement>;
|
|
82
|
+
export declare const putAttemptActivityStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, verb: UXapiStatement["verb"], result?: UXapiStatement["result"]) => Promise<import("./index.js").EagerXapiStatement>;
|
|
82
83
|
export declare const createCompletedStatement: (attemptStatement: UXapiStatement, result?: UXapiStatement["result"]) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
83
|
-
export declare const putCompletedStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"], user?: string) => Promise<import(".").EagerXapiStatement>;
|
|
84
|
+
export declare const putCompletedStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"], user?: string) => Promise<import("./index.js").EagerXapiStatement>;
|
|
84
85
|
export declare const createCompletedPendingScoringStatement: (attemptStatement: UXapiStatement) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
85
|
-
export declare const putCompletedPendingScoringStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, user?: string) => Promise<import(".").EagerXapiStatement>;
|
|
86
|
-
export declare const createScoredStatement: (attemptStatement: UXapiStatement, result: UXapiStatement["result"]) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
87
|
-
export declare const putScoredStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"], user?: string) => Promise<import(".").EagerXapiStatement>;
|
|
86
|
+
export declare const putCompletedPendingScoringStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, user?: string) => Promise<import("./index.js").EagerXapiStatement>;
|
|
87
|
+
export declare const createScoredStatement: (attemptStatement: UXapiStatement, result: UXapiStatement["result"], instructor?: string) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
88
|
+
export declare const putScoredStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"], user?: string, instructor?: string) => Promise<import("./index.js").EagerXapiStatement>;
|
|
88
89
|
export declare const createScoredPendingScoringStatement: (attemptStatement: UXapiStatement, result: UXapiStatement["result"]) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
89
|
-
export declare const putScoredPendingScoringStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"], user?: string) => Promise<import(".").EagerXapiStatement>;
|
|
90
|
+
export declare const putScoredPendingScoringStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"], user?: string) => Promise<import("./index.js").EagerXapiStatement>;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.putScoredPendingScoringStatement = exports.createScoredPendingScoringStatement = exports.putScoredStatement = exports.createScoredStatement = exports.putCompletedPendingScoringStatement = exports.createCompletedPendingScoringStatement = exports.putCompletedStatement = exports.createCompletedStatement = exports.putAttemptActivityStatement = exports.createAttemptActivityStatement = exports.putAttemptStatement = exports.createAttemptStatement = exports.createStatement = exports.loadActivityAttemptInfo = exports.loadStatementsForActivityAndFirstChildren = exports.resolveAttemptInfo = exports.bestEntry = exports.mostRecentEntry = exports.oldestEntry = exports.mostRecentStatement = exports.oldestStatement = exports.getStatementTime = exports.getStatementTimeString = exports.resolveScoredForAttempt = exports.resolveCompletedForAttempt = exports.resolveAttempts = exports.matchAttemptScored = exports.matchAttemptCompleted = exports.matchAttempt = exports.EXT_PENDING_SCORING = void 0;
|
|
6
|
+
exports.putScoredPendingScoringStatement = exports.createScoredPendingScoringStatement = exports.putScoredStatement = exports.createScoredStatement = exports.putCompletedPendingScoringStatement = exports.createCompletedPendingScoringStatement = exports.putCompletedStatement = exports.createCompletedStatement = exports.putAttemptActivityStatement = exports.createAttemptActivityStatement = exports.putAttemptStatement = exports.createAttemptStatement = exports.createStatement = exports.loadActivityAttemptInfo = exports.loadStatementsForActivityAndFirstChildren = exports.resolveAttemptInfo = exports.bestEntry = exports.mostRecentEntry = exports.oldestEntry = exports.mostRecentStatement = exports.oldestStatement = exports.getStatementTime = exports.getStatementTimeString = exports.resolveScoredForAttempt = exports.resolveCompletedForAttempt = exports.resolveAttempts = exports.matchAttemptScored = exports.matchAttemptCompleted = exports.matchAttempt = exports.EXT_PENDING_SCORING = exports.formatAgent = void 0;
|
|
7
7
|
/*
|
|
8
8
|
* the structure of xapi statements for handling multiple attempts of an activity
|
|
9
9
|
* including the option of a parent activity/attempt such that a new attempt
|
|
@@ -17,6 +17,19 @@ const intervalToDuration_1 = __importDefault(require("date-fns/intervalToDuratio
|
|
|
17
17
|
const isAfter_1 = __importDefault(require("date-fns/isAfter"));
|
|
18
18
|
const isBefore_1 = __importDefault(require("date-fns/isBefore"));
|
|
19
19
|
const parseISO_1 = __importDefault(require("date-fns/parseISO"));
|
|
20
|
+
const formatAgent = (agent) => {
|
|
21
|
+
if (typeof agent === 'string') {
|
|
22
|
+
return {
|
|
23
|
+
objectType: 'Agent',
|
|
24
|
+
account: {
|
|
25
|
+
homePage: 'https://openstax.org',
|
|
26
|
+
name: agent,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return agent;
|
|
31
|
+
};
|
|
32
|
+
exports.formatAgent = formatAgent;
|
|
20
33
|
var Verb;
|
|
21
34
|
(function (Verb) {
|
|
22
35
|
Verb["Attempted"] = "http://adlnet.gov/expapi/verbs/attempted";
|
|
@@ -170,7 +183,7 @@ const loadActivityAttemptInfo = async (gateway, activityIRI, options) => {
|
|
|
170
183
|
return (0, exports.resolveAttemptInfo)(await gateway.getAllXapiStatements({ ...loadOptions, activity: activityIRI }), { ...options, activityIRI });
|
|
171
184
|
};
|
|
172
185
|
exports.loadActivityAttemptInfo = loadActivityAttemptInfo;
|
|
173
|
-
const createStatement = (verb, activity, attempt, parentActivityIRI) => {
|
|
186
|
+
const createStatement = (verb, activity, attempt, parentActivityIRI, instructor) => {
|
|
174
187
|
return {
|
|
175
188
|
context: {
|
|
176
189
|
...(parentActivityIRI ? {
|
|
@@ -184,6 +197,7 @@ const createStatement = (verb, activity, attempt, parentActivityIRI) => {
|
|
|
184
197
|
},
|
|
185
198
|
} : {}),
|
|
186
199
|
registration: attempt,
|
|
200
|
+
...(instructor ? { instructor: (0, exports.formatAgent)(instructor) } : {}),
|
|
187
201
|
},
|
|
188
202
|
object: {
|
|
189
203
|
definition: {
|
|
@@ -228,7 +242,7 @@ const createAttemptStatement = (activity, parentActivity) => {
|
|
|
228
242
|
} : {}),
|
|
229
243
|
...(parentActivity.attempt ? {
|
|
230
244
|
registration: parentActivity.attempt,
|
|
231
|
-
} : {})
|
|
245
|
+
} : {}),
|
|
232
246
|
},
|
|
233
247
|
} : {}),
|
|
234
248
|
object: {
|
|
@@ -298,7 +312,7 @@ const createCompletedStatement = (attemptStatement, result) => {
|
|
|
298
312
|
statement: {
|
|
299
313
|
objectType: 'StatementRef',
|
|
300
314
|
id: attemptStatement.id,
|
|
301
|
-
}
|
|
315
|
+
},
|
|
302
316
|
},
|
|
303
317
|
object: attemptStatement.object,
|
|
304
318
|
verb: {
|
|
@@ -330,7 +344,7 @@ const putCompletedPendingScoringStatement = async (gateway, attemptStatement, us
|
|
|
330
344
|
};
|
|
331
345
|
exports.putCompletedPendingScoringStatement = putCompletedPendingScoringStatement;
|
|
332
346
|
// scored statement for when the open written response has been graded.
|
|
333
|
-
const createScoredStatement = (attemptStatement, result) => {
|
|
347
|
+
const createScoredStatement = (attemptStatement, result, instructor) => {
|
|
334
348
|
var _a, _b;
|
|
335
349
|
return {
|
|
336
350
|
context: {
|
|
@@ -343,7 +357,8 @@ const createScoredStatement = (attemptStatement, result) => {
|
|
|
343
357
|
statement: {
|
|
344
358
|
objectType: 'StatementRef',
|
|
345
359
|
id: attemptStatement.id,
|
|
346
|
-
}
|
|
360
|
+
},
|
|
361
|
+
...(instructor ? { instructor: (0, exports.formatAgent)(instructor) } : {}),
|
|
347
362
|
},
|
|
348
363
|
object: attemptStatement.object,
|
|
349
364
|
verb: {
|
|
@@ -357,8 +372,8 @@ const createScoredStatement = (attemptStatement, result) => {
|
|
|
357
372
|
};
|
|
358
373
|
};
|
|
359
374
|
exports.createScoredStatement = createScoredStatement;
|
|
360
|
-
const putScoredStatement = async (gateway, attemptStatement, result, user) => {
|
|
361
|
-
return (await gateway.putXapiStatements([(0, exports.createScoredStatement)(attemptStatement, result)], user))[0];
|
|
375
|
+
const putScoredStatement = async (gateway, attemptStatement, result, user, instructor) => {
|
|
376
|
+
return (await gateway.putXapiStatements([(0, exports.createScoredStatement)(attemptStatement, result, instructor)], user))[0];
|
|
362
377
|
};
|
|
363
378
|
exports.putScoredStatement = putScoredStatement;
|
|
364
379
|
// scored statement for retry assessments - records a score but marks the attempt as still pending scoring
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GenericFetch, Response } from '../../fetch';
|
|
2
|
-
import { METHOD } from '../../routing';
|
|
1
|
+
import { GenericFetch, Response } from '../../fetch/index.js';
|
|
2
|
+
import { METHOD } from '../../routing/index.js';
|
|
3
3
|
export interface BatchRequest {
|
|
4
4
|
id: string;
|
|
5
5
|
path: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RequestBatcher = void 0;
|
|
4
|
-
const
|
|
4
|
+
const index_js_1 = require("../../routing/index.js");
|
|
5
5
|
/**
|
|
6
6
|
* Handles automatic request batching using microtask queue scheduling.
|
|
7
7
|
* Batches concurrent requests within the same event loop tick.
|
|
@@ -70,7 +70,7 @@ class RequestBatcher {
|
|
|
70
70
|
// Send batch request
|
|
71
71
|
const batchUrl = host.replace(/\/+$/, '') + this.config.batchEndpoint;
|
|
72
72
|
const batchResponse = await this.fetcher(batchUrl, {
|
|
73
|
-
method:
|
|
73
|
+
method: index_js_1.METHOD.POST,
|
|
74
74
|
headers: {
|
|
75
75
|
Authorization: authHeader,
|
|
76
76
|
'Content-Type': 'application/json',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
-
import { AuthProvider } from '../authProvider';
|
|
3
|
-
import { LrsGateway } from '.';
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
2
|
+
import { AuthProvider } from '../authProvider/index.js';
|
|
3
|
+
import { LrsGateway } from './index.js';
|
|
4
4
|
type Config = {
|
|
5
5
|
name: string;
|
|
6
6
|
};
|
|
@@ -41,16 +41,17 @@ const fsModule = __importStar(require("fs"));
|
|
|
41
41
|
const path_1 = __importDefault(require("path"));
|
|
42
42
|
const formatISO_1 = __importDefault(require("date-fns/formatISO"));
|
|
43
43
|
const uuid_1 = require("uuid");
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
44
|
+
const index_js_1 = require("../../assertions/index.js");
|
|
45
|
+
const index_js_2 = require("../../config/index.js");
|
|
46
|
+
const index_js_3 = require("../../errors/index.js");
|
|
47
|
+
const index_js_4 = require("../../guards/index.js");
|
|
48
|
+
const hashValue_js_1 = require("../../misc/hashValue.js");
|
|
49
|
+
const attempt_utils_js_1 = require("./attempt-utils.js");
|
|
49
50
|
const pageSize = 5;
|
|
50
51
|
const fileSystemLrsGateway = (initializer) => (configProvider) => ({ authProvider }) => {
|
|
51
|
-
const name = (0,
|
|
52
|
+
const name = (0, index_js_2.resolveConfigValue)(configProvider[initializer.configSpace || 'fileSystem'].name);
|
|
52
53
|
const filePath = name.then((fileName) => path_1.default.join(initializer.dataDir, fileName));
|
|
53
|
-
const { readFile, writeFile } = (0,
|
|
54
|
+
const { readFile, writeFile } = (0, index_js_4.ifDefined)(initializer.fs, fsModule);
|
|
54
55
|
let data;
|
|
55
56
|
let stateData;
|
|
56
57
|
/**
|
|
@@ -58,7 +59,7 @@ const fileSystemLrsGateway = (initializer) => (configProvider) => ({ authProvide
|
|
|
58
59
|
*/
|
|
59
60
|
const makeStateKey = (activityId, agent, stateId, registration) => {
|
|
60
61
|
const agentName = typeof agent === 'string' ? agent : agent.account.name;
|
|
61
|
-
return (0,
|
|
62
|
+
return (0, hashValue_js_1.hashValue)({ activityId, agentName, stateId, registration });
|
|
62
63
|
};
|
|
63
64
|
const stateFilePath = name.then((fileName) => path_1.default.join(initializer.dataDir, `${fileName}-state`));
|
|
64
65
|
const load = filePath.then(filePath => new Promise(resolve => {
|
|
@@ -104,17 +105,11 @@ const fileSystemLrsGateway = (initializer) => (configProvider) => ({ authProvide
|
|
|
104
105
|
const putXapiStatements = async (statements, user) => {
|
|
105
106
|
const author = user
|
|
106
107
|
? { uuid: user }
|
|
107
|
-
: (0,
|
|
108
|
+
: (0, index_js_1.assertDefined)(await authProvider.getUser(), new index_js_3.UnauthorizedError);
|
|
108
109
|
const statementsWithDefaults = statements.map(statement => ({
|
|
109
110
|
...statement,
|
|
110
111
|
id: (0, uuid_1.v4)(),
|
|
111
|
-
actor:
|
|
112
|
-
account: {
|
|
113
|
-
homePage: 'https://openstax.org',
|
|
114
|
-
name: author.uuid,
|
|
115
|
-
},
|
|
116
|
-
objectType: 'Agent',
|
|
117
|
-
},
|
|
112
|
+
actor: (0, attempt_utils_js_1.formatAgent)(author.uuid),
|
|
118
113
|
timestamp: (0, formatISO_1.default)(new Date()),
|
|
119
114
|
}));
|
|
120
115
|
await load;
|
|
@@ -136,7 +131,7 @@ const fileSystemLrsGateway = (initializer) => (configProvider) => ({ authProvide
|
|
|
136
131
|
const statementDate = new Date(statement.timestamp);
|
|
137
132
|
const sinceDate = options.since ? new Date(options.since) : null;
|
|
138
133
|
const untilDate = options.until ? new Date(options.until) : null;
|
|
139
|
-
return (anyUser === true || statement.actor.account.name === (user || (0,
|
|
134
|
+
return (anyUser === true || statement.actor.account.name === (user || (0, index_js_1.assertDefined)(authUser, new index_js_3.UnauthorizedError()).uuid))
|
|
140
135
|
&& (!options.verb || statement.verb.id === options.verb)
|
|
141
136
|
&& (!options.registration || ((_a = statement.context) === null || _a === void 0 ? void 0 : _a.registration) === options.registration)
|
|
142
137
|
&& (!options.activity || (options.related_activities
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
-
import { GenericFetch } from '../../fetch';
|
|
3
|
-
import { WithRequired } from '../../types';
|
|
4
|
-
import { AuthProvider } from '../authProvider';
|
|
5
|
-
import { Logger } from '../logger';
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
2
|
+
import { GenericFetch } from '../../fetch/index.js';
|
|
3
|
+
import { WithRequired } from '../../types.js';
|
|
4
|
+
import { AuthProvider } from '../authProvider/index.js';
|
|
5
|
+
import { Logger } from '../logger/index.js';
|
|
6
6
|
type Config = {
|
|
7
7
|
lrsHost: string;
|
|
8
8
|
lrsAuthorization: string;
|
|
@@ -23,13 +23,7 @@ export interface StateDocument {
|
|
|
23
23
|
[key: string]: any;
|
|
24
24
|
}
|
|
25
25
|
export interface XapiStatement {
|
|
26
|
-
actor:
|
|
27
|
-
account: {
|
|
28
|
-
homePage: 'https://openstax.org';
|
|
29
|
-
name: string;
|
|
30
|
-
};
|
|
31
|
-
objectType: 'Agent';
|
|
32
|
-
};
|
|
26
|
+
actor: XapiAgent;
|
|
33
27
|
id: string;
|
|
34
28
|
context?: {
|
|
35
29
|
contextActivities?: {
|
|
@@ -46,6 +40,7 @@ export interface XapiStatement {
|
|
|
46
40
|
};
|
|
47
41
|
registration?: string;
|
|
48
42
|
platform?: string;
|
|
43
|
+
instructor?: XapiAgent;
|
|
49
44
|
};
|
|
50
45
|
object: {
|
|
51
46
|
definition?: {
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.lrsGateway = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
4
|
+
const index_js_1 = require("../../assertions/index.js");
|
|
5
|
+
const index_js_2 = require("../../config/index.js");
|
|
6
|
+
const index_js_3 = require("../../errors/index.js");
|
|
7
|
+
const fetchStatusRetry_js_1 = require("../../fetch/fetchStatusRetry.js");
|
|
8
|
+
const index_js_4 = require("../../guards/index.js");
|
|
9
|
+
const index_js_5 = require("../../index.js");
|
|
10
|
+
const helpers_js_1 = require("../../misc/helpers.js");
|
|
11
|
+
const index_js_6 = require("../../routing/index.js");
|
|
12
|
+
const addStatementDefaultFields_js_1 = require("./addStatementDefaultFields.js");
|
|
13
|
+
const attempt_utils_js_1 = require("./attempt-utils.js");
|
|
14
|
+
const batching_js_1 = require("./batching.js");
|
|
14
15
|
const lrsGateway = (initializer) => (configProvider) => {
|
|
15
|
-
const config = configProvider[(0,
|
|
16
|
-
const lrsHost = (0,
|
|
17
|
-
const lrsAuthorization = (0,
|
|
16
|
+
const config = configProvider[(0, index_js_4.ifDefined)(initializer.configSpace, 'lrs')];
|
|
17
|
+
const lrsHost = (0, index_js_5.once)(() => (0, index_js_2.resolveConfigValue)(config.lrsHost));
|
|
18
|
+
const lrsAuthorization = (0, index_js_5.once)(() => (0, index_js_2.resolveConfigValue)(config.lrsAuthorization));
|
|
18
19
|
return ({ authProvider, logger }) => {
|
|
19
|
-
const fetcher = (0,
|
|
20
|
+
const fetcher = (0, fetchStatusRetry_js_1.fetchStatusRetry)(initializer.fetch, {
|
|
20
21
|
logger,
|
|
21
22
|
retries: 2,
|
|
22
23
|
wait: 1000,
|
|
@@ -24,7 +25,7 @@ const lrsGateway = (initializer) => (configProvider) => {
|
|
|
24
25
|
});
|
|
25
26
|
// Initialize request batcher if batching is enabled
|
|
26
27
|
const enableBatching = initializer.enableBatching !== false;
|
|
27
|
-
const batcher = new
|
|
28
|
+
const batcher = new batching_js_1.RequestBatcher(fetcher, {
|
|
28
29
|
batchEndpoint: '/api/batch',
|
|
29
30
|
getAuthHeader: lrsAuthorization,
|
|
30
31
|
getHost: lrsHost,
|
|
@@ -36,31 +37,15 @@ const lrsGateway = (initializer) => (configProvider) => {
|
|
|
36
37
|
const makeFetch = async (options) => {
|
|
37
38
|
return enableBatching ? batcher.queueRequest(options) : batcher.singleRequest(options);
|
|
38
39
|
};
|
|
39
|
-
/**
|
|
40
|
-
* Formats an agent parameter into a full XapiAgent object.
|
|
41
|
-
* Accepts either a UUID string or a full XapiAgent object.
|
|
42
|
-
*/
|
|
43
|
-
const formatAgent = (agent) => {
|
|
44
|
-
if (typeof agent === 'string') {
|
|
45
|
-
return {
|
|
46
|
-
objectType: 'Agent',
|
|
47
|
-
account: {
|
|
48
|
-
homePage: 'https://openstax.org',
|
|
49
|
-
name: agent,
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
return agent;
|
|
54
|
-
};
|
|
55
40
|
// Note: This method actually uses POST
|
|
56
41
|
const putXapiStatements = async (statements, user) => {
|
|
57
42
|
const userObj = user
|
|
58
43
|
? { uuid: user }
|
|
59
|
-
: (0,
|
|
60
|
-
const statementsWithDefaults = statements.map(statement => (0,
|
|
44
|
+
: (0, index_js_1.assertDefined)(await authProvider.getUser(), new index_js_3.UnauthorizedError);
|
|
45
|
+
const statementsWithDefaults = statements.map(statement => (0, addStatementDefaultFields_js_1.addStatementDefaultFields)(statement, userObj));
|
|
61
46
|
const response = await makeFetch({
|
|
62
47
|
path: '/data/xAPI/statements',
|
|
63
|
-
method:
|
|
48
|
+
method: index_js_6.METHOD.POST,
|
|
64
49
|
headers: {
|
|
65
50
|
Authorization: await lrsAuthorization(),
|
|
66
51
|
'Content-Type': 'application/json',
|
|
@@ -113,17 +98,11 @@ ${await response.text()}`);
|
|
|
113
98
|
queryParams.until = options.until;
|
|
114
99
|
// Add agent unless anyUser is true
|
|
115
100
|
if (anyUser !== true) {
|
|
116
|
-
queryParams.agent = JSON.stringify(
|
|
117
|
-
account: {
|
|
118
|
-
homePage: 'https://openstax.org',
|
|
119
|
-
name: user || (0, assertions_1.assertDefined)(await authProvider.getUser(), new errors_1.UnauthorizedError()).uuid,
|
|
120
|
-
},
|
|
121
|
-
objectType: 'Agent',
|
|
122
|
-
});
|
|
101
|
+
queryParams.agent = JSON.stringify((0, attempt_utils_js_1.formatAgent)(user || (0, index_js_1.assertDefined)(await authProvider.getUser(), new index_js_3.UnauthorizedError()).uuid));
|
|
123
102
|
}
|
|
124
103
|
return makeFetch({
|
|
125
104
|
path: '/data/xAPI/statements',
|
|
126
|
-
method:
|
|
105
|
+
method: index_js_6.METHOD.GET,
|
|
127
106
|
queryParams,
|
|
128
107
|
headers: {
|
|
129
108
|
Authorization: await lrsAuthorization(),
|
|
@@ -135,7 +114,7 @@ ${await response.text()}`);
|
|
|
135
114
|
const { ensureSync, ...fetchParams } = params;
|
|
136
115
|
if (ensureSync) {
|
|
137
116
|
const date = new Date();
|
|
138
|
-
return (0,
|
|
117
|
+
return (0, helpers_js_1.retryWithDelay)(async (abort) => {
|
|
139
118
|
// this function retries for the consistency, if the fetch errors just abort
|
|
140
119
|
const response = await fetchXapiStatements(fetchParams).catch(abort);
|
|
141
120
|
const consistentThrough = response.headers.get('X-Experience-API-Consistent-Through');
|
|
@@ -169,7 +148,7 @@ ${await response.text()}`);
|
|
|
169
148
|
* @returns The state document as a JSON object, or null if not found
|
|
170
149
|
*/
|
|
171
150
|
const getState = async (activityId, agent, stateId, registration) => {
|
|
172
|
-
const agentObj = formatAgent(agent);
|
|
151
|
+
const agentObj = (0, attempt_utils_js_1.formatAgent)(agent);
|
|
173
152
|
const queryParams = {
|
|
174
153
|
activityId,
|
|
175
154
|
agent: JSON.stringify(agentObj),
|
|
@@ -180,7 +159,7 @@ ${await response.text()}`);
|
|
|
180
159
|
}
|
|
181
160
|
const response = await makeFetch({
|
|
182
161
|
path: '/data/xAPI/activities/state',
|
|
183
|
-
method:
|
|
162
|
+
method: index_js_6.METHOD.GET,
|
|
184
163
|
queryParams,
|
|
185
164
|
headers: {
|
|
186
165
|
Authorization: await lrsAuthorization(),
|
|
@@ -207,7 +186,7 @@ ${await response.text()}`);
|
|
|
207
186
|
* @param registration - Optional registration UUID
|
|
208
187
|
*/
|
|
209
188
|
const setState = async (activityId, agent, stateId, body, registration) => {
|
|
210
|
-
const agentObj = formatAgent(agent);
|
|
189
|
+
const agentObj = (0, attempt_utils_js_1.formatAgent)(agent);
|
|
211
190
|
const queryParams = {
|
|
212
191
|
activityId,
|
|
213
192
|
agent: JSON.stringify(agentObj),
|
|
@@ -218,7 +197,7 @@ ${await response.text()}`);
|
|
|
218
197
|
}
|
|
219
198
|
const response = await makeFetch({
|
|
220
199
|
path: '/data/xAPI/activities/state',
|
|
221
|
-
method:
|
|
200
|
+
method: index_js_6.METHOD.PUT,
|
|
222
201
|
queryParams,
|
|
223
202
|
headers: {
|
|
224
203
|
Authorization: await lrsAuthorization(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AccountsGateway, MappedUserInfo } from '../accountsGateway';
|
|
2
|
-
import { AuthProvider } from '../authProvider';
|
|
3
|
-
import { ActivityState, AttemptEntry } from './attempt-utils';
|
|
4
|
-
import { LrsGateway } from '.';
|
|
1
|
+
import { AccountsGateway, MappedUserInfo } from '../accountsGateway/index.js';
|
|
2
|
+
import { AuthProvider } from '../authProvider/index.js';
|
|
3
|
+
import { ActivityState, AttemptEntry } from './attempt-utils.js';
|
|
4
|
+
import { LrsGateway } from './index.js';
|
|
5
5
|
export interface Grade {
|
|
6
6
|
activityProgress: 'Initialized' | 'Started' | 'inProgress' | 'Submitted' | 'Completed';
|
|
7
7
|
comment?: string;
|
|
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getAssignmentGrades = exports.getCurrentGrade = exports.getCompletedUserInfosGradeAndProgress = exports.getScoreGrade = exports.getRegistrationAttemptInfo = void 0;
|
|
7
7
|
const partition_1 = __importDefault(require("lodash/fp/partition"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const index_js_1 = require("../../index.js");
|
|
9
|
+
const attempt_utils_js_1 = require("./attempt-utils.js");
|
|
10
10
|
const getRegistrationAttemptInfo = async (lrs, registration, options) => {
|
|
11
11
|
const { currentPreference, ...xapiOptions } = options !== null && options !== void 0 ? options : {};
|
|
12
12
|
const allStatements = await lrs.getAllXapiStatements({ ...xapiOptions, registration });
|
|
@@ -21,7 +21,7 @@ const getRegistrationAttemptInfo = async (lrs, registration, options) => {
|
|
|
21
21
|
});
|
|
22
22
|
const result = {};
|
|
23
23
|
for (const [userUuid, userStatements] of Object.entries(statementsPerUser)) {
|
|
24
|
-
result[userUuid] = (0,
|
|
24
|
+
result[userUuid] = (0, attempt_utils_js_1.resolveAttemptInfo)(userStatements, { currentPreference });
|
|
25
25
|
}
|
|
26
26
|
return result;
|
|
27
27
|
};
|
|
@@ -41,8 +41,8 @@ const getScoreGrade = (entry, options) => {
|
|
|
41
41
|
? scaled * scoreMaximum
|
|
42
42
|
: 0;
|
|
43
43
|
const submission = {
|
|
44
|
-
startedAt: entry.attempt ? (0,
|
|
45
|
-
submittedAt: entry.completed ? (0,
|
|
44
|
+
startedAt: entry.attempt ? (0, attempt_utils_js_1.getStatementTimeString)(entry.attempt) : undefined,
|
|
45
|
+
submittedAt: entry.completed ? (0, attempt_utils_js_1.getStatementTimeString)(entry.completed) : undefined,
|
|
46
46
|
};
|
|
47
47
|
const pendingManual = entry.needsScoring;
|
|
48
48
|
return {
|
|
@@ -52,7 +52,7 @@ const getScoreGrade = (entry, options) => {
|
|
|
52
52
|
// if you warp your mind you can consider the portion of the assignment which is completed to be fully graded.
|
|
53
53
|
gradingProgress: pendingManual ? 'PendingManual' : 'FullyGraded',
|
|
54
54
|
scoreMaximum,
|
|
55
|
-
scoreGiven: (0,
|
|
55
|
+
scoreGiven: (0, index_js_1.roundToPrecision)(scoreGiven, -2),
|
|
56
56
|
submission,
|
|
57
57
|
};
|
|
58
58
|
};
|
|
@@ -97,7 +97,7 @@ const getCurrentGrade = async (services, registration, options) => {
|
|
|
97
97
|
return getCompletedActivityStateGradeAndProgress({
|
|
98
98
|
name,
|
|
99
99
|
scoreMaximum,
|
|
100
|
-
state: (0,
|
|
100
|
+
state: (0, attempt_utils_js_1.resolveAttemptInfo)([]),
|
|
101
101
|
userId,
|
|
102
102
|
gradePreference,
|
|
103
103
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import postgres, { Sql } from 'postgres';
|
|
2
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
-
import type { Logger } from '../logger';
|
|
2
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
3
|
+
import type { Logger } from '../logger/index.js';
|
|
4
4
|
type Config = {
|
|
5
5
|
host: string;
|
|
6
6
|
readHost: string;
|
|
@@ -5,31 +5,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.postgresConnection = void 0;
|
|
7
7
|
const postgres_1 = __importDefault(require("postgres"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
8
|
+
const index_js_1 = require("../../assertions/index.js");
|
|
9
|
+
const index_js_2 = require("../../config/index.js");
|
|
10
|
+
const index_js_3 = require("../../guards/index.js");
|
|
11
|
+
const helpers_js_1 = require("../../misc/helpers.js");
|
|
12
12
|
const postgresConnection = (initializer) => (configProvider) => {
|
|
13
|
-
const config = configProvider[(0,
|
|
14
|
-
const host = (0,
|
|
15
|
-
const readHost = (0,
|
|
16
|
-
const connectionOptions = (0,
|
|
17
|
-
port: (0,
|
|
18
|
-
database: await (0,
|
|
19
|
-
username: await (0,
|
|
20
|
-
password: await (0,
|
|
13
|
+
const config = configProvider[(0, index_js_3.ifDefined)(initializer.configSpace, 'local')];
|
|
14
|
+
const host = (0, helpers_js_1.once)(() => (0, index_js_2.resolveConfigValue)(config.host));
|
|
15
|
+
const readHost = (0, helpers_js_1.once)(() => (0, index_js_2.resolveConfigValue)(config.readHost));
|
|
16
|
+
const connectionOptions = (0, helpers_js_1.once)(async () => ({
|
|
17
|
+
port: (0, index_js_1.assertNotNaN)(parseInt(await (0, index_js_2.resolveConfigValue)(config.port), 10), new Error('port must be a number')),
|
|
18
|
+
database: await (0, index_js_2.resolveConfigValue)(config.database),
|
|
19
|
+
username: await (0, index_js_2.resolveConfigValue)(config.username),
|
|
20
|
+
password: await (0, index_js_2.resolveConfigValue)(config.password),
|
|
21
21
|
transform: {
|
|
22
22
|
column: { to: postgres_1.default.fromCamel, from: postgres_1.default.toCamel },
|
|
23
23
|
},
|
|
24
24
|
}));
|
|
25
25
|
const connections = [];
|
|
26
|
-
const sql = (0,
|
|
26
|
+
const sql = (0, helpers_js_1.once)(async () => {
|
|
27
27
|
const options = await connectionOptions();
|
|
28
28
|
const connection = (0, postgres_1.default)({ ...options, host: await host() });
|
|
29
29
|
connections.push(connection);
|
|
30
30
|
return connection;
|
|
31
31
|
});
|
|
32
|
-
const sqlRead = (0,
|
|
32
|
+
const sqlRead = (0, helpers_js_1.once)(async () => {
|
|
33
33
|
const options = await connectionOptions();
|
|
34
34
|
const connection = (0, postgres_1.default)({ ...options, host: await readHost() });
|
|
35
35
|
connections.push(connection);
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.localQueueProvider = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const index_js_1 = require("../../config/index.js");
|
|
5
|
+
const index_js_2 = require("../../guards/index.js");
|
|
6
|
+
const helpers_js_1 = require("../../misc/helpers.js");
|
|
7
7
|
const localQueueProvider = (initializer) => {
|
|
8
|
-
const init = (0,
|
|
8
|
+
const init = (0, index_js_2.ifDefined)(initializer, {});
|
|
9
9
|
return () => (configProvider) => {
|
|
10
|
-
const config = configProvider[(0,
|
|
11
|
-
const handlerModulePath = (0,
|
|
10
|
+
const config = configProvider[(0, index_js_2.ifDefined)(init.configSpace, 'local')];
|
|
11
|
+
const handlerModulePath = (0, helpers_js_1.once)(() => (0, index_js_1.resolveConfigValue)(config.handlerModulePath));
|
|
12
12
|
return {
|
|
13
13
|
enqueueMessage: async (payload, _options) => {
|
|
14
14
|
const modulePath = await handlerModulePath();
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
16
15
|
const module = require(modulePath);
|
|
17
16
|
await module.handler(payload);
|
|
18
17
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SQS } from '@aws-sdk/client-sqs';
|
|
2
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
-
import { QueueProvider } from '.';
|
|
2
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
3
|
+
import { QueueProvider } from './index.js';
|
|
4
4
|
export type Config = {
|
|
5
5
|
queueUrl: string;
|
|
6
6
|
};
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sqsQueueProvider = void 0;
|
|
4
4
|
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
5
|
+
const index_js_1 = require("../../config/index.js");
|
|
6
|
+
const index_js_2 = require("../../guards/index.js");
|
|
7
|
+
const helpers_js_1 = require("../../misc/helpers.js");
|
|
8
8
|
const sqsQueueProvider = (initializer) => {
|
|
9
|
-
const init = (0,
|
|
10
|
-
const sqs = (0,
|
|
9
|
+
const init = (0, index_js_2.ifDefined)(initializer, {});
|
|
10
|
+
const sqs = (0, helpers_js_1.once)(() => { var _a; return (_a = init.sqsClient) !== null && _a !== void 0 ? _a : new client_sqs_1.SQS({ apiVersion: '2012-11-05' }); });
|
|
11
11
|
return () => (configProvider) => {
|
|
12
|
-
const config = configProvider[(0,
|
|
13
|
-
const queueUrl = (0,
|
|
12
|
+
const config = configProvider[(0, index_js_2.ifDefined)(init.configSpace, 'deployed')];
|
|
13
|
+
const queueUrl = (0, helpers_js_1.once)(() => (0, index_js_1.resolveConfigValue)(config.queueUrl));
|
|
14
14
|
return {
|
|
15
15
|
enqueueMessage: async (payload, options) => {
|
|
16
16
|
const command = new client_sqs_1.SendMessageCommand({
|