@openstax/ts-utils 1.43.0 → 1.43.1

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 (194) 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/middleware/apiErrorHandler.d.ts +3 -3
  13. package/dist/cjs/middleware/apiErrorHandler.js +12 -12
  14. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +3 -3
  15. package/dist/cjs/middleware/apiSlowResponseMiddleware.js +5 -5
  16. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
  17. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +2 -2
  18. package/dist/cjs/middleware/throwNotFoundMiddleware.js +2 -2
  19. package/dist/cjs/misc/helpers.d.ts +1 -1
  20. package/dist/cjs/misc/merge.js +2 -2
  21. package/dist/cjs/pagination/index.d.ts +1 -1
  22. package/dist/cjs/pagination/index.js +10 -10
  23. package/dist/cjs/routing/helpers.d.ts +1 -1
  24. package/dist/cjs/routing/helpers.js +7 -7
  25. package/dist/cjs/routing/index.d.ts +1 -1
  26. package/dist/cjs/routing/lambdaBatchRequestHandler.d.ts +2 -2
  27. package/dist/cjs/routing/lambdaBatchRequestHandler.js +2 -2
  28. package/dist/cjs/routing/validators/zod.js +2 -2
  29. package/dist/cjs/services/accountsGateway/index.d.ts +5 -5
  30. package/dist/cjs/services/accountsGateway/index.js +17 -17
  31. package/dist/cjs/services/apiGateway/index.d.ts +4 -4
  32. package/dist/cjs/services/apiGateway/index.js +10 -10
  33. package/dist/cjs/services/authProvider/browser.d.ts +3 -3
  34. package/dist/cjs/services/authProvider/browser.js +9 -9
  35. package/dist/cjs/services/authProvider/decryption.d.ts +3 -3
  36. package/dist/cjs/services/authProvider/decryption.js +7 -7
  37. package/dist/cjs/services/authProvider/index.d.ts +3 -3
  38. package/dist/cjs/services/authProvider/launchToken.d.ts +3 -3
  39. package/dist/cjs/services/authProvider/launchToken.js +3 -3
  40. package/dist/cjs/services/authProvider/subrequest.d.ts +3 -3
  41. package/dist/cjs/services/authProvider/subrequest.js +10 -10
  42. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
  43. package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +3 -3
  44. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +1 -1
  45. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +3 -3
  46. package/dist/cjs/services/authProvider/utils/userRoleValidator.js +4 -4
  47. package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +2 -2
  48. package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +1 -1
  49. package/dist/cjs/services/documentStore/dynamoEncoding.js +2 -2
  50. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +2 -2
  51. package/dist/cjs/services/documentStore/unversioned/dynamodb.js +14 -14
  52. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +2 -2
  53. package/dist/cjs/services/documentStore/unversioned/file-system.js +13 -13
  54. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +3 -3
  55. package/dist/cjs/services/documentStore/versioned/dynamodb.js +6 -6
  56. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +3 -3
  57. package/dist/cjs/services/documentStore/versioned/index.d.ts +1 -1
  58. package/dist/cjs/services/exercisesGateway/index.d.ts +2 -2
  59. package/dist/cjs/services/exercisesGateway/index.js +14 -14
  60. package/dist/cjs/services/fileServer/index.js +3 -3
  61. package/dist/cjs/services/fileServer/localFileServer.d.ts +2 -2
  62. package/dist/cjs/services/fileServer/localFileServer.js +9 -9
  63. package/dist/cjs/services/fileServer/s3FileServer.d.ts +2 -2
  64. package/dist/cjs/services/fileServer/s3FileServer.js +13 -13
  65. package/dist/cjs/services/httpMessageVerifier/index.d.ts +1 -1
  66. package/dist/cjs/services/httpMessageVerifier/index.js +16 -16
  67. package/dist/cjs/services/launchParams/signer.d.ts +2 -2
  68. package/dist/cjs/services/launchParams/signer.js +9 -9
  69. package/dist/cjs/services/launchParams/verifier.d.ts +1 -1
  70. package/dist/cjs/services/launchParams/verifier.js +8 -8
  71. package/dist/cjs/services/logger/console.d.ts +1 -1
  72. package/dist/cjs/services/logger/console.js +2 -2
  73. package/dist/cjs/services/logger/index.d.ts +1 -1
  74. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  75. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +7 -7
  76. package/dist/cjs/services/lrsGateway/batching.d.ts +2 -2
  77. package/dist/cjs/services/lrsGateway/batching.js +2 -2
  78. package/dist/cjs/services/lrsGateway/file-system.d.ts +3 -3
  79. package/dist/cjs/services/lrsGateway/file-system.js +8 -8
  80. package/dist/cjs/services/lrsGateway/index.d.ts +4 -4
  81. package/dist/cjs/services/lrsGateway/index.js +15 -15
  82. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +3 -3
  83. package/dist/cjs/services/lrsGateway/xapiUtils.js +2 -2
  84. package/dist/cjs/services/postgresConnection/index.d.ts +2 -2
  85. package/dist/cjs/services/postgresConnection/index.js +10 -10
  86. package/dist/cjs/services/queueProvider/local.d.ts +2 -2
  87. package/dist/cjs/services/queueProvider/local.js +5 -5
  88. package/dist/cjs/services/queueProvider/sqs.d.ts +2 -2
  89. package/dist/cjs/services/queueProvider/sqs.js +5 -5
  90. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  91. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +9 -9
  92. package/dist/cjs/services/searchProvider/openSearch.d.ts +2 -2
  93. package/dist/cjs/services/searchProvider/openSearch.js +6 -6
  94. package/dist/cjs/services/searchProvider/streamIndexer.d.ts +2 -2
  95. package/dist/cjs/services/searchProvider/streamIndexer.js +3 -3
  96. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
  97. package/dist/esm/aws/ssmService.js +1 -1
  98. package/dist/esm/config/awsParameterConfig.d.ts +1 -1
  99. package/dist/esm/config/awsParameterConfig.js +1 -1
  100. package/dist/esm/config/envConfig.d.ts +1 -1
  101. package/dist/esm/config/lambdaParameterConfig.d.ts +1 -1
  102. package/dist/esm/config/lambdaParameterConfig.js +2 -2
  103. package/dist/esm/config/replaceConfig.d.ts +1 -1
  104. package/dist/esm/config/resolveConfigValue.d.ts +1 -1
  105. package/dist/esm/errors/index.d.ts +1 -1
  106. package/dist/esm/fetch/fetchStatusRetry.d.ts +1 -1
  107. package/dist/esm/fetch/index.d.ts +1 -1
  108. package/dist/esm/middleware/apiErrorHandler.d.ts +3 -3
  109. package/dist/esm/middleware/apiErrorHandler.js +3 -3
  110. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +3 -3
  111. package/dist/esm/middleware/apiSlowResponseMiddleware.js +2 -2
  112. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
  113. package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +1 -1
  114. package/dist/esm/middleware/throwNotFoundMiddleware.js +1 -1
  115. package/dist/esm/misc/helpers.d.ts +1 -1
  116. package/dist/esm/misc/merge.js +1 -1
  117. package/dist/esm/pagination/index.d.ts +1 -1
  118. package/dist/esm/pagination/index.js +3 -3
  119. package/dist/esm/routing/helpers.d.ts +1 -1
  120. package/dist/esm/routing/helpers.js +3 -3
  121. package/dist/esm/routing/index.d.ts +1 -1
  122. package/dist/esm/routing/lambdaBatchRequestHandler.d.ts +2 -2
  123. package/dist/esm/routing/lambdaBatchRequestHandler.js +1 -1
  124. package/dist/esm/routing/validators/zod.js +1 -1
  125. package/dist/esm/services/accountsGateway/index.d.ts +5 -5
  126. package/dist/esm/services/accountsGateway/index.js +4 -4
  127. package/dist/esm/services/apiGateway/index.d.ts +4 -4
  128. package/dist/esm/services/apiGateway/index.js +4 -4
  129. package/dist/esm/services/authProvider/browser.d.ts +3 -3
  130. package/dist/esm/services/authProvider/browser.js +4 -4
  131. package/dist/esm/services/authProvider/decryption.d.ts +3 -3
  132. package/dist/esm/services/authProvider/decryption.js +3 -3
  133. package/dist/esm/services/authProvider/index.d.ts +3 -3
  134. package/dist/esm/services/authProvider/launchToken.d.ts +3 -3
  135. package/dist/esm/services/authProvider/launchToken.js +1 -1
  136. package/dist/esm/services/authProvider/subrequest.d.ts +3 -3
  137. package/dist/esm/services/authProvider/subrequest.js +4 -4
  138. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
  139. package/dist/esm/services/authProvider/utils/decryptAndVerify.js +1 -1
  140. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +1 -1
  141. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +3 -3
  142. package/dist/esm/services/authProvider/utils/userRoleValidator.js +2 -2
  143. package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +2 -2
  144. package/dist/esm/services/documentStore/dynamoEncoding.d.ts +1 -1
  145. package/dist/esm/services/documentStore/dynamoEncoding.js +1 -1
  146. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +2 -2
  147. package/dist/esm/services/documentStore/unversioned/dynamodb.js +4 -4
  148. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +2 -2
  149. package/dist/esm/services/documentStore/unversioned/file-system.js +4 -4
  150. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +3 -3
  151. package/dist/esm/services/documentStore/versioned/dynamodb.js +3 -3
  152. package/dist/esm/services/documentStore/versioned/file-system.d.ts +3 -3
  153. package/dist/esm/services/documentStore/versioned/index.d.ts +1 -1
  154. package/dist/esm/services/exercisesGateway/index.d.ts +2 -2
  155. package/dist/esm/services/exercisesGateway/index.js +5 -5
  156. package/dist/esm/services/fileServer/index.js +1 -1
  157. package/dist/esm/services/fileServer/localFileServer.d.ts +2 -2
  158. package/dist/esm/services/fileServer/localFileServer.js +3 -3
  159. package/dist/esm/services/fileServer/s3FileServer.d.ts +2 -2
  160. package/dist/esm/services/fileServer/s3FileServer.js +4 -4
  161. package/dist/esm/services/httpMessageVerifier/index.d.ts +1 -1
  162. package/dist/esm/services/httpMessageVerifier/index.js +3 -3
  163. package/dist/esm/services/launchParams/signer.d.ts +2 -2
  164. package/dist/esm/services/launchParams/signer.js +3 -3
  165. package/dist/esm/services/launchParams/verifier.d.ts +1 -1
  166. package/dist/esm/services/launchParams/verifier.js +3 -3
  167. package/dist/esm/services/logger/console.d.ts +1 -1
  168. package/dist/esm/services/logger/console.js +1 -1
  169. package/dist/esm/services/logger/index.d.ts +1 -1
  170. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  171. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +7 -7
  172. package/dist/esm/services/lrsGateway/batching.d.ts +2 -2
  173. package/dist/esm/services/lrsGateway/batching.js +1 -1
  174. package/dist/esm/services/lrsGateway/file-system.d.ts +3 -3
  175. package/dist/esm/services/lrsGateway/file-system.js +4 -4
  176. package/dist/esm/services/lrsGateway/index.d.ts +4 -4
  177. package/dist/esm/services/lrsGateway/index.js +6 -6
  178. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +3 -3
  179. package/dist/esm/services/lrsGateway/xapiUtils.js +1 -1
  180. package/dist/esm/services/postgresConnection/index.d.ts +2 -2
  181. package/dist/esm/services/postgresConnection/index.js +3 -3
  182. package/dist/esm/services/queueProvider/local.d.ts +2 -2
  183. package/dist/esm/services/queueProvider/local.js +2 -2
  184. package/dist/esm/services/queueProvider/sqs.d.ts +2 -2
  185. package/dist/esm/services/queueProvider/sqs.js +2 -2
  186. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  187. package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +3 -3
  188. package/dist/esm/services/searchProvider/openSearch.d.ts +2 -2
  189. package/dist/esm/services/searchProvider/openSearch.js +2 -2
  190. package/dist/esm/services/searchProvider/streamIndexer.d.ts +2 -2
  191. package/dist/esm/services/searchProvider/streamIndexer.js +1 -1
  192. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
  193. package/package.json +1 -1
  194. package/script/bin/.init-params-script.bash.swp +0 -0
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ssmService = void 0;
4
4
  const client_ssm_1 = require("@aws-sdk/client-ssm");
