@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,5 +1,5 @@
|
|
|
1
1
|
import { createDecipheriv, verify } from 'crypto';
|
|
2
|
-
import { isPlainObject } from '../../../guards';
|
|
2
|
+
import { isPlainObject } from '../../../guards/index.js';
|
|
3
3
|
export const decryptJwe = (jwe, encryptionPrivateKey) => {
|
|
4
4
|
const jweParts = jwe.split('.', 6);
|
|
5
5
|
if (jweParts.length !== 5 || jweParts[1]) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { AssertionFailed } from '../../../assertions/index.js';
|
|
2
|
+
import { ConfigProviderForConfig } from '../../../config/index.js';
|
|
3
|
+
import { AuthProvider } from '../index.js';
|
|
4
4
|
type Config = {
|
|
5
5
|
application: string;
|
|
6
6
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { doThrow } from '../../../assertions';
|
|
2
|
-
import { resolveConfigValue } from '../../../config/resolveConfigValue';
|
|
3
|
-
import { UnauthorizedError } from '../../../errors';
|
|
4
|
-
import { once } from '../../../misc/helpers';
|
|
1
|
+
import { doThrow } from '../../../assertions/index.js';
|
|
2
|
+
import { resolveConfigValue } from '../../../config/resolveConfigValue.js';
|
|
3
|
+
import { UnauthorizedError } from '../../../errors/index.js';
|
|
4
|
+
import { once } from '../../../misc/helpers.js';
|
|
5
5
|
export const createUserRoleValidator = (auth, config) => {
|
|
6
6
|
const application = once(() => resolveConfigValue(config.application));
|
|
7
7
|
const getUserRoles = async () => {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { GenericFetch } from '../../../fetch/index.js';
|
|
2
|
+
import { ApiUser } from '../index.js';
|
|
3
3
|
export declare const loadUserData: (fetch: GenericFetch, accountsBase: string, cookieName: string, token: string) => Promise<ApiUser | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AttributeValue } from '@aws-sdk/client-dynamodb';
|
|
2
|
-
import { DocumentBaseType, DocumentBaseValueTypes } from '.';
|
|
2
|
+
import { DocumentBaseType, DocumentBaseValueTypes } from './index.js';
|
|
3
3
|
export declare const encodeDynamoAttribute: (value: DocumentBaseValueTypes) => AttributeValue;
|
|
4
4
|
export declare const encodeDynamoDocument: (base: DocumentBaseType) => {
|
|
5
5
|
[k: string]: AttributeValue;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DynamoDB } from '@aws-sdk/client-dynamodb';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ConfigProviderForConfig } from '../../../config/index.js';
|
|
3
|
+
import { Config, TDocument } from '../index.js';
|
|
4
4
|
interface Initializer<C> {
|
|
5
5
|
configSpace?: C;
|
|
6
6
|
dynamoClient?: DynamoDB;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BatchGetItemCommand, DynamoDB, GetItemCommand, PutItemCommand, QueryCommand, ScanCommand, UpdateItemCommand } from '@aws-sdk/client-dynamodb';
|
|
2
2
|
import asyncPool from 'tiny-async-pool';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { decodeDynamoDocument, encodeDynamoAttribute, encodeDynamoDocument } from '../dynamoEncoding';
|
|
3
|
+
import { resolveConfigValue } from '../../../config/index.js';
|
|
4
|
+
import { ConflictError, NotFoundError } from '../../../errors/index.js';
|
|
5
|
+
import { ifDefined } from '../../../guards/index.js';
|
|
6
|
+
import { once } from '../../../index.js';
|
|
7
|
+
import { decodeDynamoDocument, encodeDynamoAttribute, encodeDynamoDocument } from '../dynamoEncoding.js';
|
|
8
8
|
export const dynamoUnversionedDocumentStore = (initializer) => {
|
|
9
9
|
const init = ifDefined(initializer, {});
|
|
10
10
|
const dynamodb = once(() => { var _a; return (_a = init.dynamoClient) !== null && _a !== void 0 ? _a : new DynamoDB({ apiVersion: '2012-08-10' }); });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ConfigProviderForConfig } from '../../../config/index.js';
|
|
2
|
+
import { Config, TDocument } from '../index.js';
|
|
3
3
|
interface Initializer<C> {
|
|
4
4
|
dataDir: string;
|
|
5
5
|
fs?: Pick<typeof import('fs'), 'mkdir' | 'readdir' | 'readFile' | 'writeFile'>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as fsModule from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { resolveConfigValue } from '../../../config/index.js';
|
|
4
|
+
import { ConflictError, NotFoundError } from '../../../errors/index.js';
|
|
5
|
+
import { ifDefined, isDefined } from '../../../guards/index.js';
|
|
6
|
+
import { hashValue } from '../../../index.js';
|
|
7
7
|
export const fileSystemUnversionedDocumentStore = (initializer) => () => (configProvider) => (_, hashKey, options) => {
|
|
8
8
|
const tableName = resolveConfigValue(configProvider[initializer.configSpace || 'fileSystem'].tableName);
|
|
9
9
|
const tablePath = tableName.then((table) => path.join(initializer.dataDir, table));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { dynamoUnversionedDocumentStore } from './dynamodb';
|
|
1
|
+
import { dynamoUnversionedDocumentStore } from './dynamodb.js';
|
|
2
2
|
export type UnversionedDocumentStoreCreator = typeof dynamoUnversionedDocumentStore;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DynamoDB } from '@aws-sdk/client-dynamodb';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { VersionedDocumentAuthor, VersionedTDocument } from '.';
|
|
2
|
+
import { ConfigProviderForConfig } from '../../../config/index.js';
|
|
3
|
+
import { Config } from '../index.js';
|
|
4
|
+
import { VersionedDocumentAuthor, VersionedTDocument } from './index.js';
|
|
5
5
|
interface Initializer<C> {
|
|
6
6
|
configSpace?: C;
|
|
7
7
|
dynamoClient?: DynamoDB;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DynamoDB, PutItemCommand, QueryCommand, ScanCommand } from '@aws-sdk/client-dynamodb';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { decodeDynamoDocument, encodeDynamoAttribute, encodeDynamoDocument } from '../dynamoEncoding';
|
|
2
|
+
import { resolveConfigValue } from '../../../config/index.js';
|
|
3
|
+
import { ifDefined } from '../../../guards/index.js';
|
|
4
|
+
import { once } from '../../../index.js';
|
|
5
|
+
import { decodeDynamoDocument, encodeDynamoAttribute, encodeDynamoDocument } from '../dynamoEncoding.js';
|
|
6
6
|
// i'm not really excited about getAuthor being required, but ts is getting confused about the type when unspecified
|
|
7
7
|
export const dynamoVersionedDocumentStore = (initializer) => {
|
|
8
8
|
const init = ifDefined(initializer, {});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { VersionedDocumentAuthor, VersionedTDocument } from '.';
|
|
1
|
+
import { ConfigProviderForConfig } from '../../../config/index.js';
|
|
2
|
+
import { Config } from '../index.js';
|
|
3
|
+
import { VersionedDocumentAuthor, VersionedTDocument } from './index.js';
|
|
4
4
|
interface Initializer<C> {
|
|
5
5
|
dataDir: string;
|
|
6
6
|
fs?: Pick<typeof import('fs'), 'mkdir' | 'readdir' | 'readFile' | 'writeFile'>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fileSystemUnversionedDocumentStore } from '../unversioned/file-system';
|
|
1
|
+
import { fileSystemUnversionedDocumentStore } from '../unversioned/file-system.js';
|
|
2
2
|
const PAGE_LIMIT = 5;
|
|
3
3
|
export const fileSystemVersionedDocumentStore = (initializer) => () => (configProvider) => (_, hashKey, options) => {
|
|
4
4
|
const unversionedDocuments = fileSystemUnversionedDocumentStore(initializer)()(configProvider)({}, 'id');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TDocument } from '
|
|
2
|
-
import { dynamoVersionedDocumentStore } from './dynamodb';
|
|
1
|
+
import { TDocument } from '../index.js';
|
|
2
|
+
import { dynamoVersionedDocumentStore } from './dynamodb.js';
|
|
3
3
|
export type VersionedDocumentAuthor = {
|
|
4
4
|
type: 'user';
|
|
5
5
|
uuid: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
-
import { GenericFetch } from '../../fetch';
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
2
|
+
import { GenericFetch } from '../../fetch/index.js';
|
|
3
3
|
export type Config = {
|
|
4
4
|
defaultCorrectness?: string;
|
|
5
5
|
exercisesHost: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as queryString from 'query-string';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { METHOD } from '../../routing';
|
|
2
|
+
import { assertString } from '../../assertions/index.js';
|
|
3
|
+
import { resolveConfigValue } from '../../config/index.js';
|
|
4
|
+
import { ifDefined } from '../../guards/index.js';
|
|
5
|
+
import { once } from '../../index.js';
|
|
6
|
+
import { METHOD } from '../../routing/index.js';
|
|
7
7
|
export const exercisesGateway = (initializer) => (configProvider) => {
|
|
8
8
|
const config = configProvider[ifDefined(initializer.configSpace, 'exercises')];
|
|
9
9
|
const exercisesHost = once(() => resolveConfigValue(config.exercisesHost));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isPlainObject } from '../../guards';
|
|
1
|
+
import { isPlainObject } from '../../guards/index.js';
|
|
2
2
|
export const isFileValue = (thing) => isPlainObject(thing)
|
|
3
3
|
&& Object.keys(thing).every(key => ['dataType', 'path', 'label', 'mimeType'].includes(key))
|
|
4
4
|
&& thing.dataType === 'file'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
-
import { FileServerAdapter } from '.';
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
2
|
+
import { FileServerAdapter } from './index.js';
|
|
3
3
|
export type Config = {
|
|
4
4
|
port?: string;
|
|
5
5
|
host?: string;
|
|
@@ -1,39 +1,100 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* spell-checker: ignore originalname busboy */
|
|
2
2
|
import crypto from 'crypto';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import https from 'https';
|
|
5
5
|
import path from 'path';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import multer from 'multer';
|
|
6
|
+
import { pipeline } from 'stream/promises';
|
|
7
|
+
import Busboy from 'busboy';
|
|
9
8
|
import { v4 as uuid } from 'uuid';
|
|
10
|
-
import { assertString } from '../../assertions';
|
|
11
|
-
import { resolveConfigValue } from '../../config';
|
|
12
|
-
import { ifDefined } from '../../guards';
|
|
13
|
-
import { memoize } from '../../misc/helpers';
|
|
9
|
+
import { assertString } from '../../assertions/index.js';
|
|
10
|
+
import { resolveConfigValue } from '../../config/index.js';
|
|
11
|
+
import { ifDefined } from '../../guards/index.js';
|
|
12
|
+
import { memoize } from '../../misc/helpers.js';
|
|
14
13
|
/* istanbul ignore next */
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const file = req.file;
|
|
23
|
-
if (!file) {
|
|
24
|
-
return res.status(400).send({ message: 'file is required' });
|
|
14
|
+
const serveStaticFile = async (filePath, res) => {
|
|
15
|
+
try {
|
|
16
|
+
const stat = await fs.promises.stat(filePath);
|
|
17
|
+
if (!stat.isFile()) {
|
|
18
|
+
res.writeHead(404);
|
|
19
|
+
res.end();
|
|
20
|
+
return;
|
|
25
21
|
}
|
|
26
|
-
|
|
22
|
+
res.writeHead(200, { 'Content-Length': stat.size });
|
|
23
|
+
await pipeline(fs.createReadStream(filePath), res);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
res.writeHead(404);
|
|
27
|
+
res.end();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/* istanbul ignore next */
|
|
31
|
+
const handleUpload = (req, res, uploadDir) => {
|
|
32
|
+
const busboy = Busboy({ headers: req.headers });
|
|
33
|
+
let key = '';
|
|
34
|
+
let originalName = '';
|
|
35
|
+
let tempPath = '';
|
|
36
|
+
busboy.on('field', (name, value) => {
|
|
37
|
+
if (name === 'key')
|
|
38
|
+
key = value;
|
|
39
|
+
});
|
|
40
|
+
busboy.on('file', (_name, file, info) => {
|
|
41
|
+
originalName = info.filename;
|
|
42
|
+
tempPath = path.join(uploadDir, uuid());
|
|
43
|
+
file.pipe(fs.createWriteStream(tempPath));
|
|
44
|
+
});
|
|
45
|
+
busboy.on('finish', async () => {
|
|
46
|
+
if (!tempPath) {
|
|
47
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
48
|
+
res.end(JSON.stringify({ message: 'file is required' }));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const destinationName = key.replace('${filename}', originalName);
|
|
27
52
|
const destinationPath = path.join(uploadDir, destinationName);
|
|
28
53
|
const destinationDirectory = path.dirname(destinationPath);
|
|
29
54
|
await fs.promises.mkdir(destinationDirectory, { recursive: true });
|
|
30
|
-
await fs.promises.rename(
|
|
31
|
-
res.
|
|
55
|
+
await fs.promises.rename(tempPath, destinationPath);
|
|
56
|
+
res.writeHead(201);
|
|
57
|
+
res.end();
|
|
32
58
|
});
|
|
59
|
+
req.pipe(busboy);
|
|
60
|
+
};
|
|
61
|
+
/* istanbul ignore next */
|
|
62
|
+
const setCorsHeaders = (res) => {
|
|
63
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
64
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
65
|
+
res.setHeader('Access-Control-Allow-Headers', '*');
|
|
66
|
+
};
|
|
67
|
+
/* istanbul ignore next */
|
|
68
|
+
const startServer = memoize((port, uploadDir) => {
|
|
33
69
|
const server = https.createServer({
|
|
34
70
|
key: fs.readFileSync(assertString(process.env.SSL_KEY_FILE, new Error('ssl key is required for localFileServer')), 'utf8'),
|
|
35
71
|
cert: fs.readFileSync(assertString(process.env.SSL_CRT_FILE, new Error('ssl key is required for localFileServer')), 'utf8'),
|
|
36
|
-
},
|
|
72
|
+
}, (req, res) => {
|
|
73
|
+
setCorsHeaders(res);
|
|
74
|
+
if (req.method === 'OPTIONS') {
|
|
75
|
+
res.writeHead(204);
|
|
76
|
+
res.end();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (req.method === 'POST' && req.url === '/') {
|
|
80
|
+
handleUpload(req, res, uploadDir);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (req.method === 'GET') {
|
|
84
|
+
const urlPath = decodeURIComponent(new URL(req.url || '/', 'https://localhost').pathname);
|
|
85
|
+
const filePath = path.join(uploadDir, urlPath);
|
|
86
|
+
// prevent directory traversal
|
|
87
|
+
if (!filePath.startsWith(uploadDir)) {
|
|
88
|
+
res.writeHead(403);
|
|
89
|
+
res.end();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
serveStaticFile(filePath, res);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
res.writeHead(405);
|
|
96
|
+
res.end();
|
|
97
|
+
});
|
|
37
98
|
server.once('error', function (err) {
|
|
38
99
|
if (err.code === 'EADDRINUSE') {
|
|
39
100
|
// when the local dev server reloads files on every request it doesn't
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
-
import { FileServerAdapter } from '.';
|
|
2
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
3
|
+
import { FileServerAdapter } from './index.js';
|
|
4
4
|
export type Config = {
|
|
5
5
|
bucketName: string;
|
|
6
6
|
bucketRegion: string;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* spell-checker: ignore presigner */
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { CopyObjectCommand, GetObjectCommand, HeadObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
|
4
4
|
import { createPresignedPost } from '@aws-sdk/s3-presigned-post';
|
|
5
5
|
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
6
6
|
import { v4 as uuid } from 'uuid';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
7
|
+
import { assertDefined } from '../../assertions/index.js';
|
|
8
|
+
import { resolveConfigValue } from '../../config/index.js';
|
|
9
|
+
import { ifDefined } from '../../guards/index.js';
|
|
10
|
+
import { once } from '../../index.js';
|
|
11
11
|
export const s3FileServer = (initializer) => (configProvider) => {
|
|
12
12
|
const config = configProvider[ifDefined(initializer.configSpace, 'deployed')];
|
|
13
13
|
const bucketName = once(() => resolveConfigValue(config.bucketName));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
2
2
|
import { VerifyConfig } from 'http-message-signatures';
|
|
3
3
|
import { JWK } from 'node-jose';
|
|
4
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
4
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
5
5
|
type Config = {
|
|
6
6
|
apiHost: string;
|
|
7
7
|
bypassSignatureVerification: string;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/* spell-checker: ignore algs httpbis keyid */
|
|
2
2
|
import { createHash } from 'crypto';
|
|
3
3
|
import { createVerifier, httpbis } from 'http-message-signatures';
|
|
4
4
|
import { SigningKeyNotFoundError } from 'jwks-rsa';
|
|
5
5
|
import { ByteSequence, parseDictionary, parseItem, Token } from 'structured-headers';
|
|
6
|
-
import { assertString } from '../../assertions';
|
|
7
|
-
import { resolveConfigValue } from '../../config';
|
|
8
|
-
import { InvalidRequestError } from '../../errors';
|
|
9
|
-
import { once } from '../../misc/helpers';
|
|
10
|
-
import { getJwksClient } from '../../misc/jwks';
|
|
6
|
+
import { assertString } from '../../assertions/index.js';
|
|
7
|
+
import { resolveConfigValue } from '../../config/index.js';
|
|
8
|
+
import { InvalidRequestError } from '../../errors/index.js';
|
|
9
|
+
import { once } from '../../misc/helpers.js';
|
|
10
|
+
import { getJwksClient } from '../../misc/jwks.js';
|
|
11
11
|
export const createHttpMessageVerifier = ({ configSpace, fetcher }) => (configProvider) => {
|
|
12
12
|
const config = configProvider[configSpace !== null && configSpace !== void 0 ? configSpace : 'verifier'];
|
|
13
13
|
const getApiHost = once(async () => await resolveConfigValue(config.apiHost));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createLaunchSigner } from './signer';
|
|
2
|
-
export { createLaunchVerifier } from './verifier';
|
|
1
|
+
export { createLaunchSigner } from './signer.js';
|
|
2
|
+
export { createLaunchVerifier } from './verifier.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createLaunchSigner } from './signer';
|
|
2
|
-
export { createLaunchVerifier } from './verifier';
|
|
1
|
+
export { createLaunchSigner } from './signer.js';
|
|
2
|
+
export { createLaunchVerifier } from './verifier.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JWK } from 'node-jose';
|
|
2
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
-
import type { JsonCompatibleStruct } from '../../routing';
|
|
2
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
3
|
+
import type { JsonCompatibleStruct } from '../../routing/index.js';
|
|
4
4
|
type Config = {
|
|
5
5
|
alg: string;
|
|
6
6
|
expiresIn: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import jwt from 'jsonwebtoken';
|
|
2
2
|
import ms from 'ms';
|
|
3
3
|
import { JWK } from 'node-jose';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { resolveConfigValue } from '../../config/index.js';
|
|
5
|
+
import { ifDefined } from '../../guards/index.js';
|
|
6
|
+
import { once } from '../../index.js';
|
|
7
7
|
const SUPPORTED_ALGORITHMS = [
|
|
8
8
|
'RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'PS256', 'PS384', 'PS512'
|
|
9
9
|
];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import jwt from 'jsonwebtoken';
|
|
2
2
|
import type { JWK } from 'node-jose';
|
|
3
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
+
import { ConfigProviderForConfig } from '../../config/index.js';
|
|
4
4
|
type Config = {
|
|
5
5
|
trustedDomain: string;
|
|
6
6
|
bypassSignatureVerification: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import jwt, { TokenExpiredError } from 'jsonwebtoken';
|
|
2
|
-
import { resolveConfigValue } from '../../config';
|
|
3
|
-
import { InvalidRequestError, SessionExpiredError } from '../../errors';
|
|
4
|
-
import { ifDefined } from '../../guards';
|
|
5
|
-
import { once } from '../../misc/helpers';
|
|
6
|
-
import { getJwksKey } from '../../misc/jwks';
|
|
2
|
+
import { resolveConfigValue } from '../../config/index.js';
|
|
3
|
+
import { InvalidRequestError, SessionExpiredError } from '../../errors/index.js';
|
|
4
|
+
import { ifDefined } from '../../guards/index.js';
|
|
5
|
+
import { once } from '../../misc/helpers.js';
|
|
6
|
+
import { getJwksKey } from '../../misc/jwks.js';
|
|
7
7
|
/**
|
|
8
8
|
* Creates a class that can verify launch params
|
|
9
9
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EagerXapiStatement, UXapiStatement, XapiStatement } from '.';
|
|
1
|
+
import { EagerXapiStatement, UXapiStatement, XapiStatement } from './index.js';
|
|
2
2
|
export declare const addStatementDefaultFields: (statement: (Pick<XapiStatement, "object" | "verb" | "context" | "result"> & {
|
|
3
3
|
id?: string;
|
|
4
4
|
}) | UXapiStatement, user: {
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import formatISO from 'date-fns/formatISO';
|
|
2
2
|
import { v4 as uuid } from 'uuid';
|
|
3
|
+
import { formatAgent } from './attempt-utils.js';
|
|
3
4
|
export const addStatementDefaultFields = (statement, user) => ({
|
|
4
5
|
id: uuid(),
|
|
5
|
-
actor:
|
|
6
|
-
account: {
|
|
7
|
-
homePage: 'https://openstax.org',
|
|
8
|
-
name: user.uuid,
|
|
9
|
-
},
|
|
10
|
-
objectType: 'Agent',
|
|
11
|
-
},
|
|
6
|
+
actor: formatAgent(user.uuid),
|
|
12
7
|
timestamp: formatISO(new Date()),
|
|
13
8
|
...statement,
|
|
14
9
|
});
|
|
@@ -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>;
|