@openstax/ts-utils 1.28.1 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/cjs/assertions/index.d.ts +7 -3
  2. package/dist/cjs/config/envConfig.d.ts +1 -1
  3. package/dist/cjs/config/index.d.ts +7 -7
  4. package/dist/cjs/config/resolveConfigValue.d.ts +2 -2
  5. package/dist/cjs/fetch/index.d.ts +16 -16
  6. package/dist/cjs/fetch/index.js +1 -1
  7. package/dist/cjs/middleware/apiErrorHandler.d.ts +3 -3
  8. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +1 -1
  9. package/dist/cjs/middleware/index.d.ts +7 -7
  10. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +1 -1
  11. package/dist/cjs/misc/hashValue.d.ts +2 -2
  12. package/dist/cjs/misc/helpers.d.ts +11 -11
  13. package/dist/cjs/misc/merge.d.ts +2 -2
  14. package/dist/cjs/misc/partitionSequence.d.ts +2 -2
  15. package/dist/cjs/pagination/index.d.ts +1 -1
  16. package/dist/cjs/routing/index.d.ts +30 -30
  17. package/dist/cjs/routing/index.js +18 -8
  18. package/dist/cjs/routing/validators/zod.d.ts +1 -1
  19. package/dist/cjs/routing/validators/zod.js +3 -1
  20. package/dist/cjs/services/accountsGateway/index.d.ts +17 -20
  21. package/dist/cjs/services/apiGateway/index.d.ts +10 -10
  22. package/dist/cjs/services/apiGateway/index.js +17 -7
  23. package/dist/cjs/services/authProvider/browser.d.ts +5 -7
  24. package/dist/cjs/services/authProvider/decryption.d.ts +3 -7
  25. package/dist/cjs/services/authProvider/index.d.ts +8 -8
  26. package/dist/cjs/services/authProvider/subrequest.d.ts +2 -5
  27. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +1 -2
  28. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +4 -4
  29. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +1 -1
  30. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +2 -2
  31. package/dist/cjs/services/documentStore/index.d.ts +7 -7
  32. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +7 -9
  33. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +7 -9
  34. package/dist/cjs/services/documentStore/unversioned/file-system.js +17 -7
  35. package/dist/cjs/services/documentStore/unversioned/index.d.ts +1 -1
  36. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +7 -9
  37. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +6 -8
  38. package/dist/cjs/services/documentStore/versioned/index.d.ts +4 -4
  39. package/dist/cjs/services/exercisesGateway/index.d.ts +9 -13
  40. package/dist/cjs/services/exercisesGateway/index.js +17 -7
  41. package/dist/cjs/services/fileServer/index.d.ts +2 -3
  42. package/dist/cjs/services/fileServer/localFileServer.d.ts +2 -6
  43. package/dist/cjs/services/fileServer/s3FileServer.d.ts +2 -5
  44. package/dist/cjs/services/launchParams/signer.d.ts +4 -9
  45. package/dist/cjs/services/launchParams/verifier.d.ts +5 -6
  46. package/dist/cjs/services/launchParams/verifier.js +29 -11
  47. package/dist/cjs/services/logger/index.d.ts +2 -2
  48. package/dist/cjs/services/logger/index.js +1 -1
  49. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  50. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +34 -34
  51. package/dist/cjs/services/lrsGateway/file-system.d.ts +2 -4
  52. package/dist/cjs/services/lrsGateway/file-system.js +17 -7
  53. package/dist/cjs/services/lrsGateway/index.d.ts +29 -32
  54. package/dist/cjs/services/lrsGateway/index.js +17 -7
  55. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +23 -23
  56. package/dist/cjs/services/postgresConnection/index.d.ts +3 -10
  57. package/dist/cjs/services/searchProvider/index.d.ts +7 -7
  58. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  59. package/dist/cjs/services/searchProvider/openSearch.d.ts +3 -6
  60. package/dist/cjs/services/searchProvider/openSearch.js +7 -3
  61. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
  62. package/dist/cjs/types.d.ts +5 -5
  63. package/dist/esm/assertions/index.d.ts +7 -3
  64. package/dist/esm/config/envConfig.d.ts +1 -1
  65. package/dist/esm/config/index.d.ts +7 -7
  66. package/dist/esm/config/resolveConfigValue.d.ts +2 -2
  67. package/dist/esm/fetch/index.d.ts +16 -16
  68. package/dist/esm/middleware/apiErrorHandler.d.ts +3 -3
  69. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +1 -1
  70. package/dist/esm/middleware/index.d.ts +7 -7
  71. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +1 -1
  72. package/dist/esm/misc/hashValue.d.ts +2 -2
  73. package/dist/esm/misc/helpers.d.ts +11 -11
  74. package/dist/esm/misc/merge.d.ts +2 -2
  75. package/dist/esm/misc/partitionSequence.d.ts +2 -2
  76. package/dist/esm/pagination/index.d.ts +1 -1
  77. package/dist/esm/routing/index.d.ts +30 -30
  78. package/dist/esm/routing/validators/zod.d.ts +1 -1
  79. package/dist/esm/routing/validators/zod.js +3 -1
  80. package/dist/esm/services/accountsGateway/index.d.ts +17 -20
  81. package/dist/esm/services/apiGateway/index.d.ts +10 -10
  82. package/dist/esm/services/authProvider/browser.d.ts +5 -7
  83. package/dist/esm/services/authProvider/decryption.d.ts +3 -7
  84. package/dist/esm/services/authProvider/index.d.ts +8 -8
  85. package/dist/esm/services/authProvider/subrequest.d.ts +2 -5
  86. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +1 -2
  87. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +4 -4
  88. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +2 -2
  89. package/dist/esm/services/documentStore/index.d.ts +7 -7
  90. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +7 -9
  91. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +7 -9
  92. package/dist/esm/services/documentStore/unversioned/index.d.ts +1 -1
  93. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +7 -9
  94. package/dist/esm/services/documentStore/versioned/file-system.d.ts +6 -8
  95. package/dist/esm/services/documentStore/versioned/index.d.ts +4 -4
  96. package/dist/esm/services/exercisesGateway/index.d.ts +9 -13
  97. package/dist/esm/services/fileServer/index.d.ts +2 -3
  98. package/dist/esm/services/fileServer/localFileServer.d.ts +2 -6
  99. package/dist/esm/services/fileServer/s3FileServer.d.ts +2 -5
  100. package/dist/esm/services/launchParams/signer.d.ts +4 -9
  101. package/dist/esm/services/launchParams/verifier.d.ts +5 -6
  102. package/dist/esm/services/launchParams/verifier.js +12 -4
  103. package/dist/esm/services/logger/index.d.ts +2 -2
  104. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  105. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +34 -34
  106. package/dist/esm/services/lrsGateway/file-system.d.ts +2 -4
  107. package/dist/esm/services/lrsGateway/index.d.ts +29 -32
  108. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +23 -23
  109. package/dist/esm/services/postgresConnection/index.d.ts +3 -10
  110. package/dist/esm/services/searchProvider/index.d.ts +7 -7
  111. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  112. package/dist/esm/services/searchProvider/openSearch.d.ts +3 -6
  113. package/dist/esm/services/searchProvider/openSearch.js +7 -3
  114. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
  115. package/dist/esm/types.d.ts +5 -5
  116. package/package.json +6 -6
  117. package/script/bin/.init-params-script.bash.swp +0 -0