5
- const __1 = require("..");
5
+ const index_1 = require("../index");
6
6
  /**
7
7
  * A memoized instance of the AWS SSM client.
8
8
  */
9
- exports.ssmService = (0, __1.once)(() => new client_ssm_1.SSM({ apiVersion: '2012-08-10' }));
9
+ exports.ssmService = (0, index_1.once)(() => new client_ssm_1.SSM({ apiVersion: '2012-08-10' }));
@@ -1,4 +1,4 @@
1
- import { ConfigValueProvider } from '.';
1
+ import { ConfigValueProvider } from './index';
2
2
  /**
3
3
  * Returns a value from the AWS Parameter Store.
4
4
  *
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.awsParameterConfig = void 0;
4
4
  const client_ssm_1 = require("@aws-sdk/client-ssm");
5
- const assertions_1 = require("../assertions");
5
+ const index_1 = require("../assertions/index");
6
6
  const ssmService_1 = require("../aws/ssmService");
7
7
  const resolveConfigValue_1 = require("./resolveConfigValue");
8
8
  /**
@@ -19,8 +19,8 @@ const awsParameterConfig = (parameterName) => {
19
19
  // send() throws ParameterNotFound if the parameter is missing,
20
20
  // so it's not clear what missing Parameter or Value mean
21
21
  const response = await (0, ssmService_1.ssmService)().send(command);
22
- const parameter = (0, assertions_1.assertDefined)(response.Parameter, `aws GetParameter response missing Parameter key for ${parameterName}"`);
23
- return (0, assertions_1.assertDefined)(parameter.Value, `aws GetParameter response missing Parameter.Value key for ${parameterName}"`);
22
+ const parameter = (0, index_1.assertDefined)(response.Parameter, `aws GetParameter response missing Parameter key for ${parameterName}"`);
23
+ return (0, index_1.assertDefined)(parameter.Value, `aws GetParameter response missing Parameter.Value key for ${parameterName}"`);
24
24
  };
25
25
  };
26
26
  exports.awsParameterConfig = awsParameterConfig;
@@ -1,4 +1,4 @@
1
- import type { ConfigValueProvider } from '.';
1
+ import type { ConfigValueProvider } from './index';
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 '.';
1
+ import { ConfigValueProvider } from './index';
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.
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.lambdaParameterConfig = void 0;
7
7
  const node_fetch_1 = __importDefault(require("node-fetch"));
8
- const assertions_1 = require("../assertions");
8
+ const index_1 = require("../assertions/index");
9
9
  const helpers_1 = require("../misc/helpers");
10
10
  const envConfig_1 = require("./envConfig");
11
- const _1 = require(".");
11
+ const index_2 = require("./index");
12
12
  const lambdaExtensionUrl = 'http://localhost:2773';
13
13
  let lambdaExtensionReadyPromise;
14
14
  /**
@@ -22,8 +22,8 @@ let lambdaExtensionReadyPromise;
22
22
  * @returns the configuration value provider for the value
23
23
  */
