@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,424 +0,0 @@
1
- import * as pathToRegexp from 'path-to-regexp';
2
- import queryString from 'query-string';
3
- import { mapFind, memoize } from '../misc/helpers';
4
- import { Logger } from '../services/logger';
5
- import { createConsoleLogger } from '../services/logger/console';
6
-
7
- /* begin route structures */
8
-
9
- /* Generic type meanings:
10
- * R: route. usually a placeholder for a specific route.
11
- * Ru: route union. union of all actual routes defined by the application.
12
- * Ri: route input. the router input, could be `Window.Location`, or `APIGatewayProxyEventV2` or something like that
13
- * Ro: route output. the interface for what routes return. could be a react component, or the `ApiResponse` defined below
14
- * RoF: route output final. the route output after response middleware runs. for instance in an api Ro will usually include `undefined` but 404 handling middleware will remove make RoF always `ApiResponse`
15
- * P: route params. the uri parameters of the route
16
- * Sa: app services. the app services (or service drivers) defined by the app entrypoint.
17
- * Sr: request services. the request services built by this routes middleware chain.
18
- * Ex: extension type. for arbitrary extra stuff only used in certain context, like METHOD in api routes.
19
- * N: route name. union discriminator, and used as the api client method name when using the ApiGateway service.
20
- */
21
-
22
- /** HTTP query parameters */
23
- export type QueryParams = Record<string, string | undefined | string[] | null>;
24
-
25
- /**
26
- * The type for a map of string substitutions to use when building route paths, e.g. a route may
27
- * be defined as `'/api/:id'` and then rendered as `'/api/123'` when the `id` route param is set
28
- * to `'123'`
29
- */
30
- export type RouteParams = {[key: string]: string};
31
-
32
- /** A type that is compatible with any `Route` type */
33
- export type AnyRoute<R> = R extends Route<infer N, infer P, infer Sa, infer Sr, infer Ri, infer Ro> ? Route<N, P, Sa, Sr, Ri, Ro> : never;
34
- export type AnySpecificRoute<R, Sa, Ri, Ro> = R extends Route<infer N, infer P, Sa, infer Sr, Ri, Ro> & infer E ? Route<N, P, Sa, Sr, Ri, Ro> & E : never;
35
-
36
- /** The inferred "route output" (`Ro`) type for a given route */
37
- export type OutputForRoute<R> = R extends Route<any, any, any, any, any, infer Ro> ? Ro : never;
38
-
39
- /** The inferred type for the params of the provided route type, `R`; may be undefined */
40
- export type ParamsForRoute<R> = R extends Route<any, infer P, any, any, any, any> ? P : never;
41
-
42
- /** The inferred type for the request services of the provided route type, `R`. */
43
- export type RequestServicesForRoute<R> = R extends Route<any, any, any, infer Sr, any, any> ? Sr : never;
44
-
45
- /** The type for the params of the provided route type, `R`; will be `{}` if undefined */
46
- export type ParamsForRouteOrEmpty<R> = ParamsForRoute<R> extends undefined ? {} : Exclude<ParamsForRoute<R>, undefined>;
47
-
48
- /** derives the route match type for this route, which includes the route itself and the matching params. */
49
- export type RouteMatchRecord<R> = R extends AnyRoute<R> ? {route: R; params: ParamsForRoute<R>} : never;
50
-
51
-
52
- type Flatten<T> = T extends any ? { [K in keyof T]: T[K] } : never;
53
- export type ExternalRoute<R> = R extends Route<infer N, infer P, infer Sa, infer Sr, infer Ri, infer Ro> & infer E
54
- ? Route<N, P, Sa, Sr extends {payload: any} ? Flatten<Pick<Sr, 'payload'>> : Record<string, never>, Ri, Ro>
55
- & Flatten<Omit<E, 'name' | 'path' | 'handler' | 'requestServiceProvider'>>
56
- : never;
57
-
58
- /** this utility simplifies the route type to remove stuff that is only
59
- * relevant internal to the route, like the service types, keeping only
60
- * the payload type which is necessary for the apiGateway
61
- *
62
- * this helps avoid the "type too complicated" error that typescript throws
63
- * when there are a lot of routes with complex services
64
- **/
65
- export const routesList = <R>(routes: R[]) => routes as ExternalRoute<R>[];
66
-
67
- /**
68
- * The conditional type for the payload for a given route, `R`. This isn't a route structure, its
69
- * a convention based on the request middleware
70
- */
71
- export type PayloadForRoute<R> = RequestServicesForRoute<R> extends {payload: any}
72
- ? RequestServicesForRoute<R>['payload']
73
- : undefined;
74
-
75
- /* begin route creation helpers */
76
-
77
- // specifies `any` for output because i'm pretty sure it doesn't matter and it confuses the MakeRequestResponder type
78
- type RequestServiceProvider<Sa, Sr, Ri> = (app: Sa) => <R>(middleware: {request: Ri; logger: Logger}, match: RouteMatchRecord<R>) => Sr;
79
- type RouteHandler<P, Sr, Ro> = (params: P, request: Sr) => Ro;
80
- type Route<N extends string, P extends RouteParams | undefined, Sa, Sr, Ri, Ro> =
81
- (Sr extends undefined
82
- ? {requestServiceProvider?: RequestServiceProvider<Sa, Sr, Ri> | undefined }
83
- : {requestServiceProvider: RequestServiceProvider<Sa, Sr, Ri> }
84
- )
85
- &
86
- {name: N; path: string; handler: (params: P, request: Sr) => Ro}
87
- ;
88
-
89
- type CreateRouteConfig<Sa, Sr, Ri, N extends string, Ex> =
90
- (Sr extends undefined
91
- ? {requestServiceProvider?: RequestServiceProvider<Sa, Sr, Ri> | undefined }
92
- : {requestServiceProvider: RequestServiceProvider<Sa, Sr, Ri> }
93
- )
94
- &
95
- {name: N; path: string}
96
- & Ex
97
- ;
98
-
99
- /**
100
- * Interface for a function that creates a route. There are two overloaded signatures, because
101
- * sometimes typescript can't figure out the value of `Sr` between the handler and the service
102
- * provider. Forcing it through the provider types first by putting the handler in a subsequent
103
- * argument seems to help.
104
- */
105
- export interface CreateRoute<Sa, Ri, Ex> {
106
- <N extends string, Ro, Sr extends unknown | undefined = undefined, P extends RouteParams | undefined = undefined>(config: CreateRouteConfig<Sa, Sr, Ri, N, Ex> & {handler: RouteHandler<P, Sr, Ro>}): Route<N, P, Sa, Sr, Ri, Ro> & Ex;
107
- <N extends string, Ro, Sr extends unknown | undefined, P extends RouteParams | undefined = undefined>(config: CreateRouteConfig<Sa, Sr, Ri, N, Ex>, handler: RouteHandler<P, Sr, Ro>): Route<N, P, Sa, Sr, Ri, Ro> & Ex;
108
- }
109
-
110
- /**
111
- * Makes a createRoute function that can be used to create routes (this is a factory factory). The
112
- * `makeCreateRoute` function is typically called once in the backend and once in the frontend to
113
- * set the types for the resulting `createRoute` function -- that latter function is called once
114
- * per route. E.g. for the backend, the call could look like:
115
- *
116
- * ```
117
- * export const createRoute = makeCreateRoute<AppServices, ApiRouteRequest, {
118
- * method: METHOD;
119
- * }>();
120
- * ```
121
- *
122
- * Notes:
123
- * * The `{method: METHOD}` defines the `Ex` extension type; here, the `method` property is only
124
- * relevant to backend routes.
125
- * * when defining the `createRoute` method, only the request input format is defined, the output
126
- * format is derived from the routes.
127
- *
128
- * When calling the resulting `createRoute` function, the only required params of the route are the
129
- * name, path, and handler. Other params can be added to the type and then later used in the
130
- * routeMatcher.
131
- *
132
- * eg when defining requestServiceProvider in line, the types have a hard time, it helps to put in another argument:
133
- * ```
134
- * export const exampleRoute = createRoute({
135
- * name: 'exampleRoute', method: METHOD.GET, path: '/api/example/:key',
136
- * requestServiceProvider: composeServiceMiddleware({
137
- * cookieAuthMiddleware,
138
- * documentStoreMiddleware,
139
- * }},
140
- * async(params: {key: string}, services) => {
141
- * const result = await services.myDocumentStore.getItem(params.key);
142
- *
143
- * if (!result) {
144
- * throw new NotFoundError('requested item not found');
145
- * }
146
- *
147
- * return apiJsonResponse(200, result);
148
- * }
149
- * );
150
- * ```
151
- * eg when using a pre-existing provider variable the types work better:
152
- * ```
153
- * export const exampleRoute = createRoute({
154
- * name: 'exampleRoute', method: METHOD.GET, path: '/api/example/:key',
155
- * requestServiceProvider,
156
- * handler: async(params: {key: string}, services) => {
157
- * const result = await services.myDocumentStore.getItem(params.key);
158
- *
159
- * if (!result) {
160
- * throw new NotFoundError('requested item not found');
161
- * }
162
- *
163
- * return apiJsonResponse(200, result);
164
- * }
165
- * });
166
- * ```
167
- */
168
- export const makeCreateRoute = <Sa, Ri, Ex = {}>(): CreateRoute<Sa, Ri, Ex> => <N extends string, Ro, Sr, P extends RouteParams | undefined = undefined>(...args: [CreateRouteConfig<Sa, Sr, Ri, N, Ex> & {handler: RouteHandler<P, Sr, Ro>}] | [CreateRouteConfig<Sa, Sr, Ri, N, Ex>, RouteHandler<P, Sr, Ro>]): Route<N, P, Sa, Sr, Ri, Ro> & Ex => {
169
-
170
- return (args.length === 1
171
- ? args[0]
172
- : {...args[0], handler: args[1]}
173
- ) as Route<N, P, Sa, Sr, Ri, Ro> & Ex;
174
- };
175
-
176
- /* begin reverse routing utils */
177
-
178
- /**
179
- * Makes a renderRouteUrl function that can be used to render route paths (this is a factory
180
- * factory). The returned function takes a `route`, `params`, and `query` and returns a string
181
- * with the params and query substituted into the route path.
182
- *
183
- * this function is initialized using the Ru type which indicates the specific routes wired into
184
- * the application, which means that if you try to build a url with a route which is not wired
185
- * into the router you will get a type error. this is a feature to prevent referencing routes that
186
- * don't exist or aren't handling requests properly.
187
- *
188
- * if you are making a helper function or need to render a route outside your application, you
189
- * can use the `renderAnyRouteUrl` function
190
- */
191
- export const makeRenderRouteUrl = <Ru extends {path: string}>() => <R>(
192
- route: ExternalRoute<R> extends Ru ? R & {path: string} : R extends Ru ? R : never,
193
- params: ParamsForRoute<R>,
194
- query: QueryParams = {}
195
- ) => {
196
- const getPathForParams = pathToRegexp.compile(route.path, { encode: encodeURIComponent });
197
- const search = queryString.stringify(query);
198
- const path = getPathForParams(params) + (search ? `?${search}` : '');
199
-
200
- return path;
201
- };
202
-
203
- /**
204
- * A pre-made result from `makeRenderRouteUrl`, this function interpolates parameter and query
205
- * arguments into a route path.
206
- *
207
- * prefer using `renderRouteUrl` initialized with your applications route union
208
- * when possible to help catch improperly initialized routes.
209
- *
210
- * @param route the route that has a `path` to be interpolated
211
- * @param params the parameters to interpolate into the route path
212
- * @param query the query parameters to add to the route path
213
- * @returns the interpolated route path
214
- */
215
- export const renderAnyRouteUrl = makeRenderRouteUrl<any>();
216
-
217
- /* begin request responder */
218
-
219
- type RequestPathExtractor<Ri> = (request: Ri) => string;
220
- type RequestLogExtractor<Ri> = (request: Ri) => JsonCompatibleStruct;
221
- type RequestRouteMatcher<Ri, R> = (request: Ri, route: R) => boolean;
222
- type AppBinder = <Sa, F extends ((app: Sa, appBinder?: AppBinder) => any)>(app: Sa, middleware: F) => ReturnType<F>;
223
-
224
- const bindRoute = <Sa, R, Ri, Ro>(services: Sa, appBinder: AppBinder, pathExtractor: RequestPathExtractor<Ri>, matcher?: RequestRouteMatcher<Ri, AnySpecificRoute<R, Sa, Ri, Ro>>) => (route: AnySpecificRoute<R, Sa, Ri, Ro>) => {
225
- const getParamsFromPath = pathToRegexp.match<ParamsForRouteOrEmpty<R>>(route.path, { decode: decodeURIComponent });
226
- const boundServiceProvider = route.requestServiceProvider && appBinder(services, route.requestServiceProvider);
227
-
228
- return (request: Ri, logger: Logger) => {
229
- const path = pathExtractor(request);
230
- const match = getParamsFromPath(path);
231
-
232
- if ((!matcher || matcher(request, route)) && match) {
233
- return {
234
- name: route.name,
235
- executor: () => route.handler(match.params, boundServiceProvider ? boundServiceProvider<R>({request, logger}, {route, params: match.params} as any) : undefined)
236
- };
237
- }
238
- };
239
- };
240
-
241
- // this is a hack around weak type detection blocking use of the system without specifying a logger
242
- // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html#weak-type-detection
243
- type CompatibleServices<T1> = keyof T1 extends 'logger' ? T1 extends {logger: Logger} ? T1 : never : T1 & {logger?: Logger};
244
-
245
- type RequestResponder<Sa, Ri, Ro> = {
246
- (services: CompatibleServices<Sa>): (request: Ri) => Ro | undefined;
247
- <RoF>(services: CompatibleServices<Sa>, responseMiddleware: (app: Sa) => (response: Ro | undefined, request: {request: Ri; logger: Logger}) => RoF): (request: Ri) => RoF;
248
- };
249
-
250
-
251
- /**
252
- * A factory factory for creating request responders (functions that take a request and return a
253
- * response -- these functions let us implement Lambda `handler` functions).
254
- *
255
- * Use it in two steps. First, call it with the general business logic that defines routes, logs,
256
- * errors, etc:
257
- * ```
258
- * const getRequestResponder = makeGetRequestResponder<
259
- * AppServices, TRoutes, ApiRouteRequest, Promise<ApiRouteResponse>
260
- * >() // this empty invocation helps typescript mix defined and inferred types
261
- * ({
262
- * routes: apiRoutes, // the route definitions
263
- * pathExtractor, // how to get the path out of the request format
264
- * routeMatcher, // logic for matching route (beyond path matching, optional)
265
- * errorHandler, // any special error handling
266
- * });
267
- * ```
268
- * Note here that among other things we're specifying a generic response format that the response
269
- * and error handling middleware can use, if any routes have responses that don't adhere to this
270
- * it'll complain about it.
271
- *
272
- * Next, we use the `getRequestResponder` to create a responder for a specific lambda entrypoint:
273
- * ```
274
- * export const handler: (request: APIGatewayProxyEventV2): Promise<ApiRouteResponse> =>
275
- * getRequestResponder(
276
- * lambdaServices, // the AppServices for this entrypoint
277
- * lambdaMiddleware // environment specific response middleware (like cors)
278
- * );
279
- * ```
280
- */
281
- export const makeGetRequestResponder = <Sa, Ru, Ri, Ro>() => (
282
- {routes, pathExtractor, routeMatcher, errorHandler, logExtractor}: {
283
- routes: () => AnySpecificRoute<Ru, Sa, Ri, Ro>[];
284
- pathExtractor: RequestPathExtractor<Ri>;
285
- logExtractor?: RequestLogExtractor<Ri>;
286
- routeMatcher?: RequestRouteMatcher<Ri, AnySpecificRoute<Ru, Sa, Ri, Ro>>;
287
- errorHandler?: (e: Error, logger: Logger) => Ro;
288
- }
289
- ): RequestResponder<Sa, Ri, Ro> => <RoF>(
290
- services: CompatibleServices<Sa>,
291
- responseMiddleware?: (app: Sa) => (response: Ro | undefined, request: {request: Ri; logger: Logger}) => RoF
292
- ) => {
293
- const appBinderImpl: AppBinder = (app, middleware) => middleware(app, appBinder);
294
- const appBinder = memoize(appBinderImpl);
295
- const boundRoutes = routes().map(bindRoute<Sa, Ru, Ri, Ro>(services, appBinder, pathExtractor, routeMatcher));
296
- const boundResponseMiddleware = responseMiddleware ? responseMiddleware(services) : undefined;
297
- const appLogger = services.logger || createConsoleLogger();
298
-
299
- // *note* this opaque promise guard is less generic than i hoped so
300
- // i'm leaving it here instead of the guards file.
301
- //
302
- // its less than ideal because it enforces that the handlers return
303
- // the same type as the parent promise, usually a handler can be either a
304
- // promise or a non-promise value and the promise figures it out, but those
305
- // types are getting complicated quickly here.
306
- const isPromise = <T>(thing: T): thing is T & {
307
- catch: <R extends T>(handler: (e: any) => R) => T | R;
308
- then: <R extends T>(handler: (p: unknown) => R) => R;
309
- } => thing instanceof Promise;
310
-
311
- return (request: Ri): undefined | Ro | RoF => {
312
- const logger = appLogger.createSubContext();
313
-
314
- if (logExtractor) {
315
- logger.setContext(logExtractor(request));
316
- }
317
-
318
- logger.log('begin request');
319
-
320
- try {
321
- const route = mapFind(boundRoutes, (route) => route(request, logger));
322
-
323
- if (route) {
324
- logger.log(`route matched ${route.name}`);
325
-
326
- const result = boundResponseMiddleware ?
327
- boundResponseMiddleware(route.executor(), {request, logger}) : route.executor();
328
-
329
- if (isPromise(result) && errorHandler) {
330
- const errorHandlerWithMiddleware = (e: Error) => boundResponseMiddleware ?
331
- boundResponseMiddleware(errorHandler(e, logger), {request, logger}) : errorHandler(e, logger);
332
-
333
- return result.catch(errorHandlerWithMiddleware);
334
- } else {
335
- return result;
336
- }
337
- } else if (boundResponseMiddleware) {
338
- logger.log('no route matched, returning 404');
339
- return boundResponseMiddleware(undefined, {request, logger});
340
- }
341
- } catch (e) {
342
- if (errorHandler && e instanceof Error) {
343
- return boundResponseMiddleware
344
- ? boundResponseMiddleware(errorHandler(e, logger), {request, logger})
345
- : errorHandler(e, logger)
346
- ;
347
- }
348
-
349
- throw e;
350
- }
351
-
352
- return undefined;
353
- };
354
- };
355
-
356
- /* begin mixin utils for API side */
357
-
358
- /** HTTP Headers */
359
- export type HttpHeaders = {[key: string]: string | undefined | string[]};
360
-
361
- /** A type that works in JSON */
362
- export type JsonCompatibleValue = string | number | null | undefined | boolean;
363
-
364
- /** A JSON array type */
365
- export type JsonCompatibleArray = Array<JsonCompatibleValue | JsonCompatibleStruct | JsonCompatibleStruct>;
366
-
367
- /** A JSON object type */
368
- export type JsonCompatibleStruct = {[key: string]: JsonCompatibleStruct | JsonCompatibleValue | JsonCompatibleArray};
369
-
370
- /** The type for an API response */
371
- export type ApiResponse<S extends number, T> = {
372
- isBase64Encoded?: boolean;
373
- statusCode: S;
374
- data: T;
375
- body: string;
376
- headers?: {[key: string]: string};
377
- };
378
-
379
- /**
380
- * Returns a JSON response. Handles serializing the data to JSON and setting the content-type header.
381
- * @param statusCode e.g. 201
382
- * @param data the object to be serialized to JSON
383
- * @param headers HTTP headers
384
- * @example
385
- * return apiJsonResponse(
386
- * 200, {
387
- * message: "hello, world!",
388
- * foo: "bar",
389
- * },
390
- * { 'X-Frame-Options': 'DENY' }
391
- * );
392
- */
393
- export const apiJsonResponse = <S extends number, T extends JsonCompatibleStruct>(statusCode: S, data: T, headers?: HttpHeaders): ApiResponse<S, T> => ({statusCode, data, body: JSON.stringify(data), headers: {...headers, 'content-type': 'application/json'}});
394
-
395
- /**
396
- * Returns a plain text response. Handles setting the content-type header.
397
- * @param statusCode e.g. 201
398
- * @param data some string
399
- * @param headers HTTP headers
400
- * @example return apiTextResponse(200, 'some text')
401
- */
402
- export const apiTextResponse = <S extends number>(statusCode: S, data: string, headers?: HttpHeaders): ApiResponse<S, string> => ({statusCode, data, body: data, headers: {...headers, 'content-type': 'text/plain'}});
403
-
404
- /**
405
- * Returns an HTML response. Handles setting the content-type header.
406
- * @param statusCode e.g. 201
407
- * @param data some string
408
- * @param headers HTTP headers
409
- * @example return apiHtmlResponse(200, '<b>some text</b>')
410
- */
411
- export const apiHtmlResponse = <S extends number>(statusCode: S, data: string, headers?: HttpHeaders): ApiResponse<S, string> => ({statusCode, data, body: data, headers: {...headers, 'content-type': 'text/html'}});
412
-
413
- /** HTTP method enum */
414
- export enum METHOD {
415
- GET = 'GET',
416
- HEAD = 'HEAD',
417
- POST = 'POST',
418
- PUT = 'PUT',
419
- PATCH = 'PATCH',
420
- DELETE = 'DELETE',
421
- OPTIONS = 'OPTIONS',
422
- }
423
-
424
- export * from './helpers';
@@ -1,16 +0,0 @@
1
- import * as z from 'zod';
2
- import { ValidationError } from '../../errors';
3
- import { zodPayloadValidator } from './zod';
4
-
5
- describe('zodPayloadValidator', () => {
6
-
7
- it('passes', () => {
8
- const schema = z.object({field: z.string()});
9
- expect(zodPayloadValidator(schema)({field: 'value'})).toBe(true);
10
- });
11
-
12
- it('fails', () => {
13
- const schema = z.object({field: z.string()});
14
- expect(() => zodPayloadValidator(schema)({field: 1})).toThrow(ValidationError);
15
- });
16
- });
@@ -1,14 +0,0 @@
1
- /* spell-checker: ignore treeify */
2
- import { treeifyError } from 'zod';
3
- import type { z } from 'zod';
4
- import { ValidationError } from '../../errors';
5
-
6
- export const zodPayloadValidator = <T extends {}>(validator: z.ZodType<T, T>) => (input: {[key: string]: any}): input is T => {
7
- const result = validator.safeParse(input);
8
-
9
- if (result.success) {
10
- return true;
11
- }
12
-
13
- throw new ValidationError(treeifyError(result.error));
14
- };
@@ -1,3 +0,0 @@
1
- # accountsGateway
2
-
3
- Typing/formatting for interacting with OpenStax Accounts