@@ -1,7 +1,7 @@
1
1
  import { JWK } from 'node-jose';
2
2
  import { ConfigProviderForConfig } from '../../config';
3
3
  import type { JsonCompatibleValue } from '../../routing';
4
- declare type Config = {
4
+ type Config = {
5
5
  alg: string;
6
6
  expiresIn: string;
7
7
  iss: string;
@@ -13,16 +13,11 @@ interface Initializer<C> {
13
13
  /**
14
14
  * Creates a class that can sign launch params
15
15
  */
16
- export declare const createLaunchSigner: <C extends string = "launch">({ configSpace }: Initializer<C>) => (configProvider: { [key in C]: {
17
- alg: import("../../config").ConfigValueProvider<string>;
18
- expiresIn: import("../../config").ConfigValueProvider<string>;
19
- iss: import("../../config").ConfigValueProvider<string>;
20
- privateKey: import("../../config").ConfigValueProvider<string>;
21
- }; }) => {
16
+ export declare const createLaunchSigner: <C extends string = "launch">({ configSpace }: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => {
22
17
  jwks: () => Promise<{
23
18
  keys: JWK.RawKey[];
24
19
  }>;
25
- sign: (data: Record<string, JsonCompatibleValue>, subject: string, maxExp?: number | null | undefined) => Promise<string>;
20
+ sign: (data: Record<string, JsonCompatibleValue>, subject: string, maxExp?: number | null) => Promise<string>;
26
21
  };
27
- export declare type LaunchSigner = ReturnType<ReturnType<typeof createLaunchSigner>>;
22
+ export type LaunchSigner = ReturnType<ReturnType<typeof createLaunchSigner>>;
28
23
  export {};
@@ -1,8 +1,9 @@
1
1
  import jwt from 'jsonwebtoken';
2
2
  import type { JWK } from 'node-jose';
3
3
  import { ConfigProviderForConfig } from '../../config';
4
- declare type Config = {
4
+ type Config = {
5
5
  trustedDomain: string;
6
+ bypassSignatureVerification: string;
6
7
  };
7
8
  interface Initializer<C> {
8
9
  configSpace?: C;
@@ -13,10 +14,8 @@ interface Initializer<C> {
13
14
  /**
14
15
  * Creates a class that can verify launch params
15
16
  */
16
- export declare const createLaunchVerifier: <C extends string = "launch">({ configSpace, fetcher }: Initializer<C>) => (configProvider: { [key in C]: {
17
- trustedDomain: import("../../config").ConfigValueProvider<string>;
18
- }; }) => (_services: {}, getDefaultToken?: (() => string) | undefined) => {
19
- verify: <T = undefined>(...args: T extends undefined ? [] | [string] : [(input: any) => T] | [string, (input: any) => T]) => Promise<T extends undefined ? jwt.JwtPayload : T>;
17
+ export declare const createLaunchVerifier: <C extends string = "launch">({ configSpace, fetcher }: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => (_services: {}, getDefaultToken?: () => string) => {
18
+ verify: <T = undefined>(...args: T extends undefined ? ([] | [string]) : ([(input: any) => T] | [string, (input: any) => T])) => Promise<T extends undefined ? jwt.JwtPayload : T>;
20
19
  };
21
- export declare type LaunchVerifier = ReturnType<ReturnType<ReturnType<typeof createLaunchVerifier>>>;
20
+ export type LaunchVerifier = ReturnType<ReturnType<ReturnType<typeof createLaunchVerifier>>>;
22
21
  export {};
@@ -11,6 +11,7 @@ import { once } from '../../misc/helpers';
11
11
  export const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvider) => {
12
12
  const config = configProvider[ifDefined(configSpace, 'launch')];
13
13
  const getTrustedDomain = once(() => resolveConfigValue(config.trustedDomain));
14
+ const getBypassSignatureVerification = once(async () => (await resolveConfigValue(config.bypassSignatureVerification)) === 'true');
14
15
  const getJwksClient = memoize((jwksUri) => new JwksClient({ fetcher, jwksUri }));
15
16
  const getJwksKey = memoize(async (jwksUri, kid) => {
16
17
  const client = getJwksClient(jwksUri);
@@ -37,25 +38,26 @@ export const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvide
37
38
  }
38
39
  };
39
40
  return (_services, getDefaultToken) => {
40
- const verify = (...args) => {
41
+ const verify = async (...args) => {
41
42
  const [inputToken, validator] = args.length === 1
42
43
  ? typeof args[0] === 'string'
43
44
  ? [args[0], undefined]
44
45
  : [undefined, args[0]]
45
46
  : args;
47
+ const bypassSignatureVerification = await getBypassSignatureVerification();
46
48
  return new Promise((resolve, reject) => {
47
49
  const token = inputToken !== null && inputToken !== void 0 ? inputToken : getDefaultToken === null || getDefaultToken === void 0 ? void 0 : getDefaultToken();
48
50
  if (!token) {
49
51
  return reject(new InvalidRequestError('Missing token for launch verification'));
50
52
  }
51
- return jwt.verify(token, getKey, {}, (err, payload) => {
53
+ const resolvePayload = (err, payload) => {
52
54
  if (err && err instanceof TokenExpiredError) {
53
55
  reject(new SessionExpiredError());
54
56
  }
55
57
  else if (err) {
56
58
  reject(err);
57
59
  }
58
- else if (typeof payload !== 'object') {
60
+ else if (typeof payload !== 'object' || payload === null) {
59
61
  reject(new Error('received JWT token with unexpected non-JSON payload'));
60
62
  }
61
63
  else if (!payload.sub) {
@@ -76,7 +78,13 @@ export const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvide
76
78
  // conditional return types are annoying
77
79
  resolve((validator ? validator(parsed) : parsed));
78
80
  }
79
- });
81
+ };
82
+ if (bypassSignatureVerification) {
83
+ return resolvePayload(null, jwt.decode(token));
84
+ }
85
+ else {
86
+ return jwt.verify(token, getKey, {}, resolvePayload);
87
+ }
80
88
  });
81
89
  };
82
90
  return { verify };
@@ -13,7 +13,7 @@ export declare enum Level {
13
13
  * @param level - log level
14
14
  * @param event - event to log
15
15
  */
16
- export declare type LogEvent = (level: Level, event: JsonCompatibleStruct) => void;
16
+ export type LogEvent = (level: Level, event: JsonCompatibleStruct) => void;
17
17
  /**
18
18
  * A logger that can be used to log events.
19
19
  *
@@ -36,4 +36,4 @@ export interface Logger {
36
36
  * (the context is returned when messages are logged with the logger)
37
37
  * @returns a Logger
38
38
  */
39
- export declare const createCoreLogger: (driver: LogEvent, getParentContext?: (() => JsonCompatibleStruct) | undefined) => Logger;
39
+ export declare const createCoreLogger: (driver: LogEvent, getParentContext?: () => JsonCompatibleStruct) => Logger;
@@ -1,5 +1,5 @@
1
1
  import { User } from '../authProvider';
2
2
  import { EagerXapiStatement, UXapiStatement, XapiStatement } from '.';
3
- export declare const addStatementDefaultFields: (statement: (Pick<XapiStatement, 'object' | 'verb' | 'context' | 'result'> & {
3
+ export declare const addStatementDefaultFields: (statement: (Pick<XapiStatement, "object" | "verb" | "context" | "result"> & {
4
4
  id?: string;
5
5
  }) | UXapiStatement, user: User) => EagerXapiStatement;
@@ -1,5 +1,5 @@
1
1
  import { LrsGateway, UXapiStatement } from '.';
2
- export declare type ActivityState = {
2
+ export type ActivityState = {
3
3
  attempts: number;
4
4
  completedAttempts: number;
5
5
  currentAttempt?: UXapiStatement;
@@ -11,60 +11,60 @@ export declare type ActivityState = {
11
11
  export declare const matchAttempt: (statement: UXapiStatement) => boolean;
12
12
  export declare const matchAttemptCompleted: (attempt: UXapiStatement) => (statement: UXapiStatement) => boolean;
13
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;
14
+ activityIRI?: string;
15
+ parentActivityAttempt?: string;
16
+ }) => UXapiStatement[];
17
+ export declare const resolveCompletedForAttempt: (statements: UXapiStatement[], attempt: UXapiStatement, activityIRI?: string) => UXapiStatement | undefined;
18
18
  export declare const oldestStatement: (statements: UXapiStatement[]) => UXapiStatement | undefined;
19
19
  export declare const mostRecentStatement: (statements: UXapiStatement[]) => UXapiStatement | undefined;
20
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;
21
+ activityIRI?: string;
22
+ currentAttempt?: string;
23
+ parentActivityAttempt?: string;
24
+ currentPreference?: "latest" | "oldest";
25
+ }) => ActivityState;
26
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[]>;
27
+ anyUser?: boolean;
28
+ attempt?: string;
29
+ ensureSync?: boolean;
30
+ user?: string;
31
+ }) => Promise<import(".").XapiStatement[]>;
32
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: {
33
+ currentAttempt?: string;
34
+ parentActivityAttempt?: string;
35
+ ensureSync?: boolean;
36
+ }) => Promise<ActivityState>;
37
+ export declare const createStatement: (verb: UXapiStatement["verb"], activity: {
38
38
  iri: string;
39
39
  type: string;
40
40
  name: string;
41
41
  extensions?: {
42
42
  [key: string]: string;
43
- } | undefined;
44
- }, attempt: string, parentActivityIRI?: string | undefined) => Pick<UXapiStatement, 'object' | 'verb' | 'context'>;
43
+ };
44
+ }, attempt: string, parentActivityIRI?: string) => Pick<UXapiStatement, "object" | "verb" | "context">;
45
45
  export declare const createAttemptStatement: (activity: {
46
46
  iri: string;
47
47
  type: string;
48
48
  name: string;
49
49
  extensions?: {
50
50
  [key: string]: string;
51
- } | undefined;
51
+ };
52
52
  }, parentActivity?: {
53
- iri?: string | undefined;
54
- attempt?: string | undefined;
55
- } | undefined) => Pick<UXapiStatement, 'object' | 'verb' | 'context'>;
53
+ iri?: string;
54
+ attempt?: string;
55
+ }) => Pick<UXapiStatement, "object" | "verb" | "context">;
56
56
  export declare const putAttemptStatement: (gateway: LrsGateway, activity: {
57
57
  iri: string;
58
58
  type: string;
59
59
  name: string;
60
60
  extensions?: {
61
61
  [key: string]: string;
62
- } | undefined;
62
+ };
63
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>;
64
+ iri?: string;
65
+ attempt?: string;
66
+ }) => 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,7 +1,7 @@
1
1
  import { ConfigProviderForConfig } from '../../config';
2
2
  import { AuthProvider } from '../authProvider';
3
3
  import { LrsGateway } from '.';
4
- declare type Config = {
4
+ type Config = {
5
5
  name: string;
6
6
  };
7
7
  interface Initializer<C> {
@@ -9,9 +9,7 @@ interface Initializer<C> {
9
9
  fs?: Pick<typeof import('fs'), 'readFile' | 'writeFile'>;
10
10
  configSpace?: C;
11
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 }: {
12
+ export declare const fileSystemLrsGateway: <C extends string = "fileSystem">(initializer: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => ({ authProvider }: {
15
13
  authProvider: AuthProvider;
16
14
  }) => LrsGateway;
17
15
  export {};
@@ -3,7 +3,7 @@ import { GenericFetch } from '../../fetch';
3
3
  import { WithRequired } from '../../types';
4
4
  import { AuthProvider } from '../authProvider';
5
5
  import { Logger } from '../logger';
6
- declare type Config = {
6
+ type Config = {
7
7
  lrsHost: string;
8
8
  lrsAuthorization: string;
9
9
  };
@@ -73,32 +73,29 @@ export interface XapiStatement {
73
73
  timestamp: string;
74
74
  stored?: string;
75
75
  }
76
- export declare type SavedXapiStatement = WithRequired<XapiStatement, 'stored'>;
77
- export declare type EagerXapiStatement = Omit<XapiStatement, 'stored'>;
78
- export declare type UXapiStatement = XapiStatement | EagerXapiStatement | SavedXapiStatement;
79
- export declare type LrsGateway = ReturnType<ReturnType<ReturnType<typeof lrsGateway>>>;
80
- export declare type LrsProvider = ReturnType<ReturnType<typeof lrsGateway>>;
81
- export declare const lrsGateway: <C extends string = "lrs">(initializer: Initializer<C>) => (configProvider: { [key in C]: {
82
- lrsHost: import("../../config").ConfigValueProvider<string>;
83
- lrsAuthorization: import("../../config").ConfigValueProvider<string>;
84
- }; }) => ({ authProvider, logger }: {
76
+ export type SavedXapiStatement = WithRequired<XapiStatement, 'stored'>;
77
+ export type EagerXapiStatement = Omit<XapiStatement, 'stored'>;
78
+ export type UXapiStatement = XapiStatement | EagerXapiStatement | SavedXapiStatement;
79
+ export type LrsGateway = ReturnType<ReturnType<ReturnType<typeof lrsGateway>>>;
80
+ export type LrsProvider = ReturnType<ReturnType<typeof lrsGateway>>;
81
+ export declare const lrsGateway: <C extends string = "lrs">(initializer: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => ({ authProvider, logger }: {
85
82
  authProvider: AuthProvider;
86
83
  logger: Logger;
87
84
  }) => {
88
- putXapiStatements: (statements: Array<(Pick<XapiStatement, 'object' | 'verb' | 'context' | 'result'> & {
85
+ putXapiStatements: (statements: Array<(Pick<XapiStatement, "object" | "verb" | "context" | "result"> & {
89
86
  id?: string;
90
87
  }) | UXapiStatement>) => Promise<EagerXapiStatement[]>;
91
88
  getXapiStatements: (params: {
92
- verb?: string | undefined;
93
- activity?: string | undefined;
94
- registration?: string | undefined;
95
- related_activities?: boolean | undefined;
96
- user?: string | undefined;
97
- anyUser?: boolean | undefined;
98
- since?: string | undefined;
99
- until?: string | undefined;
89
+ verb?: string;
90
+ activity?: string;
91
+ registration?: string;
92
+ related_activities?: boolean;
93
+ user?: string;
94
+ anyUser?: boolean;
95
+ since?: string;
96
+ until?: string;
100
97
  } & {
101
- ensureSync?: boolean | undefined;
98
+ ensureSync?: boolean;
102
99
  }) => Promise<{
103
100
  more: string;
104
101
  statements: XapiStatement[];
@@ -107,19 +104,19 @@ export declare const lrsGateway: <C extends string = "lrs">(initializer: Initial
107
104
  more: string;
108
105
  statements: XapiStatement[];
109
106
  }>;
110
- getAllXapiStatements: ({ fetchUntil, ...params }: {
111
- verb?: string | undefined;
112
- activity?: string | undefined;
113
- registration?: string | undefined;
114
- related_activities?: boolean | undefined;
115
- user?: string | undefined;
116
- anyUser?: boolean | undefined;
117
- since?: string | undefined;
118
- until?: string | undefined;
119
- } & {
120
- ensureSync?: boolean | undefined;
107
+ getAllXapiStatements: ({ fetchUntil, ...params }: ({
108
+ verb?: string;
109
+ activity?: string;
110
+ registration?: string;
111
+ related_activities?: boolean;
112
+ user?: string;
113
+ anyUser?: boolean;
114
+ since?: string;
115
+ until?: string;
121
116
  } & {
122
- fetchUntil?: ((statements: XapiStatement[]) => boolean) | undefined;
117
+ ensureSync?: boolean;
118
+ }) & {
119
+ fetchUntil?: (statements: XapiStatement[]) => boolean;
123
120
  }) => Promise<XapiStatement[]>;
124
121
  };
125
122
  export {};
@@ -11,12 +11,12 @@ export interface Grade {
11
11
  userId?: string;
12
12
  }
13
13
  export declare const getRegistrationAttemptInfo: (lrs: LrsGateway, registration: string, options?: {
14
- activity?: string | undefined;
15
- anyUser?: boolean | undefined;
16
- currentPreference?: "latest" | "oldest" | undefined;
17
- ensureSync?: boolean | undefined;
18
- user?: string | undefined;
19
- } | undefined) => Promise<{
14
+ activity?: string;
15
+ anyUser?: boolean;
16
+ currentPreference?: "latest" | "oldest";
17
+ ensureSync?: boolean;
18
+ user?: string;
19
+ }) => Promise<{
20
20
  [key: string]: ActivityState;
21
21
  }>;
22
22
  export declare const getScoreGrade: (score: {
@@ -24,13 +24,13 @@ export declare const getScoreGrade: (score: {
24
24
  raw?: number;
25
25
  min?: number;
26
26
  max?: number;
27
- }, completed: boolean, userId?: string | undefined, maxScore?: number | undefined) => Grade;
28
- export declare type Progress = {
27
+ }, completed: boolean, userId?: string, maxScore?: number) => Grade;
28
+ export type Progress = {
29
29
  scaled: number;
30
30
  max?: number;
31
31
  raw?: number;
32
32
  };
33
- export declare type GradeAndProgress = {
33
+ export type GradeAndProgress = {
34
34
  grade: Grade;
35
35
  progress: Progress;
36
36
  name?: string;
@@ -39,21 +39,21 @@ export declare const getCurrentGrade: (services: {
39
39
  lrs: LrsGateway;
40
40
  ltiAuthProvider: AuthProvider;
41
41
  }, registration: string, options?: {
42
- currentPreference?: "latest" | "oldest" | undefined;
43
- incompleteAttemptCallback?: ((info: ActivityState) => Promise<GradeAndProgress>) | undefined;
44
- name?: string | undefined;
45
- scoreMaximum?: number | undefined;
46
- userId?: string | undefined;
47
- } | undefined) => Promise<GradeAndProgress | null>;
48
- export declare type UserActivityInfo = MappedUserInfo<ActivityState>;
42
+ currentPreference?: "latest" | "oldest";
43
+ incompleteAttemptCallback?: (info: ActivityState) => Promise<GradeAndProgress>;
44
+ name?: string;
45
+ scoreMaximum?: number;
46
+ userId?: string;
47
+ }) => Promise<GradeAndProgress | null>;
48
+ export type UserActivityInfo = MappedUserInfo<ActivityState>;
49
49
  export declare const getAssignmentGrades: (services: {
50
50
  accountsGateway: AccountsGateway;
51
51
  lrs: LrsGateway;
52
52
  }, assignmentIRI: string, registration: string, options?: {
53
- anyUser?: boolean | undefined;
54
- currentPreference?: "latest" | "oldest" | undefined;
55
- incompleteAttemptsCallback?: ((mappedInfo: UserActivityInfo[]) => Promise<GradeAndProgress[]>) | undefined;
56
- platformId?: string | undefined;
57
- scoreMaximum?: number | undefined;
58
- user?: string | undefined;
59
- } | undefined) => Promise<GradeAndProgress[]>;
53
+ anyUser?: boolean;
54
+ currentPreference?: "latest" | "oldest";
55
+ incompleteAttemptsCallback?: (mappedInfo: UserActivityInfo[]) => Promise<GradeAndProgress[]>;
56
+ platformId?: string;
57
+ scoreMaximum?: number;
58
+ user?: string;
59
+ }) => Promise<GradeAndProgress[]>;
@@ -1,7 +1,7 @@
1
1
  import postgres, { Sql } from 'postgres';
2
2
  import { ConfigProviderForConfig } from '../../config';
3
3
  import type { Logger } from '../logger';
4
- declare type Config = {
4
+ type Config = {
5
5
  host: string;
6
6
  readHost: string;
7
7
  port: string;
@@ -12,14 +12,7 @@ declare type Config = {
12
12
  interface Initializer<C> {
13
13
  configSpace?: C;
14
14
  }
15
- export declare const postgresConnection: <C extends string = "local">(initializer: Initializer<C>) => (configProvider: { [key in C]: {
16
- host: import("../../config").ConfigValueProvider<string>;
17
- readHost: import("../../config").ConfigValueProvider<string>;
18
- port: import("../../config").ConfigValueProvider<string>;
19
- database: import("../../config").ConfigValueProvider<string>;
20
- username: import("../../config").ConfigValueProvider<string>;
21
- password: import("../../config").ConfigValueProvider<string>;
22
- }; }) => (services: {
15
+ export declare const postgresConnection: <C extends string = "local">(initializer: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => (services: {
23
16
  logger: Logger;
24
17
  }) => {
25
18
  db: () => Promise<postgres.Sql<{}>>;
@@ -27,7 +20,7 @@ export declare const postgresConnection: <C extends string = "local">(initialize
27
20
  migrate: (migrations: Migration[]) => Promise<void>;
28
21
  down: () => Promise<void[]>;
29
22
  };
30
- export declare type PostgresConnection = ReturnType<ReturnType<ReturnType<typeof postgresConnection>>>;
23
+ export type PostgresConnection = ReturnType<ReturnType<ReturnType<typeof postgresConnection>>>;
31
24
  export interface Migration {
32
25
  name: string;
33
26
  up: (db: Sql) => Promise<void>;
@@ -1,5 +1,5 @@
1
- export declare type FieldType = string | string[] | number | boolean;
2
- export declare type ESFilter = {
1
+ export type FieldType = string | string[] | number | boolean;
2
+ export type ESFilter = {
3
3
  terms: Record<string, FieldType>;
4
4
  } | {
5
5
  term: Record<string, FieldType>;
@@ -15,18 +15,18 @@ export declare type ESFilter = {
15
15
  } | {
16
16
  bool: BoolFilter;
17
17
  };
18
- export declare type Filter = {
18
+ export type Filter = {
19
19
  key: string;
20
20
  value: FieldType;
21
21
  } | ESFilter;
22
- export declare type BoolFilter = {
22
+ export type BoolFilter = {
23
23
  must?: Filter[];
24
24
  must_not?: Filter[];
25
25
  should?: Filter[];
26
26
  filter?: Filter[];
27
27
  minimum_should_match?: number;
28
28
  };
29
- declare type Field = {
29
+ type Field = {
30
30
  key: string;
31
31
  type?: 'text';
32
32
  weight: number;
@@ -41,7 +41,7 @@ export interface IndexOptions<T> {
41
41
  body: T;
42
42
  id: string;
43
43
  }
44
- export declare type FieldMapping = {
44
+ export type FieldMapping = {
45
45
  type: 'keyword' | 'text' | 'boolean';
46
46
  } | {
47
47
  type: 'date';
@@ -50,7 +50,7 @@ export declare type FieldMapping = {
50
50
  type?: 'nested' | 'object';
51
51
  properties: Record<string, FieldMapping>;
52
52
  };
53
- export declare type FieldMappings = Record<string, FieldMapping>;
53
+ export type FieldMappings = Record<string, FieldMapping>;
54
54
  export interface SearchOptions {
55
55
  page?: number;
56
56
  query: string | undefined;
@@ -1,5 +1,5 @@
1
1
  import { FieldMappings, IndexOptions, SearchOptions } from '.';
2
- export declare type Config<T> = {
2
+ export type Config<T> = {
3
3
  mappings: FieldMappings;
4
4
  store: {
5
5
  loadAllDocumentsTheBadWay: () => Promise<T[]>;
@@ -1,21 +1,18 @@
1
1
  import { ConfigProviderForConfig } from '../../config';
2
2
  import { FieldMappings, IndexOptions, SearchOptions } from '.';
3
- export declare type Config = {
3
+ export type Config = {
4
4
  node: string;
5
5
  region: string;
6
6
  };
7
7
  export interface Initializer<C> {
8
8
  configSpace?: C;
9
9
  }
10
- export declare type IndexConfig = {
10
+ export type IndexConfig = {
11
11
  name: string;
12
12
  mappings: FieldMappings;
13
13
  pageSize?: number;
14
14
  };
15
- export declare const openSearchService: <C extends string = "deployed">(initializer?: Initializer<C>) => (configProvider: { [key in C]: {
16
- node: import("../../config").ConfigValueProvider<string>;
17
- region: import("../../config").ConfigValueProvider<string>;
18
- }; }) => <T>(indexConfig: IndexConfig) => {
15
+ export declare const openSearchService: <C extends string = "deployed">(initializer?: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => <T>(indexConfig: IndexConfig) => {
19
16
  ensureIndexCreated: () => Promise<void>;
20
17
  deleteIndexIfExists: () => Promise<void>;
21
18
  index: (params: IndexOptions<T>) => Promise<void>;
@@ -23,9 +23,13 @@ export const openSearchService = (initializer = {}) => (configProvider) => {
23
23
  region: await resolveConfigValue(config.region),
24
24
  service: 'es',
25
25
  }),
26
- maxRetries: 3,
27
- requestTimeout: 3000,
28
- pingTimeout: 1000,
26
+ maxRetries: 4, // default is 3
27
+ requestTimeout: 5000, // default is 30000
28
+ pingTimeout: 2000, // default is 30000
29
+ sniffOnConnectionFault: true,
30
+ sniffOnStart: true,
31
+ resurrectStrategy: 'ping',
32
+ agent: { keepAlive: false },
29
33
  node: await resolveConfigValue(config.node),
30
34
  }));
31
35
  return (indexConfig) => {