@openstax/ts-utils 1.34.0 → 1.34.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 (503) hide show
  1. package/README.md +90 -62
  2. package/dist/cjs/assertions/index.d.ts +89 -0
  3. package/dist/cjs/assertions/index.js +157 -0
  4. package/dist/cjs/aws/ssmService.d.ts +5 -0
  5. package/dist/cjs/aws/ssmService.js +9 -0
  6. package/dist/cjs/config/awsParameterConfig.d.ts +10 -0
  7. package/dist/cjs/config/awsParameterConfig.js +26 -0
  8. package/dist/cjs/config/envConfig.d.ts +24 -0
  9. package/dist/cjs/config/envConfig.js +57 -0
  10. package/{packages/utils/src/config/index.ts → dist/cjs/config/index.d.ts} +13 -29
  11. package/dist/cjs/config/index.js +35 -0
  12. package/dist/cjs/config/lambdaParameterConfig.d.ts +12 -0
  13. package/dist/cjs/config/lambdaParameterConfig.js +45 -0
  14. package/dist/cjs/config/replaceConfig.d.ts +14 -0
  15. package/dist/cjs/config/replaceConfig.js +22 -0
  16. package/dist/cjs/config/resolveConfigValue.d.ts +5 -0
  17. package/dist/cjs/config/resolveConfigValue.js +12 -0
  18. package/dist/cjs/errors/index.d.ts +88 -0
  19. package/dist/cjs/errors/index.js +123 -0
  20. package/dist/cjs/fetch/fetchStatusRetry.d.ts +8 -0
  21. package/dist/cjs/fetch/fetchStatusRetry.js +27 -0
  22. package/dist/cjs/fetch/index.d.ts +64 -0
  23. package/dist/cjs/fetch/index.js +55 -0
  24. package/{packages/utils/src/guards/index.ts → dist/cjs/guards/index.d.ts} +7 -10
  25. package/dist/cjs/guards/index.js +44 -0
  26. package/dist/cjs/index.js +20 -0
  27. package/dist/cjs/middleware/apiErrorHandler.d.ts +24 -0
  28. package/dist/cjs/middleware/apiErrorHandler.js +42 -0
  29. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +23 -0
  30. package/dist/cjs/middleware/apiSlowResponseMiddleware.js +54 -0
  31. package/{packages/utils/src/middleware/index.ts → dist/cjs/middleware/index.d.ts} +5 -53
  32. package/dist/cjs/middleware/index.js +48 -0
  33. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +20 -0
  34. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +44 -0
  35. package/dist/cjs/middleware/throwNotFoundMiddleware.d.ts +4 -0
  36. package/dist/cjs/middleware/throwNotFoundMiddleware.js +14 -0
  37. package/dist/cjs/misc/hashValue.d.ts +10 -0
  38. package/dist/cjs/misc/hashValue.js +17 -0
  39. package/dist/cjs/misc/helpers.d.ts +124 -0
  40. package/dist/cjs/misc/helpers.js +214 -0
  41. package/dist/cjs/misc/merge.d.ts +21 -0
  42. package/dist/cjs/misc/merge.js +45 -0
  43. package/dist/cjs/misc/partitionSequence.d.ts +35 -0
  44. package/dist/cjs/misc/partitionSequence.js +55 -0
  45. package/dist/cjs/pagination/index.d.ts +91 -0
  46. package/dist/cjs/pagination/index.js +83 -0
  47. package/dist/cjs/routing/helpers.d.ts +57 -0
  48. package/dist/cjs/routing/helpers.js +90 -0
  49. package/dist/cjs/routing/index.d.ts +290 -0
  50. package/dist/cjs/routing/index.js +295 -0
  51. package/dist/cjs/routing/validators/zod.d.ts +4 -0
  52. package/dist/cjs/routing/validators/zod.js +14 -0
  53. package/dist/cjs/services/accountsGateway/index.d.ts +92 -0
  54. package/dist/cjs/services/accountsGateway/index.js +138 -0
  55. package/dist/cjs/services/apiGateway/index.d.ts +68 -0
  56. package/dist/cjs/services/apiGateway/index.js +118 -0
  57. package/dist/cjs/services/authProvider/browser.d.ts +40 -0
  58. package/dist/cjs/services/authProvider/browser.js +155 -0
  59. package/dist/cjs/services/authProvider/decryption.d.ts +19 -0
  60. package/dist/cjs/services/authProvider/decryption.js +73 -0
  61. package/dist/cjs/services/authProvider/index.d.ts +63 -0
  62. package/dist/cjs/services/authProvider/index.js +34 -0
  63. package/dist/cjs/services/authProvider/subrequest.d.ts +13 -0
  64. package/dist/cjs/services/authProvider/subrequest.js +49 -0
  65. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +28 -0
  66. package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +91 -0
  67. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +26 -0
  68. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +47 -0
  69. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +13 -0
  70. package/dist/cjs/services/authProvider/utils/userRoleValidator.js +37 -0
  71. package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +3 -0
  72. package/dist/cjs/services/authProvider/utils/userSubrequest.js +13 -0
  73. package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +10 -0
  74. package/dist/cjs/services/documentStore/dynamoEncoding.js +52 -0
  75. package/dist/cjs/services/documentStore/fileSystemAssert.d.ts +1 -0
  76. package/dist/cjs/services/documentStore/fileSystemAssert.js +14 -0
  77. package/{packages/utils/src/services/documentStore/index.ts → dist/cjs/services/documentStore/index.d.ts} +8 -8
  78. package/dist/cjs/services/documentStore/index.js +2 -0
  79. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +31 -0
  80. package/dist/cjs/services/documentStore/unversioned/dynamodb.js +233 -0
  81. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +32 -0
  82. package/dist/cjs/services/documentStore/unversioned/file-system.js +214 -0
  83. package/{packages/utils/src/services/documentStore/unversioned/index.ts → dist/cjs/services/documentStore/unversioned/index.d.ts} +0 -2
  84. package/dist/cjs/services/documentStore/unversioned/index.js +2 -0
  85. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +25 -0
  86. package/dist/cjs/services/documentStore/versioned/dynamodb.js +143 -0
  87. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +25 -0
  88. package/dist/cjs/services/documentStore/versioned/file-system.js +73 -0
  89. package/dist/cjs/services/documentStore/versioned/index.d.ts +17 -0
  90. package/dist/cjs/services/documentStore/versioned/index.js +2 -0
  91. package/dist/cjs/services/exercisesGateway/index.d.ts +67 -0
  92. package/dist/cjs/services/exercisesGateway/index.js +107 -0
  93. package/dist/cjs/services/fileServer/index.d.ts +30 -0
  94. package/dist/cjs/services/fileServer/index.js +19 -0
  95. package/dist/cjs/services/fileServer/localFileServer.d.ts +13 -0
  96. package/dist/cjs/services/fileServer/localFileServer.js +132 -0
  97. package/dist/cjs/services/fileServer/s3FileServer.d.ts +14 -0
  98. package/dist/cjs/services/fileServer/s3FileServer.js +131 -0
  99. package/dist/cjs/services/launchParams/index.js +7 -0
  100. package/dist/cjs/services/launchParams/signer.d.ts +23 -0
  101. package/dist/cjs/services/launchParams/signer.js +58 -0
  102. package/dist/cjs/services/launchParams/verifier.d.ts +21 -0
  103. package/dist/cjs/services/launchParams/verifier.js +129 -0
  104. package/dist/cjs/services/logger/console.d.ts +4 -0
  105. package/dist/cjs/services/logger/console.js +12 -0
  106. package/{packages/utils/src/services/logger/index.ts → dist/cjs/services/logger/index.d.ts} +9 -23
  107. package/dist/cjs/services/logger/index.js +31 -0
  108. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +5 -0
  109. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.js +21 -0
  110. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +72 -0
  111. package/dist/cjs/services/lrsGateway/attempt-utils.js +283 -0
  112. package/dist/cjs/services/lrsGateway/file-system.d.ts +15 -0
  113. package/dist/cjs/services/lrsGateway/file-system.js +150 -0
  114. package/dist/cjs/services/lrsGateway/index.d.ts +122 -0
  115. package/dist/cjs/services/lrsGateway/index.js +148 -0
  116. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +71 -0
  117. package/dist/cjs/services/lrsGateway/xapiUtils.js +145 -0
  118. package/dist/cjs/services/postgresConnection/index.d.ts +28 -0
  119. package/dist/cjs/services/postgresConnection/index.js +65 -0
  120. package/dist/cjs/services/searchProvider/index.d.ts +67 -0
  121. package/dist/cjs/services/searchProvider/index.js +2 -0
  122. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +20 -0
  123. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +191 -0
  124. package/dist/cjs/services/searchProvider/openSearch.d.ts +28 -0
  125. package/dist/cjs/services/searchProvider/openSearch.js +154 -0
  126. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -0
  127. package/{packages/utils/src/types.ts → dist/cjs/types.d.ts} +6 -34
  128. package/dist/cjs/types.js +2 -0
  129. package/dist/esm/assertions/index.d.ts +89 -0
  130. package/{packages/utils/src/assertions/index.ts → dist/esm/assertions/index.js} +49 -64
  131. package/dist/esm/aws/ssmService.d.ts +5 -0
  132. package/dist/esm/aws/ssmService.js +6 -0
  133. package/dist/esm/config/awsParameterConfig.d.ts +10 -0
  134. package/dist/esm/config/awsParameterConfig.js +22 -0
  135. package/dist/esm/config/envConfig.d.ts +24 -0
  136. package/dist/esm/config/envConfig.js +53 -0
  137. package/dist/esm/config/index.d.ts +48 -0
  138. package/dist/esm/config/index.js +17 -0
  139. package/dist/esm/config/lambdaParameterConfig.d.ts +12 -0
  140. package/dist/esm/config/lambdaParameterConfig.js +38 -0
  141. package/dist/esm/config/replaceConfig.d.ts +14 -0
  142. package/{packages/utils/src/config/replaceConfig.ts → dist/esm/config/replaceConfig.js} +6 -16
  143. package/dist/esm/config/resolveConfigValue.d.ts +5 -0
  144. package/dist/esm/config/resolveConfigValue.js +8 -0
  145. package/dist/esm/errors/index.d.ts +88 -0
  146. package/{packages/utils/src/errors/index.ts → dist/esm/errors/index.js} +41 -57
  147. package/dist/esm/fetch/fetchStatusRetry.d.ts +8 -0
  148. package/dist/esm/fetch/fetchStatusRetry.js +23 -0
  149. package/dist/esm/fetch/index.d.ts +64 -0
  150. package/dist/esm/fetch/index.js +46 -0
  151. package/dist/esm/guards/index.d.ts +38 -0
  152. package/dist/esm/guards/index.js +36 -0
  153. package/dist/esm/index.d.ts +4 -0
  154. package/dist/esm/index.js +4 -0
  155. package/dist/esm/middleware/apiErrorHandler.d.ts +24 -0
  156. package/dist/esm/middleware/apiErrorHandler.js +38 -0
  157. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +23 -0
  158. package/dist/esm/middleware/apiSlowResponseMiddleware.js +50 -0
  159. package/dist/esm/middleware/index.d.ts +47 -0
  160. package/dist/esm/middleware/index.js +44 -0
  161. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +20 -0
  162. package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +40 -0
  163. package/dist/esm/middleware/throwNotFoundMiddleware.d.ts +4 -0
  164. package/dist/esm/middleware/throwNotFoundMiddleware.js +10 -0
  165. package/dist/esm/misc/hashValue.d.ts +10 -0
  166. package/dist/esm/misc/hashValue.js +13 -0
  167. package/dist/esm/misc/helpers.d.ts +124 -0
  168. package/dist/esm/misc/helpers.js +199 -0
  169. package/dist/esm/misc/merge.d.ts +21 -0
  170. package/dist/esm/misc/merge.js +40 -0
  171. package/dist/esm/misc/partitionSequence.d.ts +35 -0
  172. package/{packages/utils/src/misc/partitionSequence.ts → dist/esm/misc/partitionSequence.js} +15 -23
  173. package/dist/esm/pagination/index.d.ts +91 -0
  174. package/dist/esm/pagination/index.js +77 -0
  175. package/dist/esm/routing/helpers.d.ts +57 -0
  176. package/{packages/utils/src/routing/helpers.ts → dist/esm/routing/helpers.js} +30 -42
  177. package/dist/esm/routing/index.d.ts +290 -0
  178. package/dist/esm/routing/index.js +246 -0
  179. package/dist/esm/routing/validators/zod.d.ts +4 -0
  180. package/dist/esm/routing/validators/zod.js +10 -0
  181. package/dist/esm/services/accountsGateway/index.d.ts +92 -0
  182. package/dist/esm/services/accountsGateway/index.js +131 -0
  183. package/dist/esm/services/apiGateway/index.d.ts +68 -0
  184. package/dist/esm/services/apiGateway/index.js +77 -0
  185. package/dist/esm/services/authProvider/browser.d.ts +40 -0
  186. package/dist/esm/services/authProvider/browser.js +151 -0
  187. package/dist/esm/services/authProvider/decryption.d.ts +19 -0
  188. package/dist/esm/services/authProvider/decryption.js +69 -0
  189. package/dist/esm/services/authProvider/index.d.ts +63 -0
  190. package/dist/esm/services/authProvider/index.js +26 -0
  191. package/dist/esm/services/authProvider/subrequest.d.ts +13 -0
  192. package/dist/esm/services/authProvider/subrequest.js +45 -0
  193. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +28 -0
  194. package/dist/esm/services/authProvider/utils/decryptAndVerify.js +85 -0
  195. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +26 -0
  196. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.js +40 -0
  197. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +13 -0
  198. package/dist/esm/services/authProvider/utils/userRoleValidator.js +33 -0
  199. package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +3 -0
  200. package/dist/esm/services/authProvider/utils/userSubrequest.js +6 -0
  201. package/dist/esm/services/documentStore/dynamoEncoding.d.ts +10 -0
  202. package/dist/esm/services/documentStore/dynamoEncoding.js +45 -0
  203. package/dist/esm/services/documentStore/fileSystemAssert.d.ts +1 -0
  204. package/dist/esm/services/documentStore/fileSystemAssert.js +10 -0
  205. package/dist/esm/services/documentStore/index.d.ts +14 -0
  206. package/dist/esm/services/documentStore/index.js +1 -0
  207. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +31 -0
  208. package/dist/esm/services/documentStore/unversioned/dynamodb.js +226 -0
  209. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +32 -0
  210. package/dist/esm/services/documentStore/unversioned/file-system.js +174 -0
  211. package/dist/esm/services/documentStore/unversioned/index.d.ts +2 -0
  212. package/dist/esm/services/documentStore/unversioned/index.js +1 -0
  213. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +25 -0
  214. package/dist/esm/services/documentStore/versioned/dynamodb.js +139 -0
  215. package/dist/esm/services/documentStore/versioned/file-system.d.ts +25 -0
  216. package/dist/esm/services/documentStore/versioned/file-system.js +69 -0
  217. package/dist/esm/services/documentStore/versioned/index.d.ts +17 -0
  218. package/dist/esm/services/documentStore/versioned/index.js +1 -0
  219. package/dist/esm/services/exercisesGateway/index.d.ts +67 -0
  220. package/dist/esm/services/exercisesGateway/index.js +70 -0
  221. package/dist/esm/services/fileServer/index.d.ts +30 -0
  222. package/dist/esm/services/fileServer/index.js +13 -0
  223. package/dist/esm/services/fileServer/localFileServer.d.ts +13 -0
  224. package/dist/esm/services/fileServer/localFileServer.js +125 -0
  225. package/dist/esm/services/fileServer/s3FileServer.d.ts +14 -0
  226. package/dist/esm/services/fileServer/s3FileServer.js +124 -0
  227. package/dist/esm/services/launchParams/index.d.ts +2 -0
  228. package/dist/esm/services/launchParams/index.js +2 -0
  229. package/dist/esm/services/launchParams/signer.d.ts +23 -0
  230. package/dist/esm/services/launchParams/signer.js +51 -0
  231. package/dist/esm/services/launchParams/verifier.d.ts +21 -0
  232. package/dist/esm/services/launchParams/verifier.js +92 -0
  233. package/dist/esm/services/logger/console.d.ts +4 -0
  234. package/{packages/utils/src/services/logger/console.ts → dist/esm/services/logger/console.js} +2 -5
  235. package/dist/esm/services/logger/index.d.ts +39 -0
  236. package/dist/esm/services/logger/index.js +27 -0
  237. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +5 -0
  238. package/dist/esm/services/lrsGateway/addStatementDefaultFields.js +14 -0
  239. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +72 -0
  240. package/dist/esm/services/lrsGateway/attempt-utils.js +261 -0
  241. package/dist/esm/services/lrsGateway/file-system.d.ts +15 -0
  242. package/dist/esm/services/lrsGateway/file-system.js +110 -0
  243. package/dist/esm/services/lrsGateway/index.d.ts +122 -0
  244. package/dist/esm/services/lrsGateway/index.js +111 -0
  245. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +71 -0
  246. package/dist/esm/services/lrsGateway/xapiUtils.js +134 -0
  247. package/dist/esm/services/postgresConnection/index.d.ts +28 -0
  248. package/dist/esm/services/postgresConnection/index.js +58 -0
  249. package/dist/esm/services/searchProvider/index.d.ts +67 -0
  250. package/dist/esm/services/searchProvider/index.js +1 -0
  251. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +20 -0
  252. package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +187 -0
  253. package/dist/esm/services/searchProvider/openSearch.d.ts +28 -0
  254. package/dist/esm/services/searchProvider/openSearch.js +150 -0
  255. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -0
  256. package/dist/esm/types.d.ts +31 -0
  257. package/dist/esm/types.js +1 -0
  258. package/package.json +228 -12
  259. package/.cfnlintrc +0 -2
  260. package/.github/CODEOWNERS +0 -1
  261. package/.github/workflows/ci.yml +0 -36
  262. package/.github/workflows/lint.yml +0 -55
  263. package/.nvmrc +0 -1
  264. package/.syncignore +0 -4
  265. package/.syncpackrc +0 -18
  266. package/CONTRIBUTING.md +0 -96
  267. package/LICENSE +0 -661
  268. package/Procfile +0 -1
  269. package/app.json +0 -23
  270. package/cspell.json +0 -32
  271. package/deploy/constants.env +0 -21
  272. package/deploy/deploy.bash +0 -157
  273. package/deploy/deployment-alt-region.cfn.yml +0 -70
  274. package/deploy/deployment.cfn.yml +0 -650
  275. package/deploy/destroy-deployment.bash +0 -23
  276. package/deploy/shared.cfn.yml +0 -94
  277. package/docs/lambda-build.md +0 -35
  278. package/packages/frontend/README.md +0 -46
  279. package/packages/frontend/package.json +0 -101
  280. package/packages/frontend/public/favicon.ico +0 -0
  281. package/packages/frontend/public/index.html +0 -107
  282. package/packages/frontend/public/maintenance.html +0 -59
  283. package/packages/frontend/public/manifest.json +0 -15
  284. package/packages/frontend/public/robots.txt +0 -3
  285. package/packages/frontend/script/make-certificate.bash +0 -49
  286. package/packages/frontend/script/server/cli.js +0 -11
  287. package/packages/frontend/script/server/index.js +0 -47
  288. package/packages/frontend/script/start.bash +0 -22
  289. package/packages/frontend/script/trust-localhost.bash +0 -7
  290. package/packages/frontend/src/auth/authProvider.ts +0 -10
  291. package/packages/frontend/src/auth/useAuth.ts +0 -33
  292. package/packages/frontend/src/components/Pagination.tsx +0 -26
  293. package/packages/frontend/src/configProvider/index.ts +0 -53
  294. package/packages/frontend/src/configProvider/use.ts +0 -41
  295. package/packages/frontend/src/core/context/services.spec.tsx +0 -39
  296. package/packages/frontend/src/core/context/services.tsx +0 -16
  297. package/packages/frontend/src/core/index.spec.ts +0 -7
  298. package/packages/frontend/src/core/index.ts +0 -20
  299. package/packages/frontend/src/core/services.tsx +0 -14
  300. package/packages/frontend/src/core/types.ts +0 -3
  301. package/packages/frontend/src/example/api.ts +0 -28
  302. package/packages/frontend/src/example/components/Layout.tsx +0 -23
  303. package/packages/frontend/src/example/screens/Home.spec.tsx +0 -68
  304. package/packages/frontend/src/example/screens/Home.tsx +0 -78
  305. package/packages/frontend/src/example/screens/ThingList.spec.tsx +0 -60
  306. package/packages/frontend/src/example/screens/ThingList.tsx +0 -75
  307. package/packages/frontend/src/example/screens/ThingView.spec.tsx +0 -71
  308. package/packages/frontend/src/example/screens/ThingView.tsx +0 -47
  309. package/packages/frontend/src/example/screens/index.ts +0 -9
  310. package/packages/frontend/src/index.css +0 -159
  311. package/packages/frontend/src/index.tsx +0 -67
  312. package/packages/frontend/src/react-app-env.d.ts +0 -1
  313. package/packages/frontend/src/routing/components/RouteLink.spec.tsx +0 -55
  314. package/packages/frontend/src/routing/components/RouteLink.tsx +0 -35
  315. package/packages/frontend/src/routing/middleware.ts +0 -6
  316. package/packages/frontend/src/routing/useQuery.ts +0 -14
  317. package/packages/frontend/src/setupProxy.js +0 -19
  318. package/packages/frontend/src/setupTests.ts +0 -9
  319. package/packages/frontend/src/tests/testServices.tsx +0 -23
  320. package/packages/frontend/tsconfig.json +0 -27
  321. package/packages/lambda/.eslintrc.js +0 -64
  322. package/packages/lambda/jest-global-setup.js +0 -3
  323. package/packages/lambda/jest-setup-after-env.js +0 -1
  324. package/packages/lambda/jest.config.js +0 -31
  325. package/packages/lambda/jest.resolver.js +0 -17
  326. package/packages/lambda/package.json +0 -68
  327. package/packages/lambda/script/build.bash +0 -19
  328. package/packages/lambda/script/bundle-functions.bash +0 -10
  329. package/packages/lambda/script/lambdaLocalProxy.js +0 -16
  330. package/packages/lambda/script/lambdaLocalProxy.spec.ts +0 -147
  331. package/packages/lambda/script/utils/getRouteData.ts +0 -7
  332. package/packages/lambda/script/utils/routeDataLoader.js +0 -8
  333. package/packages/lambda/script/utils/routeDataLoader.spec.ts +0 -8
  334. package/packages/lambda/src/functions/serviceApi/core/index.ts +0 -7
  335. package/packages/lambda/src/functions/serviceApi/core/request.spec.ts +0 -38
  336. package/packages/lambda/src/functions/serviceApi/core/request.ts +0 -42
  337. package/packages/lambda/src/functions/serviceApi/core/routes.spec.ts +0 -7
  338. package/packages/lambda/src/functions/serviceApi/core/routes.ts +0 -10
  339. package/packages/lambda/src/functions/serviceApi/core/services.ts +0 -9
  340. package/packages/lambda/src/functions/serviceApi/core/types.ts +0 -13
  341. package/packages/lambda/src/functions/serviceApi/entry/lambda/https-xray.ts +0 -4
  342. package/packages/lambda/src/functions/serviceApi/entry/lambda/index.spec.ts +0 -48
  343. package/packages/lambda/src/functions/serviceApi/entry/lambda/index.ts +0 -58
  344. package/packages/lambda/src/functions/serviceApi/entry/lambda/services.ts +0 -36
  345. package/packages/lambda/src/functions/serviceApi/entry/local.ts +0 -71
  346. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentSearchMiddleware.spec.ts +0 -16
  347. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentSearchMiddleware.ts +0 -41
  348. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentStoreMiddleware.spec.ts +0 -78
  349. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentStoreMiddleware.ts +0 -70
  350. package/packages/lambda/src/functions/serviceApi/versions/v0/example/routes.spec.ts +0 -306
  351. package/packages/lambda/src/functions/serviceApi/versions/v0/example/routes.ts +0 -176
  352. package/packages/lambda/src/functions/serviceApi/versions/v0/index.spec.ts +0 -263
  353. package/packages/lambda/src/functions/serviceApi/versions/v0/index.ts +0 -134
  354. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/authMiddleware.spec.ts +0 -23
  355. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/authMiddleware.ts +0 -32
  356. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/configMiddleware.spec.ts +0 -10
  357. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/configMiddleware.ts +0 -7
  358. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/frontendFileServerMiddleware.spec.ts +0 -13
  359. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/frontendFileServerMiddleware.ts +0 -23
  360. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/paginationMiddleware.spec.ts +0 -9
  361. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/paginationMiddleware.ts +0 -9
  362. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/searchMiddleware.spec.ts +0 -12
  363. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/searchMiddleware.ts +0 -21
  364. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/userRoleValidatorMiddleware.spec.ts +0 -21
  365. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/userRoleValidatorMiddleware.ts +0 -18
  366. package/packages/lambda/tsconfig.json +0 -30
  367. package/packages/lambda/webpack.config.js +0 -97
  368. package/packages/utils/.eslintrc.js +0 -64
  369. package/packages/utils/README.md +0 -118
  370. package/packages/utils/jest-global-setup.js +0 -3
  371. package/packages/utils/jest.config.js +0 -25
  372. package/packages/utils/jest.resolver.js +0 -17
  373. package/packages/utils/package.json +0 -238
  374. package/packages/utils/src/assertions/index.spec.ts +0 -126
  375. package/packages/utils/src/aws/ssmService.ts +0 -7
  376. package/packages/utils/src/config/awsParameterConfig.ts +0 -24
  377. package/packages/utils/src/config/envConfig.ts +0 -58
  378. package/packages/utils/src/config/index.spec.ts +0 -165
  379. package/packages/utils/src/config/lambdaParameterConfig.ts +0 -49
  380. package/packages/utils/src/config/resolveConfigValue.ts +0 -10
  381. package/packages/utils/src/errors/index.spec.ts +0 -35
  382. package/packages/utils/src/fetch/fetchStatusRetry.spec.ts +0 -197
  383. package/packages/utils/src/fetch/fetchStatusRetry.ts +0 -33
  384. package/packages/utils/src/fetch/index.spec.ts +0 -34
  385. package/packages/utils/src/fetch/index.ts +0 -87
  386. package/packages/utils/src/guards/index.spec.ts +0 -58
  387. package/packages/utils/src/index.spec.ts +0 -471
  388. package/packages/utils/src/middleware/apiErrorHandler.spec.ts +0 -65
  389. package/packages/utils/src/middleware/apiErrorHandler.ts +0 -67
  390. package/packages/utils/src/middleware/apiSlowResponseMiddleware.spec.ts +0 -184
  391. package/packages/utils/src/middleware/apiSlowResponseMiddleware.ts +0 -71
  392. package/packages/utils/src/middleware/index.spec.ts +0 -99
  393. package/packages/utils/src/middleware/lambdaCorsResponseMiddleware.spec.ts +0 -103
  394. package/packages/utils/src/middleware/lambdaCorsResponseMiddleware.ts +0 -52
  395. package/packages/utils/src/middleware/throwNotFoundMiddleware.spec.ts +0 -20
  396. package/packages/utils/src/middleware/throwNotFoundMiddleware.ts +0 -11
  397. package/packages/utils/src/misc/hashValue.ts +0 -18
  398. package/packages/utils/src/misc/helpers.ts +0 -259
  399. package/packages/utils/src/misc/merge.ts +0 -48
  400. package/packages/utils/src/pagination/index.spec.ts +0 -150
  401. package/packages/utils/src/pagination/index.ts +0 -117
  402. package/packages/utils/src/routing/index.spec.ts +0 -553
  403. package/packages/utils/src/routing/index.ts +0 -424
  404. package/packages/utils/src/routing/validators/zod.spec.ts +0 -16
  405. package/packages/utils/src/routing/validators/zod.ts +0 -14
  406. package/packages/utils/src/services/accountsGateway/README.md +0 -3
  407. package/packages/utils/src/services/accountsGateway/index.spec.ts +0 -518
  408. package/packages/utils/src/services/accountsGateway/index.ts +0 -251
  409. package/packages/utils/src/services/apiGateway/README.md +0 -93
  410. package/packages/utils/src/services/apiGateway/index.spec.ts +0 -254
  411. package/packages/utils/src/services/apiGateway/index.ts +0 -189
  412. package/packages/utils/src/services/authProvider/README.md +0 -21
  413. package/packages/utils/src/services/authProvider/browser.spec.ts +0 -391
  414. package/packages/utils/src/services/authProvider/browser.ts +0 -209
  415. package/packages/utils/src/services/authProvider/decryption.spec.ts +0 -337
  416. package/packages/utils/src/services/authProvider/decryption.ts +0 -98
  417. package/packages/utils/src/services/authProvider/index.ts +0 -93
  418. package/packages/utils/src/services/authProvider/stub.spec.ts +0 -29
  419. package/packages/utils/src/services/authProvider/subrequest.spec.ts +0 -105
  420. package/packages/utils/src/services/authProvider/subrequest.ts +0 -68
  421. package/packages/utils/src/services/authProvider/utils/decryptAndVerify.spec.ts +0 -128
  422. package/packages/utils/src/services/authProvider/utils/decryptAndVerify.ts +0 -106
  423. package/packages/utils/src/services/authProvider/utils/embeddedAuthProvider.spec.ts +0 -26
  424. package/packages/utils/src/services/authProvider/utils/embeddedAuthProvider.ts +0 -57
  425. package/packages/utils/src/services/authProvider/utils/userRoleValidator.spec.ts +0 -135
  426. package/packages/utils/src/services/authProvider/utils/userRoleValidator.ts +0 -49
  427. package/packages/utils/src/services/authProvider/utils/userSubrequest.spec.ts +0 -26
  428. package/packages/utils/src/services/authProvider/utils/userSubrequest.ts +0 -10
  429. package/packages/utils/src/services/documentStore/dynamoEncoding.ts +0 -57
  430. package/packages/utils/src/services/documentStore/fileSystemAssert.spec.ts +0 -43
  431. package/packages/utils/src/services/documentStore/fileSystemAssert.ts +0 -10
  432. package/packages/utils/src/services/documentStore/unversioned/README.md +0 -13
  433. package/packages/utils/src/services/documentStore/unversioned/dynamodb.spec.ts +0 -859
  434. package/packages/utils/src/services/documentStore/unversioned/dynamodb.ts +0 -243
  435. package/packages/utils/src/services/documentStore/unversioned/file-system.spec.ts +0 -629
  436. package/packages/utils/src/services/documentStore/unversioned/file-system.ts +0 -194
  437. package/packages/utils/src/services/documentStore/versioned/README.md +0 -13
  438. package/packages/utils/src/services/documentStore/versioned/dynamodb.spec.ts +0 -376
  439. package/packages/utils/src/services/documentStore/versioned/dynamodb.ts +0 -167
  440. package/packages/utils/src/services/documentStore/versioned/file-system.spec.ts +0 -262
  441. package/packages/utils/src/services/documentStore/versioned/file-system.ts +0 -90
  442. package/packages/utils/src/services/documentStore/versioned/index.ts +0 -25
  443. package/packages/utils/src/services/exercisesGateway/README.md +0 -5
  444. package/packages/utils/src/services/exercisesGateway/index.spec.ts +0 -326
  445. package/packages/utils/src/services/exercisesGateway/index.ts +0 -163
  446. package/packages/utils/src/services/fileServer/index.spec.ts +0 -88
  447. package/packages/utils/src/services/fileServer/index.ts +0 -43
  448. package/packages/utils/src/services/fileServer/localFileServer.spec.ts +0 -182
  449. package/packages/utils/src/services/fileServer/localFileServer.ts +0 -159
  450. package/packages/utils/src/services/fileServer/s3FileServer.spec.ts +0 -266
  451. package/packages/utils/src/services/fileServer/s3FileServer.ts +0 -155
  452. package/packages/utils/src/services/launchParams/index.spec.ts +0 -366
  453. package/packages/utils/src/services/launchParams/signer.ts +0 -73
  454. package/packages/utils/src/services/launchParams/verifier.ts +0 -120
  455. package/packages/utils/src/services/logger/console.spec.ts +0 -29
  456. package/packages/utils/src/services/logger/index.spec.ts +0 -65
  457. package/packages/utils/src/services/lrsGateway/README.md +0 -5
  458. package/packages/utils/src/services/lrsGateway/addStatementDefaultFields.ts +0 -22
  459. package/packages/utils/src/services/lrsGateway/attempt-utils.spec.ts +0 -847
  460. package/packages/utils/src/services/lrsGateway/attempt-utils.ts +0 -358
  461. package/packages/utils/src/services/lrsGateway/file-system.spec.ts +0 -363
  462. package/packages/utils/src/services/lrsGateway/file-system.ts +0 -165
  463. package/packages/utils/src/services/lrsGateway/index.spec.ts +0 -194
  464. package/packages/utils/src/services/lrsGateway/index.ts +0 -257
  465. package/packages/utils/src/services/lrsGateway/xapiUtils.spec.ts +0 -887
  466. package/packages/utils/src/services/lrsGateway/xapiUtils.ts +0 -262
  467. package/packages/utils/src/services/postgresConnection/index.spec.ts +0 -170
  468. package/packages/utils/src/services/postgresConnection/index.ts +0 -84
  469. package/packages/utils/src/services/searchProvider/README.md +0 -3
  470. package/packages/utils/src/services/searchProvider/index.ts +0 -59
  471. package/packages/utils/src/services/searchProvider/memorySearchTheBadWay.spec.ts +0 -526
  472. package/packages/utils/src/services/searchProvider/memorySearchTheBadWay.ts +0 -223
  473. package/packages/utils/src/services/searchProvider/openSearch.spec.ts +0 -926
  474. package/packages/utils/src/services/searchProvider/openSearch.ts +0 -195
  475. package/packages/utils/tsconfig.json +0 -31
  476. package/packages/utils/tsconfig.without-specs.cjs.json +0 -7
  477. package/packages/utils/tsconfig.without-specs.esm.json +0 -7
  478. package/packages/utils/tsconfig.without-specs.json +0 -6
  479. package/scripts/build.bash +0 -24
  480. package/scripts/ci.bash +0 -10
  481. package/scripts/start.bash +0 -29
  482. /package/{packages/utils/src/index.ts → dist/cjs/index.d.ts} +0 -0
  483. /package/{packages/utils/src/services/launchParams/index.ts → dist/cjs/services/launchParams/index.d.ts} +0 -0
  484. /package/{packages/utils/script → script}/bin/copy-from-template.bash +0 -0
  485. /package/{packages/utils/script → script}/bin/delete-stack.bash +0 -0
  486. /package/{packages/utils/script → script}/bin/deploy.bash +0 -0
  487. /package/{packages/utils/script → script}/bin/destroy-deployment.bash +0 -0
  488. /package/{packages/utils/script → script}/bin/empty-bucket.bash +0 -0
  489. /package/{packages/utils/script → script}/bin/get-arg.bash +0 -0
  490. /package/{packages/utils/script → script}/bin/get-deployed-environments.bash +0 -0
  491. /package/{packages/utils/script → script}/bin/get-env-param.bash +0 -0
  492. /package/{packages/utils/script → script}/bin/get-kwarg.bash +0 -0
  493. /package/{packages/utils/script → script}/bin/get-stack-param.bash +0 -0
  494. /package/{packages/utils/script → script}/bin/has-flag.bash +0 -0
  495. /package/{packages/utils/script → script}/bin/init-constants-script.bash +0 -0
  496. /package/{packages/utils/script → script}/bin/init-params-script.bash +0 -0
  497. /package/{packages/utils/script → script}/bin/stack-exists.bash +0 -0
  498. /package/{packages/utils/script → script}/bin/update-utils.bash +0 -0
  499. /package/{packages/utils/script → script}/bin/upload-pager-duty-endpoints.bash +0 -0
  500. /package/{packages/utils/script → script}/bin/upload-params.bash +0 -0
  501. /package/{packages/utils/script → script}/bin/which.bash +0 -0
  502. /package/{packages/utils/script → script}/bin-entry.bash +0 -0
  503. /package/{packages/utils/script → script}/build.bash +0 -0
