@openstax/ts-utils 1.43.1 → 1.44.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 (202) hide show
  1. package/dist/cjs/aws/ssmService.js +2 -2
  2. package/dist/cjs/config/awsParameterConfig.d.ts +1 -1
  3. package/dist/cjs/config/awsParameterConfig.js +3 -3
  4. package/dist/cjs/config/envConfig.d.ts +1 -1
  5. package/dist/cjs/config/lambdaParameterConfig.d.ts +1 -1
  6. package/dist/cjs/config/lambdaParameterConfig.js +6 -6
  7. package/dist/cjs/config/replaceConfig.d.ts +1 -1
  8. package/dist/cjs/config/resolveConfigValue.d.ts +1 -1
  9. package/dist/cjs/errors/index.d.ts +1 -1
  10. package/dist/cjs/fetch/fetchStatusRetry.d.ts +1 -1
  11. package/dist/cjs/fetch/index.d.ts +1 -1
  12. package/dist/cjs/index.d.ts +3 -2
  13. package/dist/cjs/index.js +3 -2
  14. package/dist/cjs/middleware/apiErrorHandler.d.ts +3 -3
  15. package/dist/cjs/middleware/apiErrorHandler.js +12 -12
  16. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +3 -3
  17. package/dist/cjs/middleware/apiSlowResponseMiddleware.js +5 -5
  18. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
  19. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +2 -2
  20. package/dist/cjs/middleware/throwNotFoundMiddleware.js +2 -2
  21. package/dist/cjs/misc/helpers.d.ts +1 -1
  22. package/dist/cjs/misc/merge.js +2 -2
  23. package/dist/cjs/misc/timingSafeCompareStrings.d.ts +5 -0
  24. package/dist/cjs/misc/timingSafeCompareStrings.js +15 -0
  25. package/dist/cjs/pagination/index.d.ts +1 -1
  26. package/dist/cjs/pagination/index.js +10 -10
  27. package/dist/cjs/routing/helpers.d.ts +1 -1
  28. package/dist/cjs/routing/helpers.js +7 -7
  29. package/dist/cjs/routing/index.d.ts +1 -1
  30. package/dist/cjs/routing/lambdaBatchRequestHandler.d.ts +2 -2
  31. package/dist/cjs/routing/lambdaBatchRequestHandler.js +2 -2
  32. package/dist/cjs/routing/validators/zod.js +2 -2
  33. package/dist/cjs/services/accountsGateway/index.d.ts +5 -5
  34. package/dist/cjs/services/accountsGateway/index.js +17 -17
  35. package/dist/cjs/services/apiGateway/index.d.ts +4 -4
  36. package/dist/cjs/services/apiGateway/index.js +10 -10
  37. package/dist/cjs/services/authProvider/browser.d.ts +3 -3
  38. package/dist/cjs/services/authProvider/browser.js +9 -9
  39. package/dist/cjs/services/authProvider/decryption.d.ts +3 -3
  40. package/dist/cjs/services/authProvider/decryption.js +7 -7
  41. package/dist/cjs/services/authProvider/index.d.ts +3 -3
  42. package/dist/cjs/services/authProvider/launchToken.d.ts +3 -3
  43. package/dist/cjs/services/authProvider/launchToken.js +3 -3
  44. package/dist/cjs/services/authProvider/subrequest.d.ts +3 -3
  45. package/dist/cjs/services/authProvider/subrequest.js +10 -10
  46. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
  47. package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +3 -3
  48. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +1 -1
  49. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +3 -3
  50. package/dist/cjs/services/authProvider/utils/userRoleValidator.js +4 -4
  51. package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +2 -2
  52. package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +1 -1
  53. package/dist/cjs/services/documentStore/dynamoEncoding.js +2 -2
  54. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +2 -2
  55. package/dist/cjs/services/documentStore/unversioned/dynamodb.js +14 -14
  56. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +2 -2
  57. package/dist/cjs/services/documentStore/unversioned/file-system.js +13 -13
  58. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +3 -3
  59. package/dist/cjs/services/documentStore/versioned/dynamodb.js +6 -6
  60. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +3 -3
  61. package/dist/cjs/services/documentStore/versioned/index.d.ts +1 -1
  62. package/dist/cjs/services/exercisesGateway/index.d.ts +2 -2
  63. package/dist/cjs/services/exercisesGateway/index.js +14 -14
  64. package/dist/cjs/services/fileServer/index.js +3 -3
  65. package/dist/cjs/services/fileServer/localFileServer.d.ts +2 -2
  66. package/dist/cjs/services/fileServer/localFileServer.js +9 -9
  67. package/dist/cjs/services/fileServer/s3FileServer.d.ts +2 -2
  68. package/dist/cjs/services/fileServer/s3FileServer.js +13 -13
  69. package/dist/cjs/services/httpMessageVerifier/index.d.ts +1 -1
  70. package/dist/cjs/services/httpMessageVerifier/index.js +16 -16
  71. package/dist/cjs/services/launchParams/signer.d.ts +2 -2
  72. package/dist/cjs/services/launchParams/signer.js +9 -9
  73. package/dist/cjs/services/launchParams/verifier.d.ts +1 -1
  74. package/dist/cjs/services/launchParams/verifier.js +8 -8
  75. package/dist/cjs/services/logger/console.d.ts +1 -1
  76. package/dist/cjs/services/logger/console.js +2 -2
  77. package/dist/cjs/services/logger/index.d.ts +1 -1
  78. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  79. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +7 -7
  80. package/dist/cjs/services/lrsGateway/batching.d.ts +2 -2
  81. package/dist/cjs/services/lrsGateway/batching.js +2 -2
  82. package/dist/cjs/services/lrsGateway/file-system.d.ts +3 -3
  83. package/dist/cjs/services/lrsGateway/file-system.js +8 -8
  84. package/dist/cjs/services/lrsGateway/index.d.ts +4 -4
  85. package/dist/cjs/services/lrsGateway/index.js +15 -15
  86. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +3 -3
  87. package/dist/cjs/services/lrsGateway/xapiUtils.js +2 -2
  88. package/dist/cjs/services/postgresConnection/index.d.ts +2 -2
  89. package/dist/cjs/services/postgresConnection/index.js +10 -10
  90. package/dist/cjs/services/queueProvider/local.d.ts +2 -2
  91. package/dist/cjs/services/queueProvider/local.js +5 -5
  92. package/dist/cjs/services/queueProvider/sqs.d.ts +2 -2
  93. package/dist/cjs/services/queueProvider/sqs.js +5 -5
  94. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  95. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +9 -9
  96. package/dist/cjs/services/searchProvider/openSearch.d.ts +2 -2
  97. package/dist/cjs/services/searchProvider/openSearch.js +6 -6
  98. package/dist/cjs/services/searchProvider/streamIndexer.d.ts +2 -2
  99. package/dist/cjs/services/searchProvider/streamIndexer.js +3 -3
  100. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
  101. package/dist/esm/aws/ssmService.js +1 -1
  102. package/dist/esm/config/awsParameterConfig.d.ts +1 -1
  103. package/dist/esm/config/awsParameterConfig.js +1 -1
  104. package/dist/esm/config/envConfig.d.ts +1 -1
  105. package/dist/esm/config/lambdaParameterConfig.d.ts +1 -1
  106. package/dist/esm/config/lambdaParameterConfig.js +2 -2
  107. package/dist/esm/config/replaceConfig.d.ts +1 -1
  108. package/dist/esm/config/resolveConfigValue.d.ts +1 -1
  109. package/dist/esm/errors/index.d.ts +1 -1
  110. package/dist/esm/fetch/fetchStatusRetry.d.ts +1 -1
  111. package/dist/esm/fetch/index.d.ts +1 -1
  112. package/dist/esm/index.d.ts +3 -2
  113. package/dist/esm/index.js +3 -2
  114. package/dist/esm/middleware/apiErrorHandler.d.ts +3 -3
  115. package/dist/esm/middleware/apiErrorHandler.js +3 -3
  116. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +3 -3
  117. package/dist/esm/middleware/apiSlowResponseMiddleware.js +2 -2
  118. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
  119. package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +1 -1
  120. package/dist/esm/middleware/throwNotFoundMiddleware.js +1 -1
  121. package/dist/esm/misc/helpers.d.ts +1 -1
  122. package/dist/esm/misc/merge.js +1 -1
  123. package/dist/esm/misc/timingSafeCompareStrings.d.ts +5 -0
  124. package/dist/esm/misc/timingSafeCompareStrings.js +11 -0
  125. package/dist/esm/pagination/index.d.ts +1 -1
  126. package/dist/esm/pagination/index.js +3 -3
  127. package/dist/esm/routing/helpers.d.ts +1 -1
  128. package/dist/esm/routing/helpers.js +3 -3
  129. package/dist/esm/routing/index.d.ts +1 -1
  130. package/dist/esm/routing/lambdaBatchRequestHandler.d.ts +2 -2
  131. package/dist/esm/routing/lambdaBatchRequestHandler.js +1 -1
  132. package/dist/esm/routing/validators/zod.js +1 -1
  133. package/dist/esm/services/accountsGateway/index.d.ts +5 -5
  134. package/dist/esm/services/accountsGateway/index.js +4 -4
  135. package/dist/esm/services/apiGateway/index.d.ts +4 -4
  136. package/dist/esm/services/apiGateway/index.js +4 -4
  137. package/dist/esm/services/authProvider/browser.d.ts +3 -3
  138. package/dist/esm/services/authProvider/browser.js +4 -4
  139. package/dist/esm/services/authProvider/decryption.d.ts +3 -3
  140. package/dist/esm/services/authProvider/decryption.js +3 -3
  141. package/dist/esm/services/authProvider/index.d.ts +3 -3
  142. package/dist/esm/services/authProvider/launchToken.d.ts +3 -3
  143. package/dist/esm/services/authProvider/launchToken.js +1 -1
  144. package/dist/esm/services/authProvider/subrequest.d.ts +3 -3
  145. package/dist/esm/services/authProvider/subrequest.js +4 -4
  146. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
  147. package/dist/esm/services/authProvider/utils/decryptAndVerify.js +1 -1
  148. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +1 -1
  149. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +3 -3
  150. package/dist/esm/services/authProvider/utils/userRoleValidator.js +2 -2
  151. package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +2 -2
  152. package/dist/esm/services/documentStore/dynamoEncoding.d.ts +1 -1
  153. package/dist/esm/services/documentStore/dynamoEncoding.js +1 -1
  154. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +2 -2
  155. package/dist/esm/services/documentStore/unversioned/dynamodb.js +4 -4
  156. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +2 -2
  157. package/dist/esm/services/documentStore/unversioned/file-system.js +4 -4
  158. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +3 -3
  159. package/dist/esm/services/documentStore/versioned/dynamodb.js +3 -3
  160. package/dist/esm/services/documentStore/versioned/file-system.d.ts +3 -3
  161. package/dist/esm/services/documentStore/versioned/index.d.ts +1 -1
  162. package/dist/esm/services/exercisesGateway/index.d.ts +2 -2
  163. package/dist/esm/services/exercisesGateway/index.js +5 -5
  164. package/dist/esm/services/fileServer/index.js +1 -1
  165. package/dist/esm/services/fileServer/localFileServer.d.ts +2 -2
  166. package/dist/esm/services/fileServer/localFileServer.js +3 -3
  167. package/dist/esm/services/fileServer/s3FileServer.d.ts +2 -2
  168. package/dist/esm/services/fileServer/s3FileServer.js +4 -4
  169. package/dist/esm/services/httpMessageVerifier/index.d.ts +1 -1
  170. package/dist/esm/services/httpMessageVerifier/index.js +3 -3
  171. package/dist/esm/services/launchParams/signer.d.ts +2 -2
  172. package/dist/esm/services/launchParams/signer.js +3 -3
  173. package/dist/esm/services/launchParams/verifier.d.ts +1 -1
  174. package/dist/esm/services/launchParams/verifier.js +3 -3
  175. package/dist/esm/services/logger/console.d.ts +1 -1
  176. package/dist/esm/services/logger/console.js +1 -1
  177. package/dist/esm/services/logger/index.d.ts +1 -1
  178. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  179. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +7 -7
  180. package/dist/esm/services/lrsGateway/batching.d.ts +2 -2
  181. package/dist/esm/services/lrsGateway/batching.js +1 -1
  182. package/dist/esm/services/lrsGateway/file-system.d.ts +3 -3
  183. package/dist/esm/services/lrsGateway/file-system.js +4 -4
  184. package/dist/esm/services/lrsGateway/index.d.ts +4 -4
  185. package/dist/esm/services/lrsGateway/index.js +6 -6
  186. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +3 -3
  187. package/dist/esm/services/lrsGateway/xapiUtils.js +1 -1
  188. package/dist/esm/services/postgresConnection/index.d.ts +2 -2
  189. package/dist/esm/services/postgresConnection/index.js +3 -3
  190. package/dist/esm/services/queueProvider/local.d.ts +2 -2
  191. package/dist/esm/services/queueProvider/local.js +2 -2
  192. package/dist/esm/services/queueProvider/sqs.d.ts +2 -2
  193. package/dist/esm/services/queueProvider/sqs.js +2 -2
  194. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  195. package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +3 -3
  196. package/dist/esm/services/searchProvider/openSearch.d.ts +2 -2
  197. package/dist/esm/services/searchProvider/openSearch.js +2 -2
  198. package/dist/esm/services/searchProvider/streamIndexer.d.ts +2 -2
  199. package/dist/esm/services/searchProvider/streamIndexer.js +1 -1
  200. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
  201. package/package.json +1 -1
  202. package/script/bin/.init-params-script.bash.swp +0 -0
