@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,262 +0,0 @@
1
- import partition from 'lodash/fp/partition';
2
- import { roundToPrecision } from '../..';
3
- import { AccountsGateway, MappedUserInfo } from '../accountsGateway';
4
- import { AuthProvider } from '../authProvider';
5
- import { ActivityState, resolveAttemptInfo } from './attempt-utils';
6
- import { LrsGateway, XapiStatement } from '.';
7
-
8
- export interface Grade {
9
- activityProgress: 'Initialized' | 'Started' | 'inProgress' | 'Submitted' | 'Completed';
10
- comment?: string;
11
- gradingProgress: 'FullyGraded' | 'Pending' | 'PendingManual' | 'Failed' | 'NotReady';
12
- scoreGiven: number;
13
- scoreMaximum: number;
14
- submission?: {
15
- startedAt?: string;
16
- submittedAt?: string;
17
- };
18
- userId?: string;
19
- }
20
-
21
- export const getRegistrationAttemptInfo = async(lrs: LrsGateway, registration: string, options?: {
22
- activity?: string;
23
- anyUser?: boolean;
24
- currentPreference?: 'latest' | 'oldest';
25
- ensureSync?: boolean;
26
- user?: string;
27
- }) => {
28
- const { currentPreference, ...xapiOptions } = options ?? {};
29
- const allStatements = await lrs.getAllXapiStatements({ ...xapiOptions, registration });
30
-
31
- // Partition statements for each user
32
- const statementsPerUser: { [key: string]: XapiStatement[] } = {};
33
- allStatements.forEach((statement) => {
34
- // If we ever support accounts from different statement.actor.account.homePage, this method may need changes
35
- // (unless we can guarantee the statement.actor.account.name are unique)
36
- statementsPerUser[statement.actor.account.name] ||= [];
37
- statementsPerUser[statement.actor.account.name].push(statement);
38
- });
39
-
40
- const result: { [key: string]: ReturnType<typeof resolveAttemptInfo> } = {};
41
- for (const [userUuid, userStatements] of Object.entries(statementsPerUser)) {
42
- result[userUuid] = resolveAttemptInfo(userStatements, { currentPreference });
43
- }
44
-
45
- return result;
46
- };
47
-
48
- // generates a payload that can be sent to the LMS, documentation here:
49
- // lti: http://www.imsglobal.org/spec/lti-ags/v2p0#score-publish-service
50
- // ltijs: https://cvmcosta.me/ltijs/#/grading
51
- // Note: "min" is currently completely ignored
52
- export const getScoreGrade = (
53
- score: { scaled?: number; raw?: number; min?: number; max?: number },
54
- options: { maxScore?: number; startedAt?: string; submittedAt?: string; userId?: string }
55
- ): Grade => {
56
- const { raw, scaled, max } = score;
57
- const { maxScore, startedAt, submittedAt, userId } = options;
58
-
59
- const scoreMaximum = maxScore ?? 100;
60
-
61
- const scoreGiven = raw && max
62
- ? scoreMaximum / max * raw
63
- : scaled
64
- ? scaled * scoreMaximum
65
- : 0
66
- ;
67
-
68
- const submission: { startedAt?: string; submittedAt?: string } = {};
69
- if (startedAt) {
70
- submission.startedAt = startedAt;
71
- }
72
- if (submittedAt) {
73
- submission.submittedAt = submittedAt;
74
- }
75
-
76
- return {
77
- userId,
78
- activityProgress: submittedAt ? 'Completed' : 'Started',
79
- // canvas assumes that anything that isn't 'FullyGraded' requires manual grading and displays a "needs grading" icon.
80
- // if you warp your mind you can consider the portion of the assignment which is completed to be fully graded.
81
- gradingProgress: 'FullyGraded',
82
- scoreMaximum,
83
- scoreGiven: roundToPrecision(scoreGiven, -2),
84
- submission,
85
- };
86
- };
87
-
88
- export type Progress = {
89
- scaled: number;
90
- max?: number;
91
- raw?: number;
92
- };
93
-
94
- export type GradeAndProgress = {
95
- grade: Grade;
96
- progress: Progress;
97
- name?: string;
98
- };
99
-
100
- export type UserActivityInfo = MappedUserInfo<ActivityState>;
101
-
102
- // These methods assign 0's to incomplete activities
103
- const pickAttemptAndCompleted = (
104
- state: ActivityState,
105
- gradePreference: 'current' | 'best'
106
- ): { attempt?: XapiStatement; completed?: XapiStatement } => {
107
-
108
- if (gradePreference === 'best' && state.bestCompletedAttempt) {
109
- return {
110
- attempt: state.bestCompletedAttempt,
111
- completed: state.bestCompletedAttemptCompleted,
112
- };
113
- }
114
-
115
- // return current attempt if gradePreference is current
116
- return {
117
- attempt: state.currentAttempt,
118
- completed: state.currentAttemptCompleted,
119
- };
120
- };
121
-
122
- const getCompletedActivityStateGradeAndProgress = ({ name, scoreMaximum, state, userId, gradePreference = 'current' }: {
123
- name?: string; scoreMaximum?: number; state: ActivityState; userId?: string; gradePreference?: 'current' | 'best';
124
- }): GradeAndProgress => {
125
- const { attempt, completed } = pickAttemptAndCompleted(state, gradePreference);
126
-
127
- return {
128
- grade: getScoreGrade(
129
- completed?.result?.score || {},
130
- {
131
- maxScore: scoreMaximum,
132
- startedAt: attempt?.timestamp,
133
- submittedAt: completed?.timestamp,
134
- userId,
135
- }
136
- ),
137
- progress: {
138
- scaled: completed ? 1 : 0,
139
- },
140
- name,
141
- };
142
- };
143
-
144
- export const getCompletedUserInfosGradeAndProgress = (
145
- infos: UserActivityInfo[],
146
- scoreMaximum?: number,
147
- gradePreference?: 'current' | 'best'
148
- ) =>
149
- infos.map(
150
- ({ data, fullName, platformUserId }) =>
151
- getCompletedActivityStateGradeAndProgress({
152
- name: fullName,
153
- scoreMaximum,
154
- userId: platformUserId,
155
- state: data,
156
- gradePreference,
157
- })
158
- );
159
-
160
- export const getCurrentGrade = async(
161
- services: {
162
- lrs: LrsGateway;
163
- ltiAuthProvider: AuthProvider;
164
- },
165
- registration: string,
166
- options?: {
167
- currentPreference?: 'latest' | 'oldest';
168
- incompleteAttemptCallback?: (info: ActivityState) => Promise<GradeAndProgress>;
169
- name?: string;
170
- scoreMaximum?: number;
171
- userId?: string;
172
- gradePreference?: 'current' | 'best';
173
- }): Promise<GradeAndProgress | null> => {
174
- const user = await services.ltiAuthProvider.getUser();
175
- if (!user) { return null; }
176
-
177
- const userId = options?.userId ?? user.uuid;
178
- const {
179
- currentPreference,
180
- incompleteAttemptCallback,
181
- name,
182
- scoreMaximum,
183
- gradePreference,
184
- } = options ?? {};
185
-
186
- const infoPerUser = await getRegistrationAttemptInfo(services.lrs, registration, { currentPreference });
187
- const userInfo = infoPerUser[user.uuid];
188
-
189
- if (!userInfo) {
190
- return getCompletedActivityStateGradeAndProgress({
191
- name,
192
- scoreMaximum,
193
- state: resolveAttemptInfo([]),
194
- userId,
195
- gradePreference,
196
- });
197
- }
198
- if (userInfo.currentAttemptCompleted || !incompleteAttemptCallback) {
199
- return getCompletedActivityStateGradeAndProgress({
200
- name,
201
- scoreMaximum,
202
- state: userInfo,
203
- userId,
204
- gradePreference,
205
- });
206
- }
207
-
208
- return incompleteAttemptCallback(userInfo);
209
- };
210
-
211
- export const getAssignmentGrades = async(
212
- services: {
213
- accountsGateway: AccountsGateway;
214
- lrs: LrsGateway;
215
- },
216
- assignmentIRI: string,
217
- registration: string,
218
- options?: {
219
- anyUser?: boolean;
220
- currentPreference?: 'latest' | 'oldest';
221
- incompleteAttemptsCallback?: (mappedInfo: UserActivityInfo[]) => Promise<GradeAndProgress[]>;
222
- platformId?: string;
223
- scoreMaximum?: number;
224
- user?: string;
225
- gradePreference?: 'current' | 'best';
226
- }
227
- ): Promise<GradeAndProgress[]> => {
228
- const {
229
- anyUser,
230
- currentPreference,
231
- incompleteAttemptsCallback,
232
- platformId,
233
- scoreMaximum,
234
- user,
235
- gradePreference = 'current',
236
- } = options ?? {};
237
-
238
- const infoPerUserUuid = await getRegistrationAttemptInfo(
239
- services.lrs, registration, { activity: assignmentIRI, anyUser, currentPreference, user }
240
- );
241
-
242
- const mappedInfo = await services.accountsGateway.mapUserUuids(
243
- infoPerUserUuid, platformId
244
- );
245
-
246
- // If no custom callback, just return graded results based on preference
247
- if (!incompleteAttemptsCallback) {
248
- return getCompletedUserInfosGradeAndProgress(mappedInfo, scoreMaximum, gradePreference);
249
- }
250
-
251
- // Partition based on whether the chosen preference has a completed attempt
252
- const [incompleteInfo, completedInfo] = partition(
253
- (info: UserActivityInfo) => {
254
- const { completed } = pickAttemptAndCompleted(info.data, gradePreference);
255
- return completed === undefined;
256
- }
257
- )(mappedInfo);
258
-
259
- return getCompletedUserInfosGradeAndProgress(completedInfo, scoreMaximum, gradePreference).concat(
260
- await incompleteAttemptsCallback(incompleteInfo)
261
- );
262
- };
@@ -1,170 +0,0 @@
1
- import postgres from 'postgres';
2
- import { createCoreLogger } from '../logger';
3
- import { PostgresConnection, postgresConnection } from '.';
4
-
5
- jest.mock('postgres');
6
-
7
-
8
- const postgresSpy = postgres as any as jest.Mock;
9
- afterEach(() => {
10
- jest.clearAllMocks();
11
- jest.resetAllMocks();
12
- });
13
-
14
- describe('postgresConnection', () => {
15
- const config = {
16
- local: {
17
- host: 'cool host',
18
- readHost: 'cool read host',
19
- port: '3',
20
- database: 'cool database',
21
- username: 'cool username',
22
- password: 'cool password'
23
- }
24
- };
25
- let connection: PostgresConnection;
26
-
27
- beforeEach(() => {
28
- const logger = createCoreLogger(jest.fn());
29
- const services = {logger};
30
- connection = postgresConnection({})(config)(services);
31
- });
32
-
33
- it('initializes connection', async () => {
34
- await connection.db();
35
- expect(postgresSpy.mock.calls[0][0]).toEqual({
36
- database: 'cool database',
37
- host: 'cool host',
38
- password: 'cool password',
39
- port: 3,
40
- transform: expect.anything(),
41
- username: 'cool username',
42
- });
43
- });
44
-
45
- it('initializes readonly connection', async () => {
46
- await connection.dbRead();
47
- expect(postgresSpy.mock.calls[0][0]).toEqual({
48
- database: 'cool database',
49
- host: 'cool read host',
50
- password: 'cool password',
51
- port: 3,
52
- transform: expect.anything(),
53
- username: 'cool username',
54
- });
55
- });
56
-
57
- describe('migrations', () => {
58
- it('creates migrations table', async () => {
59
- const dbSpy = jest.fn((..._: any[]) => []);
60
- postgresSpy.mockReturnValue(dbSpy);
61
- await connection.migrate([]);
62
- expect(dbSpy.mock.calls[0][0]).toMatchInlineSnapshot(`
63
- [
64
- "
65
- CREATE TABLE IF NOT EXISTS migrations (
66
- id SERIAL PRIMARY KEY,
67
- name TEXT NOT NULL,
68
- ran_at TIMESTAMP NOT NULL DEFAULT NOW()
69
- )
70
- ",
71
- ]
72
- `);
73
- });
74
-
75
- it('runs migration and records it', async () => {
76
- const dbSpy = jest.fn(() => []);
77
- const up = jest.fn();
78
- postgresSpy.mockReturnValue(dbSpy);
79
- await connection.migrate([{name: 'test', up}]);
80
- expect(up).toHaveBeenCalled();
81
- expect(dbSpy.mock.calls.slice(2)).toMatchInlineSnapshot(`
82
- [
83
- [
84
- [
85
- "INSERT INTO migrations (name) VALUES (",
86
- ")",
87
- ],
88
- "test",
89
- ],
90
- ]
91
- `);
92
- });
93
-
94
- it('doesn\'t run migration if already run', async () => {
95
- const dbSpy = jest.fn((query: string[]) => query[0] === 'SELECT name FROM migrations'
96
- ? [{name: 'test'}]
97
- : []
98
- );
99
- const up = jest.fn();
100
- postgresSpy.mockReturnValue(dbSpy);
101
- await connection.migrate([{name: 'test', up}]);
102
- expect(up).not.toHaveBeenCalled();
103
- expect(dbSpy.mock.calls.slice(2)).toMatchInlineSnapshot('[]');
104
- });
105
- });
106
-
107
- describe('down', () => {
108
- it('does nothing if no connections are established', async () => {
109
- const downSpy = jest.fn();
110
- postgresSpy.mockReturnValue({end: downSpy});
111
- await connection.down();
112
- expect(downSpy).not.toHaveBeenCalled();
113
- });
114
-
115
- it('tears down db connection', async () => {
116
- const downSpy = jest.fn();
117
- postgresSpy.mockReturnValue({end: downSpy});
118
-
119
- await connection.db();
120
-
121
- expect(postgresSpy).toHaveBeenCalledTimes(1);
122
- expect(postgresSpy.mock.calls[0][0]).toEqual(expect.objectContaining({
123
- host: 'cool host',
124
- }));
125
-
126
- await connection.down();
127
-
128
- expect(downSpy).toHaveBeenCalledTimes(1);
129
- });
130
-
131
- it('tears down dbRead connection', async () => {
132
- const downSpy = jest.fn();
133
- postgresSpy.mockReturnValue({end: downSpy});
134
-
135
- await connection.dbRead();
136
-
137
- expect(postgresSpy).toHaveBeenCalledTimes(1);
138
- expect(postgresSpy.mock.calls[0][0]).toEqual(expect.objectContaining({
139
- host: 'cool read host',
140
- }));
141
-
142
- await connection.down();
143
-
144
- expect(downSpy).toHaveBeenCalledTimes(1);
145
- });
146
-
147
- it('tears down db and dbRead connection', async () => {
148
- const downSpy1 = jest.fn();
149
- const downSpy2 = jest.fn();
150
- postgresSpy.mockReturnValueOnce({end: downSpy1});
151
- postgresSpy.mockReturnValueOnce({end: downSpy2});
152
-
153
- await connection.db();
154
- await connection.dbRead();
155
-
156
- expect(postgresSpy).toHaveBeenCalledTimes(2);
157
- expect(postgresSpy.mock.calls[0][0]).toEqual(expect.objectContaining({
158
- host: 'cool host',
159
- }));
160
- expect(postgresSpy.mock.calls[1][0]).toEqual(expect.objectContaining({
161
- host: 'cool read host',
162
- }));
163
-
164
- await connection.down();
165
-
166
- expect(downSpy1).toHaveBeenCalledTimes(1);
167
- expect(downSpy2).toHaveBeenCalledTimes(1);
168
- });
169
- });
170
- });
@@ -1,84 +0,0 @@
1
- import postgres, {Sql} from 'postgres';
2
- import { assertNotNaN } from '../../assertions';
3
- import { ConfigProviderForConfig, resolveConfigValue } from '../../config';
4
- import { ifDefined } from '../../guards';
5
- import { once } from '../../misc/helpers';
6
- import type { Logger } from '../logger';
7
-
8
- type Config = {
9
- host: string;
10
- readHost: string;
11
- port: string;
12
- database: string;
13
- username: string;
14
- password: string;
15
- };
16
- interface Initializer<C> {
17
- configSpace?: C;
18
- }
19
-
20
- export const postgresConnection = <C extends string = 'local'>(initializer: Initializer<C>) => (configProvider: {[_key in C]: ConfigProviderForConfig<Config>}) => {
21
- const config = configProvider[ifDefined(initializer.configSpace, 'local' as C)];
22
- const host = once(() => resolveConfigValue(config.host));
23
- const readHost = once(() => resolveConfigValue(config.readHost));
24
- const connectionOptions = once(async() => ({
25
- port: assertNotNaN(parseInt(await resolveConfigValue(config.port), 10), new Error('port must be a number')),
26
- database: await resolveConfigValue(config.database),
27
- username: await resolveConfigValue(config.username),
28
- password: await resolveConfigValue(config.password),
29
- transform: {
30
- column: {to: postgres.fromCamel, from: postgres.toCamel},
31
- },
32
- }));
33
- const connections: Sql[] = [];
34
- const sql = once(async() => {
35
- const options = await connectionOptions();
36
- const connection = postgres({...options, host: await host()});
37
- connections.push(connection);
38
- return connection;
39
- });
40
- const sqlRead = once(async() => {
41
- const options = await connectionOptions();
42
- const connection = postgres({...options, host: await readHost()});
43
- connections.push(connection);
44
- return connection;
45
- });
46
-
47
- return (services: {logger: Logger}) => ({
48
- db: sql,
49
- dbRead: sqlRead,
50
- migrate: async(migrations: Migration[]) => {
51
- await migrate(services, await sql(), migrations);
52
- },
53
- down: () => Promise.all(connections.map(c => c.end()))
54
- });
55
- };
56
-
57
- export type PostgresConnection = ReturnType<ReturnType<ReturnType<typeof postgresConnection>>>;
58
-
59
- export interface Migration {
60
- name: string;
61
- up: (db: Sql) => Promise<void>;
62
- }
63
-
64
- async function migrate(services: {logger: Logger}, db: Sql, migrations: Migration[]) {
65
- await db`
66
- CREATE TABLE IF NOT EXISTS migrations (
67
- id SERIAL PRIMARY KEY,
68
- name TEXT NOT NULL,
69
- ran_at TIMESTAMP NOT NULL DEFAULT NOW()
70
- )
71
- `;
72
-
73
- const ranMigrations = await db`SELECT name FROM migrations`;
74
-
75
- for (const migration of migrations) {
76
- if (ranMigrations.some(({name}) => name === migration.name)) {
77
- continue;
78
- }
79
-
80
- services.logger.log(`Running migration ${migration.name}`);
81
- await migration.up(db);
82
- await db`INSERT INTO migrations (name) VALUES (${migration.name})`;
83
- }
84
- }
@@ -1,3 +0,0 @@
1
- # searchProvider
2
-
3
- provides searching/filtering for entity data, currently integrates with any of the VersionedDocumentStore drivers to provide **in memory** filtering, so it loads all the documents every time. ElasticSearch support will be added at some point. currently it seems like the dynamo scan cost is likely to be less than the Elastic cluster cost for our immediate use cases.
@@ -1,59 +0,0 @@
1
-
2
- export type FieldType = string | string[] | number | boolean;
3
-
4
- /* sorta migrating towards more raw ES stuff in the filters */
5
- export type ESFilter = {
6
- terms: Record<string, FieldType>;
7
- } | {
8
- term: Record<string, FieldType>;
9
- } | {
10
- exists: { field: string };
11
- } | {
12
- nested: { path: string; query: Filter };
13
- } | {
14
- bool: BoolFilter;
15
- };
16
- export type Filter = {
17
- key: string;
18
- value: FieldType;
19
- } | ESFilter;
20
-
21
- export type BoolFilter = {
22
- must?: Filter[];
23
- must_not?: Filter[];
24
- should?: Filter[];
25
- filter?: Filter[];
26
- minimum_should_match?: number;
27
- };
28
-
29
- type Field =
30
- {key: string; type?: 'text'; weight: number}
31
- | {key: string; type: 'keyword'}
32
- | {key: string; type: 'boolean'};
33
-
34
- export interface IndexOptions<T> {
35
- body: T;
36
- id: string;
37
- }
38
-
39
- export type FieldMapping = {
40
- type: 'keyword' | 'text' | 'boolean';
41
- } | {
42
- type: 'date'; format?: string;
43
- } | {
44
- type?: 'nested' | 'object';
45
- properties: Record<string, FieldMapping>;
46
- };
47
-
48
- export type FieldMappings = Record<string, FieldMapping>;
49
-
50
- export interface SearchOptions {
51
- page?: number;
52
- query: string | undefined;
53
- fields: Field[];
54
- filter?: Filter[];
55
- must?: Filter[];
56
- must_not?: Filter[];
57
- should?: Filter[];
58
- sort?: {key: string; order: 'asc' | 'desc'}[];
59
- }