24
24
  const lambdaParameterConfig = (parameterName) => async () => {
25
- const token = await (0, _1.resolveConfigValue)((0, envConfig_1.envConfig)('AWS_SESSION_TOKEN', 'runtime'));
26
- const name = await (0, _1.resolveConfigValue)(parameterName);
25
+ const token = await (0, index_2.resolveConfigValue)((0, envConfig_1.envConfig)('AWS_SESSION_TOKEN', 'runtime'));
26
+ const name = await (0, index_2.resolveConfigValue)(parameterName);
27
27
  if (!lambdaExtensionReadyPromise) {
28
28
  // This request will return 400 Bad Request,
29
29
  // but we only care that it'll block until the extension is ready
@@ -35,8 +35,8 @@ const lambdaParameterConfig = (parameterName) => async () => {
35
35
  `${lambdaExtensionUrl}/systemsmanager/parameters/get?name=${name}&withDecryption=true`, { headers: { 'X-Aws-Parameters-Secrets-Token': token } }));
36
36
  if (resp.ok) {
37
37
  const response = await resp.json();
38
- const parameter = (0, assertions_1.assertDefined)(response.Parameter, `aws GetParameter response missing Parameter key for ${name}"`);
39
- return (0, assertions_1.assertDefined)(parameter.Value, `aws GetParameter response missing Parameter.Value key for ${name}"`);
38
+ const parameter = (0, index_1.assertDefined)(response.Parameter, `aws GetParameter response missing Parameter key for ${name}"`);
39
+ return (0, index_1.assertDefined)(parameter.Value, `aws GetParameter response missing Parameter.Value key for ${name}"`);
40
40
  }
41
41
  else {
42
42
  throw new Error(`HTTP Error Response ${resp.status} ${resp.statusText} while fetching parameter ${name}`);
@@ -1,4 +1,4 @@
1
- import { ConfigValueProvider } from '.';
1
+ import { ConfigValueProvider } from './index';
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 '.';
1
+ import type { ConfigValue, ConfigValueProvider } from './index';
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';
1
+ import type { JsonCompatibleStruct } from '../routing/index';
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 '.';
2
+ import { GenericFetch } from './index';
3
3
  interface Options extends RetryOptions {
4
4
  status?: number[];
5
5
  timeout?: number;
@@ -1,4 +1,4 @@
1
- import { METHOD } from '../routing';
1
+ import { METHOD } from '../routing/index';
2
2
  export declare enum FetchStateType {
3
3
  SUCCESS = "success",
4
4
  ERROR = "error",
@@ -1,6 +1,6 @@
1
- import { ForbiddenError, InvalidRequestError, NotFoundError, SessionExpiredError, UnauthorizedError, ValidationError } from '../errors';
2
- import type { ApiResponse } from '../routing';
3
- import type { Logger } from '../services/logger';
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';
4
4
  export type DefaultErrors = {
5
5
  InvalidRequestError: InvalidRequestError;
6
6
  UnauthorizedError: UnauthorizedError;
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createErrorHandler = exports.defaultHandlers = void 0;
4
- const errors_1 = require("../errors");
5
- const routing_1 = require("../routing");
6
- const logger_1 = require("../services/logger");
4
+ const index_1 = require("../errors/index");
5
+ const index_2 = require("../routing/index");
6
+ const index_3 = require("../services/logger/index");
7
7
  exports.defaultHandlers = {
8
- InvalidRequestError: (e) => (0, routing_1.apiTextResponse)(400, `400 ${e.message}`),
9
- UnauthorizedError: (e) => (0, routing_1.apiTextResponse)(401, `401 ${e.message}`),
10
- ForbiddenError: (e) => (0, routing_1.apiTextResponse)(403, `403 ${e.message}`),
11
- NotFoundError: (e) => (0, routing_1.apiTextResponse)(404, `404 ${e.message}`),
12
- ValidationError: (e) => (0, routing_1.apiJsonResponse)(422, e.getData()),
13
- SessionExpiredError: (e) => (0, routing_1.apiTextResponse)(440, `440 ${e.message}`),
8
+ InvalidRequestError: (e) => (0, index_2.apiTextResponse)(400, `400 ${e.message}`),
9
+ UnauthorizedError: (e) => (0, index_2.apiTextResponse)(401, `401 ${e.message}`),
10
+ ForbiddenError: (e) => (0, index_2.apiTextResponse)(403, `403 ${e.message}`),
11
+ NotFoundError: (e) => (0, index_2.apiTextResponse)(404, `404 ${e.message}`),
12
+ ValidationError: (e) => (0, index_2.apiJsonResponse)(422, e.getData()),
13
+ SessionExpiredError: (e) => (0, index_2.apiTextResponse)(440, `440 ${e.message}`),
14
14
  };
15
15
  /**
16
16
  * Creates an error handler. Provides default handlers for `UnauthorizedError`,
@@ -23,9 +23,9 @@ exports.defaultHandlers = {
23
23
  const createErrorHandler = (inputHandlers) => {
24
24
  const handlers = { ...exports.defaultHandlers, ...inputHandlers };
25
25
  return async (e, logger) => {
26
- const name = (0, errors_1.isAppError)(e) ? e.constructor.TYPE : e.constructor.name;
26
+ const name = (0, index_1.isAppError)(e) ? e.constructor.TYPE : e.constructor.name;
27
27
  const handler = handlers[name];
28
- const logLevel = handler ? logger_1.Level.Info : logger_1.Level.Error;
28
+ const logLevel = handler ? index_3.Level.Info : index_3.Level.Error;
29
29
  logger.logEvent(logLevel, {
30
30
  name: e.name,
31
31
  message: e.message,
@@ -36,7 +36,7 @@ const createErrorHandler = (inputHandlers) => {
36
36
  // we looked up based on the errors name is very annoying
37
37
  return handler(e, logger);
38
38
  }
39
- return (0, routing_1.apiTextResponse)(500, '500 Error');
39
+ return (0, index_2.apiTextResponse)(500, '500 Error');
40
40
  };
41
41
  };
42
42
  exports.createErrorHandler = createErrorHandler;
@@ -1,6 +1,6 @@
1
- import type { ConfigProviderForConfig } from '../config';
2
- import type { ApiResponse } from '../routing';
3
- import type { Logger } from '../services/logger';
1
+ import type { ConfigProviderForConfig } from '../config/index';
2
+ import type { ApiResponse } from '../routing/index';
3
+ import type { Logger } from '../services/logger/index';
4
4
  type Config = {
5
5
  logResponseSlowerThan: string;
6
6
  timeoutResponseAfter: string;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSlowResponseMiddleware = void 0;
4
4
  const resolveConfigValue_1 = require("../config/resolveConfigValue");
5
5
  const helpers_1 = require("../misc/helpers");
6
- const routing_1 = require("../routing");
7
- const logger_1 = require("../services/logger");
6
+ const index_1 = require("../routing/index");
7
+ const index_2 = require("../services/logger/index");
8
8
  /**
9
9
  * 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.
10
10
  *
@@ -30,10 +30,10 @@ const createSlowResponseMiddleware = (config) => {
30
30
  const timeoutPromise = isNaN(timeoutAfter)
31
31
  ? undefined
32
32
  : new Promise(resolve => timeout = setTimeout(() => {
33
- logger.logEvent(logger_1.Level.Error, {
33
+ logger.logEvent(index_2.Level.Error, {
34
34
  message: 'request processing timed out',
35
35
  });
36
- resolve((0, routing_1.apiTextResponse)(504, '504 Gateway Timeout'));
36
+ resolve((0, index_1.apiTextResponse)(504, '504 Gateway Timeout'));
37
37
  }, timeoutAfter));
38
38
  const requestPromise = response.finally(() => {
39
39
  const time = Date.now() - start;
@@ -41,7 +41,7 @@ const createSlowResponseMiddleware = (config) => {
41
41
  clearTimeout(timeout);
42
42
  }
43
43
  if (time > slowThreshold) {
44
- logger.logEvent(logger_1.Level.Warn, {
44
+ logger.logEvent(index_2.Level.Warn, {
45
45
  message: 'slow response',
46
46
  time,
47
47
  });
@@ -1,6 +1,6 @@
1
1
  import { APIGatewayProxyEventV2 } from 'aws-lambda';
2
- import { ConfigProviderForConfig } from '../config';
3
- import { ApiResponse } from '../routing';
2
+ import { ConfigProviderForConfig } from '../config/index';
3
+ import { ApiResponse } from '../routing/index';
4
4
  type Config = {
5
5
  corsAllowedHostRegex: string;
6
6
  };
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createLambdaCorsResponseMiddleware = void 0;
4
4
  const resolveConfigValue_1 = require("../config/resolveConfigValue");
5
5
  const helpers_1 = require("../misc/helpers");
6
- const routing_1 = require("../routing");
6
+ const index_1 = require("../routing/index");
7
7
  /**
8
8
  * Creates response middleware that adds CORS headers to responses from approved hosts.
9
9
  *
@@ -37,7 +37,7 @@ const createLambdaCorsResponseMiddleware = (config) => () => (responsePromise, {
37
37
  });
38
38
  }
39
39
  if (request.requestContext.http.method === 'OPTIONS') {
40
- return cors().then(headers => (0, routing_1.apiTextResponse)(200, '', headers));
40
+ return cors().then(headers => (0, index_1.apiTextResponse)(200, '', headers));
41
41
  }
42
42
  return responsePromise;
43
43
  };
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createThrowNotFoundMiddleware = void 0;
4
- const errors_1 = require("../errors");
4
+ const index_1 = require("../errors/index");
5
5
  /**
6
6
  * Creates response middleware that throws a `NotFoundError` if the response is undefined.
7
7
  */
8
8
  const createThrowNotFoundMiddleware = () => () => (response) => {
9
9
  if (!response) {
10
- throw new errors_1.NotFoundError('not found');
10
+ throw new index_1.NotFoundError('not found');
11
11
  }
12
12
  return response;
13
13
  };
@@ -1,4 +1,4 @@
1
- import type { Logger } from '../services/logger';
1
+ import type { Logger } from '../services/logger/index';
2
2
  /**
3
3
  * Returns a function that gets the value of the given key from an object
4
4
  *
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.merge = exports.getCommonProperties = void 0;
4
- const guards_1 = require("../guards");
4
+ const index_1 = require("../guards/index");
5
5
  /**
6
6
  * Takes two objects and returns an array of the keys that are common to both, with a type
7
7
  * limited to those keys.
@@ -34,7 +34,7 @@ const merge = (...[thing1, ...tail]) => {
34
34
  ...mergedTail,
35
35
  ...(0, exports.getCommonProperties)(thing1, mergedTail).reduce((result, property) => ({
36
36
  ...result,
37
- ...((0, guards_1.isPlainObject)(thing1[property]) && (0, guards_1.isPlainObject)(mergedTail[property])
37
+ ...((0, index_1.isPlainObject)(thing1[property]) && (0, index_1.isPlainObject)(mergedTail[property])
38
38
  ? { [property]: (0, exports.merge)(thing1[property], mergedTail[property]) }
39
39
  : (Array.isArray(thing1[property]) && Array.isArray(mergedTail[property]))
40
40
  ? { [property]: [...thing1[property], ...mergedTail[property]] }
@@ -1,4 +1,4 @@
1
- import { QueryParams, RouteMatchRecord } from '../routing';
1
+ import { QueryParams, RouteMatchRecord } from '../routing/index';
2
2
  export type PaginationHandler<Pa, Q extends QueryParams> = <R>(queryParams: Q, match: RouteMatchRecord<R>) => Pa & {
3
3
  getUnusedQueryParams: () => Q;
4
4
  };
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pageNumberPagination = exports.loadMorePagination = exports.createPaginationMiddleware = void 0;
4
- const assertions_1 = require("../assertions");
5
- const errors_1 = require("../errors");
6
- const routing_1 = require("../routing");
4
+ const index_1 = require("../assertions/index");
5
+ const index_2 = require("../errors/index");
6
+ const index_3 = require("../routing/index");
7
7
  /**
8
8
  * helper to create middleware with the given paginator. aside from taking care of annoying to write pagination logic, these helpers also make
9
9
  * sure that all item list responses have the same formatting.
@@ -38,7 +38,7 @@ const loadMorePagination = (queryParams, { route, params }) => {
38
38
  getUnusedQueryParams: () => otherParams,
39
39
  getPageTokenString: () => pageToken,
40
40
  getPageTokenNumber: () => pageToken && typeof pageToken === 'string'
41
- ? (0, assertions_1.notNaN)(parseInt(pageToken, 10), () => { throw new errors_1.InvalidRequestError(); })
41
+ ? (0, index_1.notNaN)(parseInt(pageToken, 10), () => { throw new index_2.InvalidRequestError(); })
42
42
  : undefined,
43
43
  getPaginationResponse: ({ items, ...meta }) => {
44
44
  return {
@@ -46,7 +46,7 @@ const loadMorePagination = (queryParams, { route, params }) => {
46
46
  meta,
47
47
  links: {
48
48
  nextPage: meta.nextPageToken
49
- ? (0, routing_1.renderAnyRouteUrl)(route, params, { ...queryParams, pageToken: meta.nextPageToken.toString() })
49
+ ? (0, index_3.renderAnyRouteUrl)(route, params, { ...queryParams, pageToken: meta.nextPageToken.toString() })
50
50
  : undefined,
51
51
  }
52
52
  };
@@ -57,7 +57,7 @@ exports.loadMorePagination = loadMorePagination;
57
57
  const pageNumberPagination = (queryParams, { route, params }) => {
58
58
  const { page, ...otherParams } = queryParams;
59
59
  const numberPage = page && typeof page === 'string'
60
- ? (0, assertions_1.notNaN)(parseInt(page, 10), () => { throw new errors_1.InvalidRequestError(); })
60
+ ? (0, index_1.notNaN)(parseInt(page, 10), () => { throw new index_2.InvalidRequestError(); })
61
61
  : undefined;
62
62
  return {
63
63
  getUnusedQueryParams: () => otherParams,
@@ -67,13 +67,13 @@ const pageNumberPagination = (queryParams, { route, params }) => {
67
67
  items,
68
68
  meta,
69
69
  links: {
70
- firstPage: (0, routing_1.renderAnyRouteUrl)(route, params, { ...queryParams, page: '1' }),
71
- lastPage: (0, routing_1.renderAnyRouteUrl)(route, params, { ...queryParams, page: meta.totalPages.toString() }),
70
+ firstPage: (0, index_3.renderAnyRouteUrl)(route, params, { ...queryParams, page: '1' }),
71
+ lastPage: (0, index_3.renderAnyRouteUrl)(route, params, { ...queryParams, page: meta.totalPages.toString() }),
72
72
  nextPage: meta.currentPage < meta.totalPages
73
- ? (0, routing_1.renderAnyRouteUrl)(route, params, { ...queryParams, page: (meta.currentPage + 1).toString() })
73
+ ? (0, index_3.renderAnyRouteUrl)(route, params, { ...queryParams, page: (meta.currentPage + 1).toString() })
74
74
  : undefined,
75
75
  prevPage: meta.currentPage > 1
76
- ? (0, routing_1.renderAnyRouteUrl)(route, params, { ...queryParams, page: (meta.currentPage - 1).toString() })
76
+ ? (0, index_3.renderAnyRouteUrl)(route, params, { ...queryParams, page: (meta.currentPage - 1).toString() })
77
77
  : undefined
78
78
  }
79
79
  };
@@ -1,4 +1,4 @@
1
- import type { HttpHeaders } from '.';
1
+ import type { HttpHeaders } from './index';
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,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requestPayloadProvider = exports.unsafePayloadValidator = exports.getRequestBody = exports.getHeader = void 0;
4
- const assertions_1 = require("../assertions");
5
- const errors_1 = require("../errors");
6
- const guards_1 = require("../guards");
4
+ const index_1 = require("../assertions/index");
5
+ const index_2 = require("../errors/index");
6
+ const index_3 = require("../guards/index");
7
7
  /**
8
8
  * Get the value of a header, case insensitive; note if there are multiple headers of the same
9
9
  * value, this only returns the first value
@@ -26,7 +26,7 @@ exports.getHeader = getHeader;
26
26
  */
27
27
  const getRequestBody = (request) => {
28
28
  if ((0, exports.getHeader)(request.headers, 'content-type') !== 'application/json') {
29
- throw new errors_1.InvalidRequestError('unknown content type: ' + (0, exports.getHeader)(request.headers, 'content-type'));
29
+ throw new index_2.InvalidRequestError('unknown content type: ' + (0, exports.getHeader)(request.headers, 'content-type'));
30
30
  }
31
31
  if (!request.body) {
32
32
  return {};
@@ -37,7 +37,7 @@ const getRequestBody = (request) => {
37
37
  catch (error) {
38
38
  // Since the body is provided by the user, invalid JSON in the body is an invalid request
39
39
  // We return the message which tells them why the JSON is invalid, but no backtrace
40
- throw new errors_1.InvalidRequestError((0, assertions_1.assertErrorInstanceOf)(error, SyntaxError).message);
40
+ throw new index_2.InvalidRequestError((0, index_1.assertErrorInstanceOf)(error, SyntaxError).message);
41
41
  }
42
42
  };
43
43
  exports.getRequestBody = getRequestBody;
@@ -46,7 +46,7 @@ exports.getRequestBody = getRequestBody;
46
46
  * stub validator because writing validators is annoying
47
47
  */
48
48
  const unsafePayloadValidator = () => (input) => {
49
- return (0, guards_1.isPlainObject)(input) && Object.keys(input).length > 0;
49
+ return (0, index_3.isPlainObject)(input) && Object.keys(input).length > 0;
50
50
  };
51
51
  exports.unsafePayloadValidator = unsafePayloadValidator;
52
52
  /**
@@ -83,7 +83,7 @@ const requestPayloadProvider = (validator) => () => (requestServices) => {
83
83
  const payload = (0, exports.getRequestBody)(requestServices.request);
84
84
  // for more precise error messages, throw your own InvalidRequestError from your validator function
85
85
  if (!validator(payload)) {
86
- throw new errors_1.InvalidRequestError();
86
+ throw new index_2.InvalidRequestError();
87
87
  }
88
88
  return { ...requestServices, payload };
89
89
  };
@@ -1,4 +1,4 @@
1
- import { Logger } from '../services/logger';
1
+ import { Logger } from '../services/logger/index';
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';
3
- import { ApiResponse, BatchHandler } from '.';
2
+ import { Logger } from '../services/logger/index';
3
+ import { ApiResponse, BatchHandler } from './index';
4
4
  type Ro = Promise<ApiResponse<number, any>>;
5
5
  export declare const lambdaBatchRequestHandler: <Sa, Ri extends APIGatewayProxyEventV2>(config: {
6
6
  batchPath: string;
@@ -4,7 +4,7 @@ exports.lambdaBatchRequestHandler = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const asyncPool_1 = require("../misc/asyncPool");
6
6
  const helpers_1 = require("./helpers");
7
- const _1 = require(".");
7
+ const index_1 = require("./index");
8
8
  const BatchItemSchema = zod_1.z.object({
9
9
  id: zod_1.z.string(),
10
10
  path: zod_1.z.string(),
@@ -66,7 +66,7 @@ const lambdaBatchRequestHandler = (config) => {
66
66
  headers: (response === null || response === void 0 ? void 0 : response.headers) || {}
67
67
  }))
68
68
  };
69
- return (0, _1.apiJsonResponse)(200, data);
69
+ return (0, index_1.apiJsonResponse)(200, data);
70
70
  }
71
71
  });
72
72
  };
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.zodPayloadValidator = void 0;
4
4
  /* spell-checker: ignore treeify */
5
5
  const zod_1 = require("zod");
6
- const errors_1 = require("../../errors");
6
+ const index_1 = require("../../errors/index");
7
7
  const zodPayloadValidator = (validator) => (input) => {
8
8
  const result = validator.safeParse(input);
9
9
  if (result.success) {
10
10
  return true;
11
11
  }
12
- throw new errors_1.ValidationError((0, zod_1.treeifyError)(result.error));
12
+ throw new index_1.ValidationError((0, zod_1.treeifyError)(result.error));
13
13
  };
14
14
  exports.zodPayloadValidator = zodPayloadValidator;
@@ -1,8 +1,8 @@
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';
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';
6
6
  export type Config = {
7
7
  accountsBase: string;
8
8
  accountsAuthToken: string;
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.accountsGateway = void 0;
7
7
  const lodash_1 = require("lodash");
8
8
  const query_string_1 = __importDefault(require("query-string"));
9
- const config_1 = require("../../config");
10
- const guards_1 = require("../../guards");
9
+ const index_1 = require("../../config/index");
10
+ const index_2 = require("../../guards/index");
11
11
  const helpers_1 = require("../../misc/helpers");
12
- const routing_1 = require("../../routing");
13
- const logger_1 = require("../logger");
12
+ const index_3 = require("../../routing/index");
13
+ const index_4 = require("../logger/index");
14
14
  class ApiError extends Error {
15
15
  constructor(message, status) {
16
16
  super(message);
@@ -18,9 +18,9 @@ class ApiError extends Error {
18
18
  }
19
19
  }
20
20
  const accountsGateway = (initializer) => (configProvider) => {
21
- const config = configProvider[(0, guards_1.ifDefined)(initializer.configSpace, 'accounts')];
22
- const accountsBase = (0, helpers_1.once)(() => (0, config_1.resolveConfigValue)(config.accountsBase));
23
- const accountsAuthToken = (0, helpers_1.once)(() => (0, config_1.resolveConfigValue)(config.accountsAuthToken));
21
+ const config = configProvider[(0, index_2.ifDefined)(initializer.configSpace, 'accounts')];
22
+ const accountsBase = (0, helpers_1.once)(() => (0, index_1.resolveConfigValue)(config.accountsBase));
23
+ const accountsAuthToken = (0, helpers_1.once)(() => (0, index_1.resolveConfigValue)(config.accountsAuthToken));
24
24
  return ({ logger }) => {
25
25
  const request = async (method, path, options, statuses = [200, 201]) => {
26
26
  const host = (await accountsBase()).replace(/\/+$/, '');
@@ -40,10 +40,10 @@ const accountsGateway = (initializer) => (configProvider) => {
40
40
  }
41
41
  return response.json();
42
42
  };
43
- const findOrCreateUser = async (body) => request(routing_1.METHOD.POST, 'user/find-or-create', { body });
43
+ const findOrCreateUser = async (body) => request(index_3.METHOD.POST, 'user/find-or-create', { body });
44
44
  const findUser = async (body) => {
45
45
  try {
46
- return await request(routing_1.METHOD.POST, 'user/find', { body });
46
+ return await request(index_3.METHOD.POST, 'user/find', { body });
47
47
  }
48
48
  catch (error) {
49
49
  if (error instanceof ApiError && error.status === 404) {
@@ -54,16 +54,16 @@ const accountsGateway = (initializer) => (configProvider) => {
54
54
  }
55
55
  }
56
56
  };
57
- const getUser = async (token) => request(routing_1.METHOD.GET, 'user', { token });
58
- const linkUser = async (body) => request(routing_1.METHOD.POST, 'user/external-ids', {
57
+ const getUser = async (token) => request(index_3.METHOD.GET, 'user', { token });
58
+ const linkUser = async (body) => request(index_3.METHOD.POST, 'user/external-ids', {
59
59
  body: {
60
60
  external_id: body.externalId,
61
61
  user_id: body.userId,
62
62
  ...(body.role && { role: body.role }),
63
63
  }
64
64
  });
65
- const searchUsers = async (payload) => request(routing_1.METHOD.GET, `users?${query_string_1.default.stringify(payload)}`, {});
66
- const updateUser = async (token, body) => request(routing_1.METHOD.PUT, 'user', { body, token });
65
+ const searchUsers = async (payload) => request(index_3.METHOD.GET, `users?${query_string_1.default.stringify(payload)}`, {});
66
+ const updateUser = async (token, body) => request(index_3.METHOD.PUT, 'user', { body, token });
67
67
  const getPlatformUserId = (externalIds, platformId) => {
68
68
  for (const externalId of externalIds) {
69
69
  const [userPlatformId, userId] = externalId.split('/', 2);
@@ -86,21 +86,21 @@ const accountsGateway = (initializer) => (configProvider) => {
86
86
  return undefined;
87
87
  const platformUserId = platformId ? getPlatformUserId(user.external_ids, platformId) : undefined;
88
88
  if (platformId && !platformUserId) {
89
- logger.logEvent(logger_1.Level.Warn, {
89
+ logger.logEvent(index_4.Level.Warn, {
90
90
  message: 'Accounts user has no external_id matching the given platformId',
91
91
  accountsUuid: user.uuid,
92
92
  platformId,
93
93
  });
94
94
  }
95
95
  if (!user.full_name) {
96
- logger.logEvent(logger_1.Level.Warn, {
96
+ logger.logEvent(index_4.Level.Warn, {
97
97
  message: 'Accounts user has no full_name',
98
98
  accountsUuid: user.uuid,
99
99
  });
100
100
  }
101
101
  return { data, fullName: user.full_name, platformUserId, uuid: user.uuid };
102
102
  });
103
- return results.filter(guards_1.isDefined);
103
+ return results.filter(index_2.isDefined);
104
104
  };
105
105
  const getUserMap = async (userUuids, mapper) => {
106
106
  if (userUuids.size === 0)
@@ -111,7 +111,7 @@ const accountsGateway = (initializer) => (configProvider) => {
111
111
  });
112
112
  const accountsUuids = items.map((user) => user.uuid);
113
113
  if (!(0, lodash_1.isEqual)(accountsUuids.sort(), inputChunk.sort())) {
114
- logger.logEvent(logger_1.Level.Warn, {
114
+ logger.logEvent(index_4.Level.Warn, {
115
115
  message: 'Unexpected Accounts user search results',
116
116
  uuids: inputChunk,
117
117
  accountsUuids,
@@ -1,9 +1,9 @@
1
1
  import { Headers } from 'node-fetch';
2
- import { ConfigProviderForConfig } from '../../config';
3
- import { ConfigForFetch, GenericFetch, Response } from '../../fetch';
4
- import { AnyRoute, ApiResponse, OutputForRoute, ParamsForRoute, PayloadForRoute, QueryParams } from '../../routing';
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';
5
5
  import { UnwrapPromise } from '../../types';
6
- import { Logger } from '../logger';
6
+ import { Logger } from '../logger/index';
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> = {