@@ -1,5 +1,5 @@
1
1
  import { SSM } from '@aws-sdk/client-ssm';
2
- import { once } from '../index';
2
+ import { once } from '..';
3
3
  /**
4
4
  * A memoized instance of the AWS SSM client.
5
5
  */
@@ -1,4 +1,4 @@
1
- import { ConfigValueProvider } from './index';
1
+ import { ConfigValueProvider } from '.';
2
2
  /**
3
3
  * Returns a value from the AWS Parameter Store.
4
4
  *
@@ -1,5 +1,5 @@
1
1
  import { GetParameterCommand } from '@aws-sdk/client-ssm';
2
- import { assertDefined } from '../assertions/index';
2
+ import { assertDefined } from '../assertions';
3
3
  import { ssmService } from '../aws/ssmService';
4
4
  import { resolveConfigValue } from './resolveConfigValue';
5
5
  /**
@@ -1,4 +1,4 @@
1
- import type { ConfigValueProvider } from './index';
1
+ import type { ConfigValueProvider } from '.';
2
2
  /**
3
3
  * A list of environment variables that were requested at build time. Used by webpack to
4
4
  * capture build-time environment variables values.
@@ -1,4 +1,4 @@
1
- import { ConfigValueProvider } from './index';
1
+ import { ConfigValueProvider } from '.';
2
2
  /**
3
3
  * Returns a value from the AWS Parameter Store. Can only be used during in AWS Lambda, and
4
4
  * requires that the AWS Parameters and Secrets Lambda Extension Layer be included in the Lambda.
@@ -1,8 +1,8 @@
1
1
  import fetch from 'node-fetch';
2
- import { assertDefined } from '../assertions/index';
2
+ import { assertDefined } from '../assertions';
3
3
  import { retryWithDelay } from '../misc/helpers';
4
4
  import { envConfig } from './envConfig';
5
- import { resolveConfigValue } from './index';
5
+ import { resolveConfigValue } from '.';
6
6
  const lambdaExtensionUrl = 'http://localhost:2773';
7
7
  let lambdaExtensionReadyPromise;
8
8
  /**
@@ -1,4 +1,4 @@
1
- import { ConfigValueProvider } from './index';
1
+ import { ConfigValueProvider } from '.';
2
2
  /**
3
3
  * Substitutes configuration values into a provided string.
4
4
  * Performs a string substitution using configuration values
@@ -1,4 +1,4 @@
1
- import type { ConfigValue, ConfigValueProvider } from './index';
1
+ import type { ConfigValue, ConfigValueProvider } from '.';
2
2
  /**
3
3
  * resolves a config value into a string, to be used inside of things that are provided configurations
4
4
  */