@@ -1,553 +0,0 @@
1
- import { getKeyValue } from '..';
2
- import { InvalidRequestError, UnauthorizedError } from '../errors';
3
- import { makeComposeMiddleware } from '../middleware';
4
- import { apiHtmlResponse, apiJsonResponse, apiTextResponse, getHeader, getRequestBody, makeCreateRoute, makeGetRequestResponder, makeRenderRouteUrl, requestPayloadProvider, unsafePayloadValidator } from '../routing';
5
- import { createConsoleLogger } from '../services/logger/console';
6
- import { routesList } from '.';
7
-
8
- interface RouteRequest {
9
- path: string;
10
- }
11
- interface RouteResponse {
12
- body: string;
13
- }
14
- // ts weak type makes this fail if it has no properties
15
- type AppServices = {
16
- asdf: string;
17
- };
18
-
19
- const composeMiddleware = makeComposeMiddleware<AppServices, {}>();
20
- const createRoute = makeCreateRoute<AppServices, RouteRequest, {}>();
21
-
22
- describe('getRequestBody', () => {
23
- it('gets it', () => {
24
- const request = {
25
- headers: {
26
- 'content-type': 'application/json'
27
- },
28
- body: '{"foo":"bar"}'
29
- };
30
- expect(getRequestBody(request)).toEqual({foo: 'bar'});
31
- });
32
-
33
- it('defaults to empty object', () => {
34
- const request = {
35
- headers: {
36
- 'content-type': 'application/json'
37
- },
38
- body: ''
39
- };
40
- expect(getRequestBody(request)).toEqual({});
41
- });
42
-
43
- it('throws if json content type is not set', () => {
44
- const request = {
45
- headers: {
46
- 'content-type': 'application/text'
47
- },
48
- body: '{"foo":"bar"}'
49
- };
50
- expect(() => getRequestBody(request)).toThrow();
51
- });
52
-
53
- it('throws if content type is not set', () => {
54
- const request = {
55
- headers: {
56
- },
57
- body: '{"foo":"bar"}'
58
- };
59
- expect(() => getRequestBody(request)).toThrow();
60
- });
61
-
62
- it('throws if body is not valid json', () => {
63
- const request = {
64
- headers: {
65
- 'content-type': 'application/json'
66
- },
67
- body: 'foobar'
68
- };
69
- expect(() => getRequestBody(request)).toThrow();
70
- });
71
- });
72
-
73
- describe('getRequestResponder', () => {
74
- const services = {asdf: 'asdf'};
75
-
76
- afterEach(() => {
77
- jest.clearAllMocks();
78
- });
79
-
80
- it('executes static route', () => {
81
- const request = {
82
- path: '/foo'
83
- };
84
-
85
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({
86
- body: 'response to test route 1'
87
- })});
88
-
89
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
90
- routes: () => ([testRoute]),
91
- pathExtractor: getKeyValue('path')
92
- });
93
- const result = getRequestResponder(services)(request);
94
-
95
- expect(result?.body).toBe('response to test route 1');
96
- });
97
-
98
- it('uses route matcher', () => {
99
- const request = {
100
- path: '/foo'
101
- };
102
- const createRouteWithExtra = makeCreateRoute<AppServices, RouteRequest, {theOne: boolean}>();
103
-
104
- const testRoute1 = createRouteWithExtra({name: 'test', theOne: false, path: '/foo', handler: () => ({
105
- body: 'response to test route 1'
106
- })});
107
- const testRoute2 = createRouteWithExtra({name: 'test', theOne: true, path: '/foo', handler: () => ({
108
- body: 'response to test route 2'
109
- })});
110
-
111
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute1 | typeof testRoute2, RouteRequest, RouteResponse>()({
112
- routes: () => ([testRoute1, testRoute2]),
113
- routeMatcher: (_request, route) => route.theOne,
114
- pathExtractor: getKeyValue('path')
115
- });
116
- const result = getRequestResponder(services)(request);
117
-
118
- expect(result?.body).toBe('response to test route 2');
119
- });
120
-
121
- it('executes parameterized route', () => {
122
- const request = {
123
- path: '/foo/some-path'
124
- };
125
-
126
- const testRoute = createRoute({name: 'test', path: '/foo/:part', handler: (params: {part: string}) => ({
127
- body: 'response to test route 2: ' + params.part
128
- })});
129
-
130
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
131
- routes: () => ([testRoute]),
132
- pathExtractor: getKeyValue('path')
133
- });
134
-
135
- const result = getRequestResponder(services)(request);
136
-
137
- expect(result?.body).toBe('response to test route 2: some-path');
138
- });
139
-
140
- it('returns undefined for unknown route', () => {
141
- const request = {
142
- path: '/foobar'
143
- };
144
-
145
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({
146
- body: 'response to test route 1'
147
- })});
148
-
149
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
150
- routes: () => ([testRoute]),
151
- pathExtractor: getKeyValue('path')
152
- });
153
-
154
- const result = getRequestResponder(services)(request);
155
-
156
- expect(result).toBeUndefined();
157
- });
158
-
159
- it('rethrows errors without an error handler', () => {
160
- const request = {
161
- path: '/foo'
162
- };
163
-
164
- const testRoute = createRoute({name: 'test', path: '/foo', handler: (): RouteResponse => {
165
- throw new UnauthorizedError();
166
- }});
167
-
168
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
169
- routes: () => ([testRoute]),
170
- pathExtractor: getKeyValue('path')
171
- });
172
-
173
- expect(() => getRequestResponder(services)(request)).toThrow(UnauthorizedError);
174
- });
175
-
176
- it('rethrows errors with an error handler', () => {
177
- const request = {
178
- path: '/foo'
179
- };
180
-
181
- const testRoute = createRoute({name: 'test', path: '/foo', handler: (): RouteResponse => {
182
- throw new UnauthorizedError();
183
- }});
184
-
185
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
186
- routes: () => ([testRoute]),
187
- pathExtractor: getKeyValue('path'),
188
- errorHandler: (e: Error) => {
189
- throw e;
190
- }
191
- });
192
-
193
- expect(() => getRequestResponder(services)(request)).toThrow(UnauthorizedError);
194
- });
195
-
196
- it('handles errors with an error handler', () => {
197
- const request = {
198
- path: '/foo'
199
- };
200
-
201
- const testRoute = createRoute({name: 'test', path: '/foo', handler: (): RouteResponse => {
202
- throw new UnauthorizedError();
203
- }});
204
-
205
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
206
- routes: () => ([testRoute]),
207
- pathExtractor: getKeyValue('path'),
208
- errorHandler: (_e: Error) => {
209
- return {body: 'handled'};
210
- }
211
- });
212
-
213
- const result = getRequestResponder(services)(request);
214
-
215
- expect(result?.body).toBe('handled');
216
- });
217
-
218
- it('handles async errors with an error handler', async() => {
219
- const request = {
220
- path: '/foo'
221
- };
222
-
223
- const testRoute = createRoute({name: 'test', path: '/foo', handler: async() => {
224
- throw new UnauthorizedError();
225
- }});
226
-
227
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, Promise<RouteResponse>>()({
228
- routes: () => ([testRoute]),
229
- pathExtractor: getKeyValue('path'),
230
- errorHandler: async(_e: Error) => {
231
- return {body: 'handled'};
232
- }
233
- });
234
-
235
- const result = await getRequestResponder(services)(request);
236
-
237
- expect(result?.body).toBe('handled');
238
- });
239
-
240
- it('handles errors with middleware with an error handler', () => {
241
- const request = {
242
- path: '/foo'
243
- };
244
-
245
- const testRoute = createRoute({name: 'test', path: '/foo', handler: (): RouteResponse => {
246
- throw new UnauthorizedError();
247
- }});
248
-
249
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
250
- routes: () => ([testRoute]),
251
- pathExtractor: getKeyValue('path'),
252
- errorHandler: (_e: Error) => {
253
- return {body: 'handled'};
254
- }
255
- });
256
-
257
- const result = getRequestResponder(services, () => (response) => response ? {body: `hello - ${response.body}`} : response)(request);
258
-
259
- expect(result?.body).toBe('hello - handled');
260
- });
261
-
262
- it('handles async errors with middleware with an error handler', async() => {
263
- const request = {
264
- path: '/foo'
265
- };
266
-
267
- const testRoute = createRoute({name: 'test', path: '/foo', handler: async() => {
268
- throw new UnauthorizedError();
269
- }});
270
-
271
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, Promise<RouteResponse>>()({
272
- routes: () => ([testRoute]),
273
- pathExtractor: getKeyValue('path'),
274
- errorHandler: async(_e: Error) => {
275
- return {body: 'handled'};
276
- }
277
- });
278
-
279
- const result = await getRequestResponder(services, () => async(response) => {
280
- const result = await response;
281
- return result ? {body: `hello - ${result.body}`} : result;
282
- })(request);
283
-
284
- expect(result?.body).toBe('hello - handled');
285
- });
286
-
287
- it('handles errors from middleware with an error handler', () => {
288
- const request = {
289
- path: '/foo'
290
- };
291
-
292
- const testRoute = createRoute({name: 'test', path: '/foo',
293
- requestServiceProvider: composeMiddleware(
294
- () => (): {} => {
295
- throw new Error();
296
- }
297
- )},
298
- (): RouteResponse => {
299
- return {body: 'asdf'};
300
- }
301
- );
302
-
303
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
304
- routes: () => ([testRoute]),
305
- pathExtractor: getKeyValue('path'),
306
- errorHandler: (_e: Error) => {
307
- return {body: 'handled'};
308
- }
309
- });
310
-
311
- const result = getRequestResponder(services)(request);
312
-
313
- expect(result?.body).toBe('handled');
314
- });
315
-
316
- it('handles async errors from middleware with an error handler', async() => {
317
- const request = {
318
- path: '/foo'
319
- };
320
-
321
- const testRoute = createRoute({name: 'test', path: '/foo',
322
- requestServiceProvider: composeMiddleware(
323
- () => (): {} => {
324
- throw new Error();
325
- }
326
- )},
327
- async() => {
328
- return {body: 'asdf'};
329
- }
330
- );
331
-
332
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, Promise<RouteResponse>>()({
333
- routes: () => ([testRoute]),
334
- pathExtractor: getKeyValue('path'),
335
- errorHandler: async(_e: Error) => {
336
- return {body: 'handled'};
337
- }
338
- });
339
-
340
- const result = await getRequestResponder(services)(request);
341
-
342
- expect(result?.body).toBe('handled');
343
- });
344
-
345
- it('rethrows errors from middleware without an error handler', () => {
346
- const request = {
347
- path: '/foo'
348
- };
349
-
350
- const requestServiceProvider = composeMiddleware(
351
- () => (): {} => {
352
- throw new UnauthorizedError();
353
- }
354
- );
355
-
356
- const testRoute = createRoute({name: 'test', path: '/foo', requestServiceProvider, handler: (): RouteResponse => {
357
- return {body: 'asdf'};
358
- }});
359
-
360
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
361
- routes: () => ([testRoute]),
362
- pathExtractor: getKeyValue('path'),
363
- });
364
-
365
- expect(() => getRequestResponder(services)(request)).toThrow(UnauthorizedError);
366
- });
367
-
368
- it('rethrows errors from middleware with an error handler', () => {
369
- const request = {
370
- path: '/foo'
371
- };
372
-
373
- const testRoute = createRoute({name: 'test', path: '/foo', handler: (): RouteResponse => {
374
- throw new UnauthorizedError();
375
- }});
376
-
377
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
378
- routes: () => ([testRoute]),
379
- pathExtractor: getKeyValue('path'),
380
- errorHandler: (e: Error) => {
381
- throw e;
382
- }
383
- });
384
-
385
- expect(() => getRequestResponder(services)(request)).toThrow(UnauthorizedError);
386
- });
387
-
388
- it('uses middleware on route response', () => {
389
- const request = {
390
- path: '/foo'
391
- };
392
-
393
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({
394
- body: 'response to test route 1'
395
- })});
396
-
397
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
398
- routes: () => ([testRoute]),
399
- pathExtractor: getKeyValue('path'),
400
- });
401
-
402
- const result = getRequestResponder(services, () => (response) => response ? {body: `hello - ${response.body}`} : response)(request);
403
-
404
- expect(result?.body).toBe('hello - response to test route 1');
405
- });
406
-
407
- it('uses middleware on unknown response', () => {
408
- const request = {
409
- path: '/foobar'
410
- };
411
-
412
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({
413
- body: 'response to test route 1'
414
- })});
415
-
416
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
417
- routes: () => ([testRoute]),
418
- pathExtractor: getKeyValue('path'),
419
- });
420
-
421
- const result = getRequestResponder(services, () => (response) => response ? response : 'default')(request);
422
-
423
- expect(result).toBe('default');
424
- });
425
-
426
- it('attaches request context to logger', () => {
427
- const request = {
428
- path: '/foo'
429
- };
430
-
431
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({
432
- body: 'response to test route 1'
433
- })});
434
-
435
- const logger = createConsoleLogger();
436
- const subContext = logger.createSubContext();
437
- const setContextSpy = jest.spyOn(logger, 'setContext');
438
- jest.spyOn(logger, 'createSubContext').mockReturnValue(subContext);
439
- const setSubContextSpy = jest.spyOn(subContext, 'setContext');
440
-
441
- const getRequestResponder = makeGetRequestResponder<AppServices, typeof testRoute, RouteRequest, RouteResponse>()({
442
- routes: () => ([testRoute]),
443
- logExtractor: request => ({path: request.path}),
444
- pathExtractor: getKeyValue('path')
445
- });
446
- getRequestResponder({...services, logger})(request);
447
-
448
- expect(setContextSpy).not.toHaveBeenCalled();
449
- expect(setSubContextSpy).toHaveBeenCalledWith({path: '/foo'});
450
- });
451
- });
452
-
453
- describe('getHeader', () => {
454
- it('ignores multi-value headers', () => {
455
- expect(getHeader({headerKey: ['value1', 'value2']}, 'headerKey')).toBe('value1');
456
- });
457
- });
458
-
459
- describe('renderRouteUrl', () => {
460
- it('renders routes', () => {
461
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({body: 'asdf'})});
462
- const renderRouteUrl = makeRenderRouteUrl<typeof testRoute>();
463
-
464
- expect(renderRouteUrl(testRoute, undefined)).toBe('/foo');
465
- });
466
-
467
- it('renders routes with params', () => {
468
- const testRoute = createRoute({name: 'test', path: '/foo/:part', handler: (_param: {part: string}) => ({body: 'asdf'})});
469
- const renderRouteUrl = makeRenderRouteUrl<typeof testRoute>();
470
-
471
- expect(renderRouteUrl(testRoute, {part: 'foo'})).toBe('/foo/foo');
472
- });
473
-
474
- it('renders routes with query', () => {
475
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({body: 'asdf'})});
476
- const renderRouteUrl = makeRenderRouteUrl<typeof testRoute>();
477
-
478
- expect(renderRouteUrl(testRoute, undefined, {param: 'someParam'})).toBe('/foo?param=someParam');
479
- });
480
- });
481
-
482
- describe('apiJsonResponse', () => {
483
- it('makes a response', () => {
484
- expect(apiJsonResponse(200, {key: 'value'})).toEqual({
485
- statusCode: 200,
486
- data: {key: 'value'},
487
- body: '{"key":"value"}',
488
- headers: {'content-type': 'application/json'}
489
- });
490
- });
491
- });
492
-
493
- describe('apiTextResponse', () => {
494
- it('makes a response', () => {
495
- expect(apiTextResponse(200, 'some text')).toEqual({
496
- statusCode: 200,
497
- data: 'some text',
498
- body: 'some text',
499
- headers: {'content-type': 'text/plain'}
500
- });
501
- });
502
- });
503
-
504
- describe('apiHtmlResponse', () => {
505
- it('makes a response', () => {
506
- expect(apiHtmlResponse(200, 'some text')).toEqual({
507
- statusCode: 200,
508
- data: 'some text',
509
- body: 'some text',
510
- headers: {'content-type': 'text/html'}
511
- });
512
- });
513
- });
514
-
515
- describe('requestPayloadProvider', () => {
516
- it('provides a payload', () => {
517
- const provider = requestPayloadProvider(unsafePayloadValidator<{key: string}>());
518
- const {payload} = provider()({
519
- request: {headers: {'content-type': 'application/json'}, body: '{"key":"string"}'}
520
- });
521
-
522
- expect(payload).toEqual({key: 'string'});
523
- });
524
-
525
- it('doesn\'t fuss with type', () => {
526
- const request = {otherRequestValue: 'someValue', headers: {'content-type': 'application/json'}, body: '{"key":"string"}'};
527
- const composeMiddleware = makeComposeMiddleware<{}, {request: typeof request}>();
528
- const provider = requestPayloadProvider(unsafePayloadValidator<{key: string}>());
529
- const result = composeMiddleware(provider)({})({request});
530
-
531
- expect(result.request.otherRequestValue).toBe('someValue');
532
- });
533
-
534
- it('throws when validator fails', () => {
535
- const validatorThatFails = (_input: any): _input is {key: string} => false;
536
-
537
- const provider = requestPayloadProvider(validatorThatFails);
538
-
539
- expect(() =>
540
- provider()({
541
- request: {headers: {'content-type': 'application/json'}, body: '{"key":"string"}'}
542
- })
543
- ).toThrow(InvalidRequestError);
544
- });
545
- });
546
-
547
- describe('routesList', () => {
548
- it ('returns route list', () => {
549
- const testRoute = createRoute({name: 'test', path: '/foo', handler: () => ({body: 'asdf'})});
550
- const list = routesList([testRoute]);
551
- expect(list[0]).toBe(testRoute);
552
- });
553
- });