@@ -1,4 +1,4 @@
1
- import type { JsonCompatibleStruct } from '../routing/index';
1
+ import type { JsonCompatibleStruct } from '../routing';
2
2
  /**
3
3
  * Returns true if the error is defined in this library
4
4
  */
@@ -1,5 +1,5 @@
1
1
  import { RetryOptions } from '../misc/helpers';
2
- import { GenericFetch } from './index';
2
+ import { GenericFetch } from '.';
3
3
  interface Options extends RetryOptions {
4
4
  status?: number[];
5
5
  timeout?: number;
@@ -1,4 +1,4 @@
1
- import { METHOD } from '../routing/index';
1
+ import { METHOD } from '../routing';
2
2
  export declare enum FetchStateType {
3
3
  SUCCESS = "success",
4
4
  ERROR = "error",
@@ -1,4 +1,5 @@
1
- export * from './misc/partitionSequence';
1
+ export * from './misc/hashValue';
2
2
  export * from './misc/helpers';
3
3
  export * from './misc/merge';
4
- export * from './misc/hashValue';
4
+ export * from './misc/partitionSequence';
5
+ export * from './misc/timingSafeCompareStrings';
package/dist/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
- export * from './misc/partitionSequence';
1
+ export * from './misc/hashValue';
2
2
  export * from './misc/helpers';
3
3
  export * from './misc/merge';
4
- export * from './misc/hashValue';
4
+ export * from './misc/partitionSequence';
5
+ export * from './misc/timingSafeCompareStrings';
@@ -1,6 +1,6 @@
1
- import { ForbiddenError, InvalidRequestError, NotFoundError, SessionExpiredError, UnauthorizedError, ValidationError } from '../errors/index';
2
- import type { ApiResponse } from '../routing/index';
3
- import type { Logger } from '../services/logger/index';
1
+ import { ForbiddenError, InvalidRequestError, NotFoundError, SessionExpiredError, UnauthorizedError, ValidationError } from '../errors';
2
+ import type { ApiResponse } from '../routing';
3
+ import type { Logger } from '../services/logger';
4
4
  export type DefaultErrors = {
5
5
  InvalidRequestError: InvalidRequestError;
6
6
  UnauthorizedError: UnauthorizedError;
@@ -1,6 +1,6 @@
1
- import { isAppError, } from '../errors/index';
2
- import { apiJsonResponse, apiTextResponse } from '../routing/index';
3
- import { Level } from '../services/logger/index';
1
+ import { isAppError, } from '../errors';
2
+ import { apiJsonResponse, apiTextResponse } from '../routing';
3
+ import { Level } from '../services/logger';
4
4
  export const defaultHandlers = {
5
5
  InvalidRequestError: (e) => apiTextResponse(400, `400 ${e.message}`),
6
6
  UnauthorizedError: (e) => apiTextResponse(401, `401 ${e.message}`),
@@ -1,6 +1,6 @@
1
- import type { ConfigProviderForConfig } from '../config/index';
2
- import type { ApiResponse } from '../routing/index';
3
- import type { Logger } from '../services/logger/index';
1
+ import type { ConfigProviderForConfig } from '../config';
2
+ import type { ApiResponse } from '../routing';
3
+ import type { Logger } from '../services/logger';
4
4
  type Config = {
5
5
  logResponseSlowerThan: string;
6
6
  timeoutResponseAfter: string;
@@ -1,7 +1,7 @@
1
1
  import { resolveConfigValue } from '../config/resolveConfigValue';
2
2
  import { once } from '../misc/helpers';
3
- import { apiTextResponse } from '../routing/index';
4
- import { Level } from '../services/logger/index';
3
+ import { apiTextResponse } from '../routing';
4
+ import { Level } from '../services/logger';
5
5
  /**
6
6
  * Creates response middleware that logs slow responses and times out responses that take too long. lambda functions have a timeout setting, but when a lambda times out there is no way to log anything helpful before it exists. this middleware allows the logger context to show up for timeout requests. just make sure that the `timeoutResponseAfter` is set to something slightly shorter than the lambda timeout so that it has time to run.
7
7
  *
@@ -1,6 +1,6 @@
1
1
  import { APIGatewayProxyEventV2 } from 'aws-lambda';
2
- import { ConfigProviderForConfig } from '../config/index';
3
- import { ApiResponse } from '../routing/index';
2
+ import { ConfigProviderForConfig } from '../config';
3
+ import { ApiResponse } from '../routing';
4
4
  type Config = {
5
5
  corsAllowedHostRegex: string;
6
6
  };
@@ -1,6 +1,6 @@
1
1
  import { resolveConfigValue } from '../config/resolveConfigValue';
2
2
  import { once } from '../misc/helpers';
3
- import { apiTextResponse } from '../routing/index';
3
+ import { apiTextResponse } from '../routing';
4
4
  /**
5
5
  * Creates response middleware that adds CORS headers to responses from approved hosts.
6
6
  *
@@ -1,4 +1,4 @@
1
- import { NotFoundError } from '../errors/index';
1
+ import { NotFoundError } from '../errors';
2
2
  /**
3
3
  * Creates response middleware that throws a `NotFoundError` if the response is undefined.
4
4
  */
@@ -1,4 +1,4 @@
1
- import type { Logger } from '../services/logger/index';
1
+ import type { Logger } from '../services/logger';
2
2
  /**
3
3
  * Returns a function that gets the value of the given key from an object
4
4
  *
@@ -1,4 +1,4 @@
1
- import { isPlainObject } from '../guards/index';
1
+ import { isPlainObject } from '../guards';
2
2
  /**
3
3
  * Takes two objects and returns an array of the keys that are common to both, with a type
4
4
  * limited to those keys.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Compares two strings in constant time to prevent timing attacks.
3
+ * Safe to use for shared secret or API token comparisons.
4
+ */
5
+ export declare const timingSafeCompareStrings: (a: string, b: string) => boolean;
@@ -0,0 +1,11 @@
1
+ import { timingSafeEqual } from 'crypto';
2
+ /**
3
+ * Compares two strings in constant time to prevent timing attacks.
4
+ * Safe to use for shared secret or API token comparisons.
5
+ */
6
+ export const timingSafeCompareStrings = (a, b) => {
7
+ const aBuf = Buffer.from(a, 'utf8');
8
+ const bBuf = Buffer.alloc(aBuf.length);
9
+ bBuf.write(b, 0, aBuf.length, 'utf8');
10
+ return timingSafeEqual(aBuf, bBuf) && a.length === b.length;
11
+ };
@@ -1,4 +1,4 @@
1
- import { QueryParams, RouteMatchRecord } from '../routing/index';
1
+ import { QueryParams, RouteMatchRecord } from '../routing';
2
2
  export type PaginationHandler<Pa, Q extends QueryParams> = <R>(queryParams: Q, match: RouteMatchRecord<R>) => Pa & {
3
3
  getUnusedQueryParams: () => Q;
4
4
  };
@@ -1,6 +1,6 @@
1
- import { notNaN } from '../assertions/index';
2
- import { InvalidRequestError } from '../errors/index';
3
- import { renderAnyRouteUrl } from '../routing/index';
1
+ import { notNaN } from '../assertions';
2
+ import { InvalidRequestError } from '../errors';
3
+ import { renderAnyRouteUrl } from '../routing';
4
4
  /**
5
5
  * helper to create middleware with the given paginator. aside from taking care of annoying to write pagination logic, these helpers also make
6
6
  * sure that all item list responses have the same formatting.
@@ -1,4 +1,4 @@
1
- import type { HttpHeaders } from './index';
1
+ import type { HttpHeaders } from '.';
2
2
  /**
3
3
  * Get the value of a header, case insensitive; note if there are multiple headers of the same
4
4
  * value, this only returns the first value
@@ -1,6 +1,6 @@
1
- import { assertErrorInstanceOf } from '../assertions/index';
2
- import { InvalidRequestError } from '../errors/index';
3
- import { isPlainObject } from '../guards/index';
1
+ import { assertErrorInstanceOf } from '../assertions';
2
+ import { InvalidRequestError } from '../errors';
3
+ import { isPlainObject } from '../guards';
4
4
  /**
5
5
  * Get the value of a header, case insensitive; note if there are multiple headers of the same
6
6
  * value, this only returns the first value
@@ -1,4 +1,4 @@
1
- import { Logger } from '../services/logger/index';
1
+ import { Logger } from '../services/logger';
2
2
  /** HTTP query parameters */
3
3
  export type QueryParams = Record<string, string | undefined | string[] | null>;
4
4
  /**
@@ -1,6 +1,6 @@
1
1
  import { APIGatewayProxyEventV2 } from 'aws-lambda';
2
- import { Logger } from '../services/logger/index';
3
- import { ApiResponse, BatchHandler } from './index';
2
+ import { Logger } from '../services/logger';
3
+ import { ApiResponse, BatchHandler } from '.';
4
4
  type Ro = Promise<ApiResponse<number, any>>;
5
5
  export declare const lambdaBatchRequestHandler: <Sa, Ri extends APIGatewayProxyEventV2>(config: {
6
6
  batchPath: string;
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { asyncPool } from '../misc/asyncPool';
3
3
  import { getRequestBody } from './helpers';
4
- import { apiJsonResponse } from './index';
4
+ import { apiJsonResponse } from '.';
5
5
  const BatchItemSchema = z.object({
6
6
  id: z.string(),
7
7
  path: z.string(),
@@ -1,6 +1,6 @@
1
1
  /* spell-checker: ignore treeify */
2
2
  import { treeifyError } from 'zod';
3
- import { ValidationError } from '../../errors/index';
3
+ import { ValidationError } from '../../errors';
4
4
  export const zodPayloadValidator = (validator) => (input) => {
5
5
  const result = validator.safeParse(input);
6
6
  if (result.success) {
@@ -1,8 +1,8 @@
1
- import { ConfigProviderForConfig } from '../../config/index';
2
- import { GenericFetch } from '../../fetch/index';
3
- import { JsonCompatibleStruct } from '../../routing/index';
4
- import { ApiUser } from '../authProvider/index';
5
- import { Logger } from '../logger/index';
1
+ import { ConfigProviderForConfig } from '../../config';
2
+ import { GenericFetch } from '../../fetch';
3
+ import { JsonCompatibleStruct } from '../../routing';
4
+ import { ApiUser } from '../authProvider';
5
+ import { Logger } from '../logger';
6
6
  export type Config = {
7
7
  accountsBase: string;
8
8
  accountsAuthToken: string;
@@ -1,10 +1,10 @@
1
1
  import { chunk, isEqual } from 'lodash';
2
2
  import queryString from 'query-string';
3
- import { resolveConfigValue } from '../../config/index';
4
- import { ifDefined, isDefined } from '../../guards/index';
3
+ import { resolveConfigValue } from '../../config';
4
+ import { ifDefined, isDefined } from '../../guards';
5
5
  import { once } from '../../misc/helpers';
6
- import { METHOD } from '../../routing/index';
7
- import { Level } from '../logger/index';
6
+ import { METHOD } from '../../routing';
7
+ import { Level } from '../logger';
8
8
  class ApiError extends Error {
9
9
  constructor(message, status) {
10
10
  super(message);
@@ -1,9 +1,9 @@
1
1
  import { Headers } from 'node-fetch';
2
- import { ConfigProviderForConfig } from '../../config/index';
3
- import { ConfigForFetch, GenericFetch, Response } from '../../fetch/index';
4
- import { AnyRoute, ApiResponse, OutputForRoute, ParamsForRoute, PayloadForRoute, QueryParams } from '../../routing/index';
2
+ import { ConfigProviderForConfig } from '../../config';
3
+ import { ConfigForFetch, GenericFetch, Response } from '../../fetch';
4
+ import { AnyRoute, ApiResponse, OutputForRoute, ParamsForRoute, PayloadForRoute, QueryParams } from '../../routing';
5
5
  import { UnwrapPromise } from '../../types';
6
- import { Logger } from '../logger/index';
6
+ import { Logger } from '../logger';
7
7
  export type TResponsePayload<R> = R extends ApiResponse<any, infer P> ? P : never;
8
8
  export type TResponseStatus<R> = R extends ApiResponse<infer S, any> ? S : never;
9
9
  export type RouteClient<R> = {
@@ -1,11 +1,11 @@
1
1
  import * as pathToRegexp from 'path-to-regexp';
2
2
  import queryString from 'query-string';
3
3
  import { v4 as uuid } from 'uuid';
4
- import { merge } from '../../index';
5
- import { resolveConfigValue } from '../../config/index';
6
- import { SessionExpiredError, UnauthorizedError } from '../../errors/index';
4
+ import { merge } from '../..';
5
+ import { resolveConfigValue } from '../../config';
6
+ import { SessionExpiredError, UnauthorizedError } from '../../errors';
7
7
  import { fetchStatusRetry } from '../../fetch/fetchStatusRetry';
8
- import { Level } from '../logger/index';
8
+ import { Level } from '../logger';
9
9
  /** Pulls the content out of a response based on the content type */
10
10
  export const loadResponse = (response) => () => {
11
11
  const [contentType] = (response.headers.get('content-type') || '').split(';');
@@ -1,7 +1,7 @@
1
- import { ConfigProviderForConfig } from '../../config/index';
2
- import { GenericFetch } from '../../fetch/index';
1
+ import { ConfigProviderForConfig } from '../../config';
2
+ import { GenericFetch } from '../../fetch';
3
3
  import { UserData } from './utils/embeddedAuthProvider';
4
- import { ApiUser, AuthProvider } from './index';
4
+ import { ApiUser, AuthProvider } from '.';
5
5
  type Config = {
6
6
  accountsBase: string;
7
7
  };
@@ -1,7 +1,7 @@
1
- import { once } from '../../index';
2
- import { resolveConfigValue } from '../../config/index';
3
- import { ifDefined } from '../../guards/index';
4
- import { METHOD, unsafePayloadValidator } from '../../routing/index';
1
+ import { once } from '../..';
2
+ import { resolveConfigValue } from '../../config';
3
+ import { ifDefined } from '../../guards';
4
+ import { METHOD, unsafePayloadValidator } from '../../routing';
5
5
  import { embeddedAuthProvider, PostMessageTypes } from './utils/embeddedAuthProvider';
6
6
  const isUserData = unsafePayloadValidator();
7
7
  export const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
@@ -1,6 +1,6 @@
1
- import type { ConfigProviderForConfig } from '../../config/index';
2
- import { GenericFetch } from '../../fetch/index';
3
- import { ApiUser, AuthProvider, CookieAuthProvider } from './index';
1
+ import type { ConfigProviderForConfig } from '../../config';
2
+ import { GenericFetch } from '../../fetch';
3
+ import { ApiUser, AuthProvider, CookieAuthProvider } from '.';
4
4
  type Config = {
5
5
  accountsBase: string;
6
6
  cookieName: string;
@@ -1,10 +1,10 @@
1
1
  import { resolveConfigValue } from '../../config/resolveConfigValue';
2
- import { SessionExpiredError } from '../../errors/index';
3
- import { ifDefined } from '../../guards/index';
2
+ import { SessionExpiredError } from '../../errors';
3
+ import { ifDefined } from '../../guards';
4
4
  import { once } from '../../misc/helpers';
5
5
  import { decryptAndVerify } from './utils/decryptAndVerify';
6
6
  import { loadUserData } from './utils/userSubrequest';
7
- import { getAuthTokenOrCookie } from './index';
7
+ import { getAuthTokenOrCookie } from '.';
8
8
  export const decryptionAuthProvider = (initializer) => (configProvider) => {
9
9
  const config = configProvider[ifDefined(initializer.configSpace, 'decryption')];
10
10
  const accountsBase = once(() => resolveConfigValue(config.accountsBase));
@@ -1,6 +1,6 @@
1
- import type { FetchConfig } from '../../fetch/index';
2
- import type { HttpHeaders, QueryParams } from '../../routing/index';
3
- import type { Logger } from '../logger/index';
1
+ import type { FetchConfig } from '../../fetch';
2
+ import type { HttpHeaders, QueryParams } from '../../routing';
3
+ import type { Logger } from '../logger';
4
4
  export type ConsentPreferences = {
5
5
  consent_preferences: {
6
6
  accepted: string[];
@@ -1,7 +1,7 @@
1
- import { AccountsGateway } from '../accountsGateway/index';
1
+ import { AccountsGateway } from '../accountsGateway';
2
2
  import { LaunchVerifier } from '../launchParams/verifier';
3
- import type { Logger } from '../logger/index';
4
- import { AuthProvider } from './index';
3
+ import type { Logger } from '../logger';
4
+ import { AuthProvider } from '.';
5
5
  export declare const launchTokenAuthMiddleware: () => <M extends {
6
6
  logger: Logger;
7
7
  accountsGateway: AccountsGateway;
@@ -1,4 +1,4 @@
1
- import { assertDefined } from '../../assertions/index';
1
+ import { assertDefined } from '../../assertions';
2
2
  import { once } from '../../misc/helpers';
3
3
  const stubAuthProvider = (services) => {
4
4
  const getUserUuid = once(async () => {
@@ -1,6 +1,6 @@
1
- import { ConfigProviderForConfig } from '../../config/index';
2
- import { GenericFetch } from '../../fetch/index';
3
- import { CookieAuthProvider } from './index';
1
+ import { ConfigProviderForConfig } from '../../config';
2
+ import { GenericFetch } from '../../fetch';
3
+ import { CookieAuthProvider } from '.';
4
4
  type Config = {
5
5
  accountsBase: string;
6
6
  cookieName: string;
@@ -1,8 +1,8 @@
1
- import { once } from '../../index';
2
- import { resolveConfigValue } from '../../config/index';
3
- import { ifDefined } from '../../guards/index';
1
+ import { once } from '../..';
2
+ import { resolveConfigValue } from '../../config';
3
+ import { ifDefined } from '../../guards';
4
4
  import { loadUserData } from './utils/userSubrequest';
5
- import { getAuthTokenOrCookie } from './index';
5
+ import { getAuthTokenOrCookie } from '.';
6
6
  export const subrequestAuthProvider = (initializer) => (configProvider) => {
7
7
  const config = configProvider[ifDefined(initializer.configSpace, 'subrequest')];
8
8
  const cookieName = once(() => resolveConfigValue(config.cookieName));
@@ -1,4 +1,4 @@
1
- import type { User } from '../index';
1
+ import type { User } from '..';
2
2
  export declare const decryptJwe: (jwe: string, encryptionPrivateKey: Buffer | string) => string | undefined;
3
3
  type MaybeAccountsSSOToken = {
4
4
  iss?: string;
@@ -1,5 +1,5 @@
1
1
  import { createDecipheriv, verify } from 'crypto';
2
- import { isPlainObject } from '../../../guards/index';
2
+ import { isPlainObject } from '../../../guards';
3
3
  export const decryptJwe = (jwe, encryptionPrivateKey) => {
4
4
  const jweParts = jwe.split('.', 6);
5
5
  if (jweParts.length !== 5 || jweParts[1]) {
@@ -1,4 +1,4 @@
1
- import { User } from '../index';
1
+ import { User } from '..';
2
2
  import { Window } from '../browser';
3
3
  export type UserData<T = User> = {
4
4
  user?: T;
@@ -1,6 +1,6 @@
1
- import { AuthProvider } from '../index';
2
- import { AssertionFailed } from '../../../assertions/index';
3
- import { ConfigProviderForConfig } from '../../../config/index';
1
+ import { AuthProvider } from '..';
2
+ import { AssertionFailed } from '../../../assertions';
3
+ import { ConfigProviderForConfig } from '../../../config';
4
4
  type Config = {
5
5
  application: string;
6
6
  };
@@ -1,6 +1,6 @@
1
- import { doThrow } from '../../../assertions/index';
1
+ import { doThrow } from '../../../assertions';
2
2
  import { resolveConfigValue } from '../../../config/resolveConfigValue';
3
- import { UnauthorizedError } from '../../../errors/index';
3
+ import { UnauthorizedError } from '../../../errors';
4
4
  import { once } from '../../../misc/helpers';
5
5
  export const createUserRoleValidator = (auth, config) => {
6
6
  const application = once(() => resolveConfigValue(config.application));
@@ -1,3 +1,3 @@
1
- import { ApiUser } from '../index';
2
- import { GenericFetch } from '../../../fetch/index';
1
+ import { ApiUser } from '..';
2
+ import { GenericFetch } from '../../../fetch';
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 './index';
2
+ import { DocumentBaseType, DocumentBaseValueTypes } from '.';
3
3
  export declare const encodeDynamoAttribute: (value: DocumentBaseValueTypes) => AttributeValue;
4
4
  export declare const encodeDynamoDocument: (base: DocumentBaseType) => {
5
5
  [k: string]: AttributeValue;
@@ -1,4 +1,4 @@
1
- import { isPlainObject } from '../../guards/index';
1
+ import { isPlainObject } from '../../guards';
2
2
  export const encodeDynamoAttribute = (value) => {
3
3
  if (typeof value === 'string') {
4
4
  return { S: value };
@@ -1,6 +1,6 @@
1
1
  import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
- import { Config, TDocument } from '../index';
3
- import { ConfigProviderForConfig } from '../../../config/index';
2
+ import { Config, TDocument } from '..';
3
+ import { ConfigProviderForConfig } from '../../../config';
4
4
  interface Initializer<C> {
5
5
  configSpace?: C;
6
6
  dynamoClient?: DynamoDB;
@@ -1,9 +1,9 @@
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 { once } from '../../../index';
4
- import { resolveConfigValue } from '../../../config/index';
5
- import { ConflictError, NotFoundError } from '../../../errors/index';
6
- import { ifDefined } from '../../../guards/index';
3
+ import { once } from '../../..';
4
+ import { resolveConfigValue } from '../../../config';
5
+ import { ConflictError, NotFoundError } from '../../../errors';
6
+ import { ifDefined } from '../../../guards';
7
7
  import { decodeDynamoDocument, encodeDynamoAttribute, encodeDynamoDocument } from '../dynamoEncoding';
8
8
  export const dynamoUnversionedDocumentStore = (initializer) => {
9
9
  const init = ifDefined(initializer, {});
@@ -1,5 +1,5 @@
1
- import { Config, TDocument } from '../index';
2
- import { ConfigProviderForConfig } from '../../../config/index';
1
+ import { Config, TDocument } from '..';
2
+ import { ConfigProviderForConfig } from '../../../config';
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 { hashValue } from '../../../index';
4
- import { resolveConfigValue } from '../../../config/index';
5
- import { ConflictError, NotFoundError } from '../../../errors/index';
6
- import { ifDefined, isDefined } from '../../../guards/index';
3
+ import { hashValue } from '../../..';
4
+ import { resolveConfigValue } from '../../../config';
5
+ import { ConflictError, NotFoundError } from '../../../errors';
6
+ import { ifDefined, isDefined } from '../../../guards';
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,7 +1,7 @@
1
1
  import { DynamoDB } from '@aws-sdk/client-dynamodb';
2
- import { Config } from '../index';
3
- import { ConfigProviderForConfig } from '../../../config/index';
4
- import { VersionedDocumentAuthor, VersionedTDocument } from './index';
2
+ import { Config } from '..';
3
+ import { ConfigProviderForConfig } from '../../../config';
4
+ import { VersionedDocumentAuthor, VersionedTDocument } from '.';
5
5
  interface Initializer<C> {
6
6
  configSpace?: C;
7
7
  dynamoClient?: DynamoDB;
@@ -1,7 +1,7 @@
1
1
  import { DynamoDB, PutItemCommand, QueryCommand, ScanCommand } from '@aws-sdk/client-dynamodb';
2
- import { once } from '../../../index';
3
- import { resolveConfigValue } from '../../../config/index';
4
- import { ifDefined } from '../../../guards/index';
2
+ import { once } from '../../..';
3
+ import { resolveConfigValue } from '../../../config';
4
+ import { ifDefined } from '../../../guards';
5
5
  import { decodeDynamoDocument, encodeDynamoAttribute, encodeDynamoDocument } from '../dynamoEncoding';
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) => {