@openstax/ts-utils 1.33.0 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/.cfnlintrc +2 -0
  2. package/.github/CODEOWNERS +1 -0
  3. package/.github/workflows/ci.yml +36 -0
  4. package/.github/workflows/lint.yml +55 -0
  5. package/.nvmrc +1 -0
  6. package/.syncignore +4 -0
  7. package/.syncpackrc +18 -0
  8. package/CONTRIBUTING.md +96 -0
  9. package/LICENSE +661 -0
  10. package/Procfile +1 -0
  11. package/README.md +62 -90
  12. package/app.json +23 -0
  13. package/cspell.json +32 -0
  14. package/deploy/constants.env +21 -0
  15. package/deploy/deploy.bash +157 -0
  16. package/deploy/deployment-alt-region.cfn.yml +70 -0
  17. package/deploy/deployment.cfn.yml +650 -0
  18. package/deploy/destroy-deployment.bash +23 -0
  19. package/deploy/shared.cfn.yml +94 -0
  20. package/docs/lambda-build.md +35 -0
  21. package/package.json +12 -228
  22. package/packages/frontend/README.md +46 -0
  23. package/packages/frontend/package.json +101 -0
  24. package/packages/frontend/public/favicon.ico +0 -0
  25. package/packages/frontend/public/index.html +107 -0
  26. package/packages/frontend/public/maintenance.html +59 -0
  27. package/packages/frontend/public/manifest.json +15 -0
  28. package/packages/frontend/public/robots.txt +3 -0
  29. package/packages/frontend/script/make-certificate.bash +49 -0
  30. package/packages/frontend/script/server/cli.js +11 -0
  31. package/packages/frontend/script/server/index.js +47 -0
  32. package/packages/frontend/script/start.bash +22 -0
  33. package/packages/frontend/script/trust-localhost.bash +7 -0
  34. package/packages/frontend/src/auth/authProvider.ts +10 -0
  35. package/packages/frontend/src/auth/useAuth.ts +33 -0
  36. package/packages/frontend/src/components/Pagination.tsx +26 -0
  37. package/packages/frontend/src/configProvider/index.ts +53 -0
  38. package/packages/frontend/src/configProvider/use.ts +41 -0
  39. package/packages/frontend/src/core/context/services.spec.tsx +39 -0
  40. package/packages/frontend/src/core/context/services.tsx +16 -0
  41. package/packages/frontend/src/core/index.spec.ts +7 -0
  42. package/packages/frontend/src/core/index.ts +20 -0
  43. package/packages/frontend/src/core/services.tsx +14 -0
  44. package/packages/frontend/src/core/types.ts +3 -0
  45. package/packages/frontend/src/example/api.ts +28 -0
  46. package/packages/frontend/src/example/components/Layout.tsx +23 -0
  47. package/packages/frontend/src/example/screens/Home.spec.tsx +68 -0
  48. package/packages/frontend/src/example/screens/Home.tsx +78 -0
  49. package/packages/frontend/src/example/screens/ThingList.spec.tsx +60 -0
  50. package/packages/frontend/src/example/screens/ThingList.tsx +75 -0
  51. package/packages/frontend/src/example/screens/ThingView.spec.tsx +71 -0
  52. package/packages/frontend/src/example/screens/ThingView.tsx +47 -0
  53. package/packages/frontend/src/example/screens/index.ts +9 -0
  54. package/packages/frontend/src/index.css +159 -0
  55. package/packages/frontend/src/index.tsx +67 -0
  56. package/packages/frontend/src/react-app-env.d.ts +1 -0
  57. package/packages/frontend/src/routing/components/RouteLink.spec.tsx +55 -0
  58. package/packages/frontend/src/routing/components/RouteLink.tsx +35 -0
  59. package/packages/frontend/src/routing/middleware.ts +6 -0
  60. package/packages/frontend/src/routing/useQuery.ts +14 -0
  61. package/packages/frontend/src/setupProxy.js +19 -0
  62. package/packages/frontend/src/setupTests.ts +9 -0
  63. package/packages/frontend/src/tests/testServices.tsx +23 -0
  64. package/packages/frontend/tsconfig.json +27 -0
  65. package/packages/lambda/.eslintrc.js +64 -0
  66. package/packages/lambda/jest-global-setup.js +3 -0
  67. package/packages/lambda/jest-setup-after-env.js +1 -0
  68. package/packages/lambda/jest.config.js +31 -0
  69. package/packages/lambda/jest.resolver.js +17 -0
  70. package/packages/lambda/package.json +68 -0
  71. package/packages/lambda/script/build.bash +19 -0
  72. package/packages/lambda/script/bundle-functions.bash +10 -0
  73. package/packages/lambda/script/lambdaLocalProxy.js +16 -0
  74. package/packages/lambda/script/lambdaLocalProxy.spec.ts +147 -0
  75. package/packages/lambda/script/utils/getRouteData.ts +7 -0
  76. package/packages/lambda/script/utils/routeDataLoader.js +8 -0
  77. package/packages/lambda/script/utils/routeDataLoader.spec.ts +8 -0
  78. package/packages/lambda/src/functions/serviceApi/core/index.ts +7 -0
  79. package/packages/lambda/src/functions/serviceApi/core/request.spec.ts +38 -0
  80. package/packages/lambda/src/functions/serviceApi/core/request.ts +42 -0
  81. package/packages/lambda/src/functions/serviceApi/core/routes.spec.ts +7 -0
  82. package/packages/lambda/src/functions/serviceApi/core/routes.ts +10 -0
  83. package/packages/lambda/src/functions/serviceApi/core/services.ts +9 -0
  84. package/packages/lambda/src/functions/serviceApi/core/types.ts +13 -0
  85. package/packages/lambda/src/functions/serviceApi/entry/lambda/https-xray.ts +4 -0
  86. package/packages/lambda/src/functions/serviceApi/entry/lambda/index.spec.ts +48 -0
  87. package/packages/lambda/src/functions/serviceApi/entry/lambda/index.ts +58 -0
  88. package/packages/lambda/src/functions/serviceApi/entry/lambda/services.ts +36 -0
  89. package/packages/lambda/src/functions/serviceApi/entry/local.ts +71 -0
  90. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentSearchMiddleware.spec.ts +16 -0
  91. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentSearchMiddleware.ts +41 -0
  92. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentStoreMiddleware.spec.ts +78 -0
  93. package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentStoreMiddleware.ts +70 -0
  94. package/packages/lambda/src/functions/serviceApi/versions/v0/example/routes.spec.ts +306 -0
  95. package/packages/lambda/src/functions/serviceApi/versions/v0/example/routes.ts +176 -0
  96. package/packages/lambda/src/functions/serviceApi/versions/v0/index.spec.ts +263 -0
  97. package/packages/lambda/src/functions/serviceApi/versions/v0/index.ts +134 -0
  98. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/authMiddleware.spec.ts +23 -0
  99. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/authMiddleware.ts +32 -0
  100. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/configMiddleware.spec.ts +10 -0
  101. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/configMiddleware.ts +7 -0
  102. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/frontendFileServerMiddleware.spec.ts +13 -0
  103. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/frontendFileServerMiddleware.ts +23 -0
  104. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/paginationMiddleware.spec.ts +9 -0
  105. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/paginationMiddleware.ts +9 -0
  106. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/searchMiddleware.spec.ts +12 -0
  107. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/searchMiddleware.ts +21 -0
  108. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/userRoleValidatorMiddleware.spec.ts +21 -0
  109. package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/userRoleValidatorMiddleware.ts +18 -0
  110. package/packages/lambda/tsconfig.json +30 -0
  111. package/packages/lambda/webpack.config.js +97 -0
  112. package/packages/utils/.eslintrc.js +64 -0
  113. package/packages/utils/README.md +118 -0
  114. package/packages/utils/jest-global-setup.js +3 -0
  115. package/packages/utils/jest.config.js +25 -0
  116. package/packages/utils/jest.resolver.js +17 -0
  117. package/packages/utils/package.json +238 -0
  118. package/packages/utils/src/assertions/index.spec.ts +126 -0
  119. package/{dist/esm/assertions/index.js → packages/utils/src/assertions/index.ts} +64 -49
  120. package/packages/utils/src/aws/ssmService.ts +7 -0
  121. package/packages/utils/src/config/awsParameterConfig.ts +24 -0
  122. package/packages/utils/src/config/envConfig.ts +58 -0
  123. package/packages/utils/src/config/index.spec.ts +165 -0
  124. package/{dist/esm/config/index.d.ts → packages/utils/src/config/index.ts} +29 -13
  125. package/packages/utils/src/config/lambdaParameterConfig.ts +49 -0
  126. package/{dist/esm/config/replaceConfig.js → packages/utils/src/config/replaceConfig.ts} +16 -6
  127. package/packages/utils/src/config/resolveConfigValue.ts +10 -0
  128. package/packages/utils/src/errors/index.spec.ts +35 -0
  129. package/{dist/esm/errors/index.js → packages/utils/src/errors/index.ts} +57 -41
  130. package/packages/utils/src/fetch/fetchStatusRetry.spec.ts +197 -0
  131. package/packages/utils/src/fetch/fetchStatusRetry.ts +33 -0
  132. package/packages/utils/src/fetch/index.spec.ts +34 -0
  133. package/packages/utils/src/fetch/index.ts +87 -0
  134. package/packages/utils/src/guards/index.spec.ts +58 -0
  135. package/{dist/esm/guards/index.d.ts → packages/utils/src/guards/index.ts} +10 -7
  136. package/packages/utils/src/index.spec.ts +471 -0
  137. package/packages/utils/src/middleware/apiErrorHandler.spec.ts +65 -0
  138. package/packages/utils/src/middleware/apiErrorHandler.ts +67 -0
  139. package/packages/utils/src/middleware/apiSlowResponseMiddleware.spec.ts +184 -0
  140. package/packages/utils/src/middleware/apiSlowResponseMiddleware.ts +71 -0
  141. package/packages/utils/src/middleware/index.spec.ts +99 -0
  142. package/{dist/cjs/middleware/index.d.ts → packages/utils/src/middleware/index.ts} +53 -5
  143. package/packages/utils/src/middleware/lambdaCorsResponseMiddleware.spec.ts +103 -0
  144. package/packages/utils/src/middleware/lambdaCorsResponseMiddleware.ts +52 -0
  145. package/packages/utils/src/middleware/throwNotFoundMiddleware.spec.ts +20 -0
  146. package/packages/utils/src/middleware/throwNotFoundMiddleware.ts +11 -0
  147. package/packages/utils/src/misc/hashValue.ts +18 -0
  148. package/packages/utils/src/misc/helpers.ts +259 -0
  149. package/packages/utils/src/misc/merge.ts +48 -0
  150. package/{dist/esm/misc/partitionSequence.js → packages/utils/src/misc/partitionSequence.ts} +23 -15
  151. package/packages/utils/src/pagination/index.spec.ts +150 -0
  152. package/packages/utils/src/pagination/index.ts +117 -0
  153. package/{dist/esm/routing/helpers.js → packages/utils/src/routing/helpers.ts} +42 -30
  154. package/packages/utils/src/routing/index.spec.ts +553 -0
  155. package/packages/utils/src/routing/index.ts +424 -0
  156. package/packages/utils/src/routing/validators/zod.spec.ts +16 -0
  157. package/packages/utils/src/routing/validators/zod.ts +14 -0
  158. package/packages/utils/src/services/accountsGateway/README.md +3 -0
  159. package/packages/utils/src/services/accountsGateway/index.spec.ts +518 -0
  160. package/packages/utils/src/services/accountsGateway/index.ts +251 -0
  161. package/packages/utils/src/services/apiGateway/README.md +93 -0
  162. package/packages/utils/src/services/apiGateway/index.spec.ts +254 -0
  163. package/packages/utils/src/services/apiGateway/index.ts +189 -0
  164. package/packages/utils/src/services/authProvider/README.md +21 -0
  165. package/packages/utils/src/services/authProvider/browser.spec.ts +391 -0
  166. package/packages/utils/src/services/authProvider/browser.ts +209 -0
  167. package/packages/utils/src/services/authProvider/decryption.spec.ts +337 -0
  168. package/packages/utils/src/services/authProvider/decryption.ts +98 -0
  169. package/packages/utils/src/services/authProvider/index.ts +93 -0
  170. package/packages/utils/src/services/authProvider/stub.spec.ts +29 -0
  171. package/packages/utils/src/services/authProvider/subrequest.spec.ts +105 -0
  172. package/packages/utils/src/services/authProvider/subrequest.ts +68 -0
  173. package/packages/utils/src/services/authProvider/utils/decryptAndVerify.spec.ts +128 -0
  174. package/packages/utils/src/services/authProvider/utils/decryptAndVerify.ts +106 -0
  175. package/packages/utils/src/services/authProvider/utils/embeddedAuthProvider.spec.ts +26 -0
  176. package/packages/utils/src/services/authProvider/utils/embeddedAuthProvider.ts +57 -0
  177. package/packages/utils/src/services/authProvider/utils/userRoleValidator.spec.ts +135 -0
  178. package/packages/utils/src/services/authProvider/utils/userRoleValidator.ts +49 -0
  179. package/packages/utils/src/services/authProvider/utils/userSubrequest.spec.ts +26 -0
  180. package/packages/utils/src/services/authProvider/utils/userSubrequest.ts +10 -0
  181. package/packages/utils/src/services/documentStore/dynamoEncoding.ts +57 -0
  182. package/packages/utils/src/services/documentStore/fileSystemAssert.spec.ts +43 -0
  183. package/packages/utils/src/services/documentStore/fileSystemAssert.ts +10 -0
  184. package/{dist/cjs/services/documentStore/index.d.ts → packages/utils/src/services/documentStore/index.ts} +8 -8
  185. package/packages/utils/src/services/documentStore/unversioned/README.md +13 -0
  186. package/packages/utils/src/services/documentStore/unversioned/dynamodb.spec.ts +859 -0
  187. package/packages/utils/src/services/documentStore/unversioned/dynamodb.ts +243 -0
  188. package/packages/utils/src/services/documentStore/unversioned/file-system.spec.ts +629 -0
  189. package/packages/utils/src/services/documentStore/unversioned/file-system.ts +194 -0
  190. package/{dist/cjs/services/documentStore/unversioned/index.d.ts → packages/utils/src/services/documentStore/unversioned/index.ts} +2 -0
  191. package/packages/utils/src/services/documentStore/versioned/README.md +13 -0
  192. package/packages/utils/src/services/documentStore/versioned/dynamodb.spec.ts +376 -0
  193. package/packages/utils/src/services/documentStore/versioned/dynamodb.ts +167 -0
  194. package/packages/utils/src/services/documentStore/versioned/file-system.spec.ts +262 -0
  195. package/packages/utils/src/services/documentStore/versioned/file-system.ts +90 -0
  196. package/packages/utils/src/services/documentStore/versioned/index.ts +25 -0
  197. package/packages/utils/src/services/exercisesGateway/README.md +5 -0
  198. package/packages/utils/src/services/exercisesGateway/index.spec.ts +326 -0
  199. package/packages/utils/src/services/exercisesGateway/index.ts +163 -0
  200. package/packages/utils/src/services/fileServer/index.spec.ts +88 -0
  201. package/packages/utils/src/services/fileServer/index.ts +43 -0
  202. package/packages/utils/src/services/fileServer/localFileServer.spec.ts +182 -0
  203. package/packages/utils/src/services/fileServer/localFileServer.ts +159 -0
  204. package/packages/utils/src/services/fileServer/s3FileServer.spec.ts +266 -0
  205. package/packages/utils/src/services/fileServer/s3FileServer.ts +155 -0
  206. package/packages/utils/src/services/launchParams/index.spec.ts +366 -0
  207. package/packages/utils/src/services/launchParams/signer.ts +73 -0
  208. package/packages/utils/src/services/launchParams/verifier.ts +120 -0
  209. package/packages/utils/src/services/logger/console.spec.ts +29 -0
  210. package/{dist/esm/services/logger/console.js → packages/utils/src/services/logger/console.ts} +5 -2
  211. package/packages/utils/src/services/logger/index.spec.ts +65 -0
  212. package/{dist/esm/services/logger/index.d.ts → packages/utils/src/services/logger/index.ts} +23 -9
  213. package/packages/utils/src/services/lrsGateway/README.md +5 -0
  214. package/packages/utils/src/services/lrsGateway/addStatementDefaultFields.ts +22 -0
  215. package/packages/utils/src/services/lrsGateway/attempt-utils.spec.ts +847 -0
  216. package/packages/utils/src/services/lrsGateway/attempt-utils.ts +358 -0
  217. package/packages/utils/src/services/lrsGateway/file-system.spec.ts +363 -0
  218. package/packages/utils/src/services/lrsGateway/file-system.ts +165 -0
  219. package/packages/utils/src/services/lrsGateway/index.spec.ts +194 -0
  220. package/packages/utils/src/services/lrsGateway/index.ts +257 -0
  221. package/packages/utils/src/services/lrsGateway/xapiUtils.spec.ts +887 -0
  222. package/packages/utils/src/services/lrsGateway/xapiUtils.ts +262 -0
  223. package/packages/utils/src/services/postgresConnection/index.spec.ts +170 -0
  224. package/packages/utils/src/services/postgresConnection/index.ts +84 -0
  225. package/packages/utils/src/services/searchProvider/README.md +3 -0
  226. package/packages/utils/src/services/searchProvider/index.ts +59 -0
  227. package/packages/utils/src/services/searchProvider/memorySearchTheBadWay.spec.ts +526 -0
  228. package/packages/utils/src/services/searchProvider/memorySearchTheBadWay.ts +223 -0
  229. package/packages/utils/src/services/searchProvider/openSearch.spec.ts +926 -0
  230. package/packages/utils/src/services/searchProvider/openSearch.ts +195 -0
  231. package/{dist/esm/types.d.ts → packages/utils/src/types.ts} +34 -6
  232. package/packages/utils/tsconfig.json +31 -0
  233. package/packages/utils/tsconfig.without-specs.cjs.json +7 -0
  234. package/packages/utils/tsconfig.without-specs.esm.json +7 -0
  235. package/packages/utils/tsconfig.without-specs.json +6 -0
  236. package/scripts/build.bash +24 -0
  237. package/scripts/ci.bash +10 -0
  238. package/scripts/start.bash +29 -0
  239. package/dist/cjs/assertions/index.d.ts +0 -89
  240. package/dist/cjs/assertions/index.js +0 -157
  241. package/dist/cjs/aws/ssmService.d.ts +0 -5
  242. package/dist/cjs/aws/ssmService.js +0 -9
  243. package/dist/cjs/config/awsParameterConfig.d.ts +0 -10
  244. package/dist/cjs/config/awsParameterConfig.js +0 -26
  245. package/dist/cjs/config/envConfig.d.ts +0 -24
  246. package/dist/cjs/config/envConfig.js +0 -57
  247. package/dist/cjs/config/index.d.ts +0 -48
  248. package/dist/cjs/config/index.js +0 -35
  249. package/dist/cjs/config/lambdaParameterConfig.d.ts +0 -12
  250. package/dist/cjs/config/lambdaParameterConfig.js +0 -45
  251. package/dist/cjs/config/replaceConfig.d.ts +0 -14
  252. package/dist/cjs/config/replaceConfig.js +0 -22
  253. package/dist/cjs/config/resolveConfigValue.d.ts +0 -5
  254. package/dist/cjs/config/resolveConfigValue.js +0 -12
  255. package/dist/cjs/errors/index.d.ts +0 -88
  256. package/dist/cjs/errors/index.js +0 -123
  257. package/dist/cjs/fetch/fetchStatusRetry.d.ts +0 -8
  258. package/dist/cjs/fetch/fetchStatusRetry.js +0 -27
  259. package/dist/cjs/fetch/index.d.ts +0 -64
  260. package/dist/cjs/fetch/index.js +0 -55
  261. package/dist/cjs/guards/index.d.ts +0 -38
  262. package/dist/cjs/guards/index.js +0 -44
  263. package/dist/cjs/index.js +0 -20
  264. package/dist/cjs/middleware/apiErrorHandler.d.ts +0 -24
  265. package/dist/cjs/middleware/apiErrorHandler.js +0 -42
  266. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +0 -23
  267. package/dist/cjs/middleware/apiSlowResponseMiddleware.js +0 -54
  268. package/dist/cjs/middleware/index.js +0 -48
  269. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
  270. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +0 -44
  271. package/dist/cjs/middleware/throwNotFoundMiddleware.d.ts +0 -4
  272. package/dist/cjs/middleware/throwNotFoundMiddleware.js +0 -14
  273. package/dist/cjs/misc/hashValue.d.ts +0 -10
  274. package/dist/cjs/misc/hashValue.js +0 -17
  275. package/dist/cjs/misc/helpers.d.ts +0 -124
  276. package/dist/cjs/misc/helpers.js +0 -214
  277. package/dist/cjs/misc/merge.d.ts +0 -21
  278. package/dist/cjs/misc/merge.js +0 -45
  279. package/dist/cjs/misc/partitionSequence.d.ts +0 -35
  280. package/dist/cjs/misc/partitionSequence.js +0 -55
  281. package/dist/cjs/pagination/index.d.ts +0 -91
  282. package/dist/cjs/pagination/index.js +0 -83
  283. package/dist/cjs/routing/helpers.d.ts +0 -57
  284. package/dist/cjs/routing/helpers.js +0 -90
  285. package/dist/cjs/routing/index.d.ts +0 -290
  286. package/dist/cjs/routing/index.js +0 -295
  287. package/dist/cjs/routing/validators/zod.d.ts +0 -4
  288. package/dist/cjs/routing/validators/zod.js +0 -14
  289. package/dist/cjs/services/accountsGateway/index.d.ts +0 -92
  290. package/dist/cjs/services/accountsGateway/index.js +0 -138
  291. package/dist/cjs/services/apiGateway/index.d.ts +0 -68
  292. package/dist/cjs/services/apiGateway/index.js +0 -118
  293. package/dist/cjs/services/authProvider/browser.d.ts +0 -40
  294. package/dist/cjs/services/authProvider/browser.js +0 -155
  295. package/dist/cjs/services/authProvider/decryption.d.ts +0 -19
  296. package/dist/cjs/services/authProvider/decryption.js +0 -73
  297. package/dist/cjs/services/authProvider/index.d.ts +0 -63
  298. package/dist/cjs/services/authProvider/index.js +0 -34
  299. package/dist/cjs/services/authProvider/subrequest.d.ts +0 -13
  300. package/dist/cjs/services/authProvider/subrequest.js +0 -49
  301. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +0 -28
  302. package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +0 -91
  303. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
  304. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +0 -47
  305. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +0 -13
  306. package/dist/cjs/services/authProvider/utils/userRoleValidator.js +0 -37
  307. package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +0 -3
  308. package/dist/cjs/services/authProvider/utils/userSubrequest.js +0 -13
  309. package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +0 -10
  310. package/dist/cjs/services/documentStore/dynamoEncoding.js +0 -52
  311. package/dist/cjs/services/documentStore/fileSystemAssert.d.ts +0 -1
  312. package/dist/cjs/services/documentStore/fileSystemAssert.js +0 -14
  313. package/dist/cjs/services/documentStore/index.js +0 -2
  314. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +0 -31
  315. package/dist/cjs/services/documentStore/unversioned/dynamodb.js +0 -233
  316. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +0 -32
  317. package/dist/cjs/services/documentStore/unversioned/file-system.js +0 -214
  318. package/dist/cjs/services/documentStore/unversioned/index.js +0 -2
  319. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +0 -25
  320. package/dist/cjs/services/documentStore/versioned/dynamodb.js +0 -143
  321. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +0 -25
  322. package/dist/cjs/services/documentStore/versioned/file-system.js +0 -73
  323. package/dist/cjs/services/documentStore/versioned/index.d.ts +0 -17
  324. package/dist/cjs/services/documentStore/versioned/index.js +0 -2
  325. package/dist/cjs/services/exercisesGateway/index.d.ts +0 -67
  326. package/dist/cjs/services/exercisesGateway/index.js +0 -107
  327. package/dist/cjs/services/fileServer/index.d.ts +0 -30
  328. package/dist/cjs/services/fileServer/index.js +0 -19
  329. package/dist/cjs/services/fileServer/localFileServer.d.ts +0 -13
  330. package/dist/cjs/services/fileServer/localFileServer.js +0 -132
  331. package/dist/cjs/services/fileServer/s3FileServer.d.ts +0 -14
  332. package/dist/cjs/services/fileServer/s3FileServer.js +0 -131
  333. package/dist/cjs/services/launchParams/index.js +0 -7
  334. package/dist/cjs/services/launchParams/signer.d.ts +0 -23
  335. package/dist/cjs/services/launchParams/signer.js +0 -58
  336. package/dist/cjs/services/launchParams/verifier.d.ts +0 -21
  337. package/dist/cjs/services/launchParams/verifier.js +0 -129
  338. package/dist/cjs/services/logger/console.d.ts +0 -4
  339. package/dist/cjs/services/logger/console.js +0 -12
  340. package/dist/cjs/services/logger/index.d.ts +0 -39
  341. package/dist/cjs/services/logger/index.js +0 -31
  342. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
  343. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.js +0 -21
  344. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +0 -70
  345. package/dist/cjs/services/lrsGateway/attempt-utils.js +0 -258
  346. package/dist/cjs/services/lrsGateway/file-system.d.ts +0 -15
  347. package/dist/cjs/services/lrsGateway/file-system.js +0 -150
  348. package/dist/cjs/services/lrsGateway/index.d.ts +0 -122
  349. package/dist/cjs/services/lrsGateway/index.js +0 -148
  350. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +0 -68
  351. package/dist/cjs/services/lrsGateway/xapiUtils.js +0 -109
  352. package/dist/cjs/services/postgresConnection/index.d.ts +0 -28
  353. package/dist/cjs/services/postgresConnection/index.js +0 -65
  354. package/dist/cjs/services/searchProvider/index.d.ts +0 -67
  355. package/dist/cjs/services/searchProvider/index.js +0 -2
  356. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +0 -20
  357. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +0 -191
  358. package/dist/cjs/services/searchProvider/openSearch.d.ts +0 -28
  359. package/dist/cjs/services/searchProvider/openSearch.js +0 -154
  360. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +0 -1
  361. package/dist/cjs/types.d.ts +0 -31
  362. package/dist/cjs/types.js +0 -2
  363. package/dist/esm/assertions/index.d.ts +0 -89
  364. package/dist/esm/aws/ssmService.d.ts +0 -5
  365. package/dist/esm/aws/ssmService.js +0 -6
  366. package/dist/esm/config/awsParameterConfig.d.ts +0 -10
  367. package/dist/esm/config/awsParameterConfig.js +0 -22
  368. package/dist/esm/config/envConfig.d.ts +0 -24
  369. package/dist/esm/config/envConfig.js +0 -53
  370. package/dist/esm/config/index.js +0 -17
  371. package/dist/esm/config/lambdaParameterConfig.d.ts +0 -12
  372. package/dist/esm/config/lambdaParameterConfig.js +0 -38
  373. package/dist/esm/config/replaceConfig.d.ts +0 -14
  374. package/dist/esm/config/resolveConfigValue.d.ts +0 -5
  375. package/dist/esm/config/resolveConfigValue.js +0 -8
  376. package/dist/esm/errors/index.d.ts +0 -88
  377. package/dist/esm/fetch/fetchStatusRetry.d.ts +0 -8
  378. package/dist/esm/fetch/fetchStatusRetry.js +0 -23
  379. package/dist/esm/fetch/index.d.ts +0 -64
  380. package/dist/esm/fetch/index.js +0 -46
  381. package/dist/esm/guards/index.js +0 -36
  382. package/dist/esm/index.d.ts +0 -4
  383. package/dist/esm/index.js +0 -4
  384. package/dist/esm/middleware/apiErrorHandler.d.ts +0 -24
  385. package/dist/esm/middleware/apiErrorHandler.js +0 -38
  386. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +0 -23
  387. package/dist/esm/middleware/apiSlowResponseMiddleware.js +0 -50
  388. package/dist/esm/middleware/index.d.ts +0 -47
  389. package/dist/esm/middleware/index.js +0 -44
  390. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
  391. package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +0 -40
  392. package/dist/esm/middleware/throwNotFoundMiddleware.d.ts +0 -4
  393. package/dist/esm/middleware/throwNotFoundMiddleware.js +0 -10
  394. package/dist/esm/misc/hashValue.d.ts +0 -10
  395. package/dist/esm/misc/hashValue.js +0 -13
  396. package/dist/esm/misc/helpers.d.ts +0 -124
  397. package/dist/esm/misc/helpers.js +0 -199
  398. package/dist/esm/misc/merge.d.ts +0 -21
  399. package/dist/esm/misc/merge.js +0 -40
  400. package/dist/esm/misc/partitionSequence.d.ts +0 -35
  401. package/dist/esm/pagination/index.d.ts +0 -91
  402. package/dist/esm/pagination/index.js +0 -77
  403. package/dist/esm/routing/helpers.d.ts +0 -57
  404. package/dist/esm/routing/index.d.ts +0 -290
  405. package/dist/esm/routing/index.js +0 -246
  406. package/dist/esm/routing/validators/zod.d.ts +0 -4
  407. package/dist/esm/routing/validators/zod.js +0 -10
  408. package/dist/esm/services/accountsGateway/index.d.ts +0 -92
  409. package/dist/esm/services/accountsGateway/index.js +0 -131
  410. package/dist/esm/services/apiGateway/index.d.ts +0 -68
  411. package/dist/esm/services/apiGateway/index.js +0 -77
  412. package/dist/esm/services/authProvider/browser.d.ts +0 -40
  413. package/dist/esm/services/authProvider/browser.js +0 -151
  414. package/dist/esm/services/authProvider/decryption.d.ts +0 -19
  415. package/dist/esm/services/authProvider/decryption.js +0 -69
  416. package/dist/esm/services/authProvider/index.d.ts +0 -63
  417. package/dist/esm/services/authProvider/index.js +0 -26
  418. package/dist/esm/services/authProvider/subrequest.d.ts +0 -13
  419. package/dist/esm/services/authProvider/subrequest.js +0 -45
  420. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +0 -28
  421. package/dist/esm/services/authProvider/utils/decryptAndVerify.js +0 -85
  422. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
  423. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.js +0 -40
  424. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +0 -13
  425. package/dist/esm/services/authProvider/utils/userRoleValidator.js +0 -33
  426. package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +0 -3
  427. package/dist/esm/services/authProvider/utils/userSubrequest.js +0 -6
  428. package/dist/esm/services/documentStore/dynamoEncoding.d.ts +0 -10
  429. package/dist/esm/services/documentStore/dynamoEncoding.js +0 -45
  430. package/dist/esm/services/documentStore/fileSystemAssert.d.ts +0 -1
  431. package/dist/esm/services/documentStore/fileSystemAssert.js +0 -10
  432. package/dist/esm/services/documentStore/index.d.ts +0 -14
  433. package/dist/esm/services/documentStore/index.js +0 -1
  434. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +0 -31
  435. package/dist/esm/services/documentStore/unversioned/dynamodb.js +0 -226
  436. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +0 -32
  437. package/dist/esm/services/documentStore/unversioned/file-system.js +0 -174
  438. package/dist/esm/services/documentStore/unversioned/index.d.ts +0 -2
  439. package/dist/esm/services/documentStore/unversioned/index.js +0 -1
  440. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +0 -25
  441. package/dist/esm/services/documentStore/versioned/dynamodb.js +0 -139
  442. package/dist/esm/services/documentStore/versioned/file-system.d.ts +0 -25
  443. package/dist/esm/services/documentStore/versioned/file-system.js +0 -69
  444. package/dist/esm/services/documentStore/versioned/index.d.ts +0 -17
  445. package/dist/esm/services/documentStore/versioned/index.js +0 -1
  446. package/dist/esm/services/exercisesGateway/index.d.ts +0 -67
  447. package/dist/esm/services/exercisesGateway/index.js +0 -70
  448. package/dist/esm/services/fileServer/index.d.ts +0 -30
  449. package/dist/esm/services/fileServer/index.js +0 -13
  450. package/dist/esm/services/fileServer/localFileServer.d.ts +0 -13
  451. package/dist/esm/services/fileServer/localFileServer.js +0 -125
  452. package/dist/esm/services/fileServer/s3FileServer.d.ts +0 -14
  453. package/dist/esm/services/fileServer/s3FileServer.js +0 -124
  454. package/dist/esm/services/launchParams/index.d.ts +0 -2
  455. package/dist/esm/services/launchParams/index.js +0 -2
  456. package/dist/esm/services/launchParams/signer.d.ts +0 -23
  457. package/dist/esm/services/launchParams/signer.js +0 -51
  458. package/dist/esm/services/launchParams/verifier.d.ts +0 -21
  459. package/dist/esm/services/launchParams/verifier.js +0 -92
  460. package/dist/esm/services/logger/console.d.ts +0 -4
  461. package/dist/esm/services/logger/index.js +0 -27
  462. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
  463. package/dist/esm/services/lrsGateway/addStatementDefaultFields.js +0 -14
  464. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +0 -70
  465. package/dist/esm/services/lrsGateway/attempt-utils.js +0 -236
  466. package/dist/esm/services/lrsGateway/file-system.d.ts +0 -15
  467. package/dist/esm/services/lrsGateway/file-system.js +0 -110
  468. package/dist/esm/services/lrsGateway/index.d.ts +0 -122
  469. package/dist/esm/services/lrsGateway/index.js +0 -111
  470. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +0 -68
  471. package/dist/esm/services/lrsGateway/xapiUtils.js +0 -99
  472. package/dist/esm/services/postgresConnection/index.d.ts +0 -28
  473. package/dist/esm/services/postgresConnection/index.js +0 -58
  474. package/dist/esm/services/searchProvider/index.d.ts +0 -67
  475. package/dist/esm/services/searchProvider/index.js +0 -1
  476. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +0 -20
  477. package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +0 -187
  478. package/dist/esm/services/searchProvider/openSearch.d.ts +0 -28
  479. package/dist/esm/services/searchProvider/openSearch.js +0 -150
  480. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +0 -1
  481. package/dist/esm/types.js +0 -1
  482. /package/{script → packages/utils/script}/bin/copy-from-template.bash +0 -0
  483. /package/{script → packages/utils/script}/bin/delete-stack.bash +0 -0
  484. /package/{script → packages/utils/script}/bin/deploy.bash +0 -0
  485. /package/{script → packages/utils/script}/bin/destroy-deployment.bash +0 -0
  486. /package/{script → packages/utils/script}/bin/empty-bucket.bash +0 -0
  487. /package/{script → packages/utils/script}/bin/get-arg.bash +0 -0
  488. /package/{script → packages/utils/script}/bin/get-deployed-environments.bash +0 -0
  489. /package/{script → packages/utils/script}/bin/get-env-param.bash +0 -0
  490. /package/{script → packages/utils/script}/bin/get-kwarg.bash +0 -0
  491. /package/{script → packages/utils/script}/bin/get-stack-param.bash +0 -0
  492. /package/{script → packages/utils/script}/bin/has-flag.bash +0 -0
  493. /package/{script → packages/utils/script}/bin/init-constants-script.bash +0 -0
  494. /package/{script → packages/utils/script}/bin/init-params-script.bash +0 -0
  495. /package/{script → packages/utils/script}/bin/stack-exists.bash +0 -0
  496. /package/{script → packages/utils/script}/bin/update-utils.bash +0 -0
  497. /package/{script → packages/utils/script}/bin/upload-pager-duty-endpoints.bash +0 -0
  498. /package/{script → packages/utils/script}/bin/upload-params.bash +0 -0
  499. /package/{script → packages/utils/script}/bin/which.bash +0 -0
  500. /package/{script → packages/utils/script}/bin-entry.bash +0 -0
  501. /package/{script → packages/utils/script}/build.bash +0 -0
  502. /package/{dist/cjs/index.d.ts → packages/utils/src/index.ts} +0 -0
  503. /package/{dist/cjs/services/launchParams/index.d.ts → packages/utils/src/services/launchParams/index.ts} +0 -0
@@ -0,0 +1,195 @@
1
+ // cspell:ignore opensearch, Sigv
2
+ import { defaultProvider } from '@aws-sdk/credential-provider-node';
3
+ import { Client, RequestParams } from '@opensearch-project/opensearch';
4
+ import { SearchResponse } from '@opensearch-project/opensearch/api/types';
5
+ import { AwsSigv4Signer } from '@opensearch-project/opensearch/aws';
6
+ import { RequestBody, RequestNDBody } from '@opensearch-project/opensearch/lib/Transport';
7
+ import { ConfigProviderForConfig, resolveConfigValue } from '../../config';
8
+ import { ifDefined, isDefined } from '../../guards';
9
+ import { once } from '../../misc/helpers';
10
+ import { FieldMappings, Filter, IndexOptions, SearchOptions } from '.';
11
+
12
+ export type Config = {
13
+ node: string;
14
+ region: string;
15
+ };
16
+
17
+ export interface Initializer<C> {
18
+ configSpace?: C;
19
+ }
20
+
21
+ export type IndexConfig = {
22
+ name: string;
23
+ mappings: FieldMappings;
24
+ pageSize?: number;
25
+ };
26
+
27
+ const mapFilter = (filter: Filter) => {
28
+ if ('key' in filter && 'value' in filter) {
29
+ const { key } = filter;
30
+ const values = filter.value instanceof Array ? filter.value : [filter.value];
31
+ return { terms: {[key]: values} };
32
+ } else {
33
+ return filter;
34
+ }
35
+ };
36
+
37
+ export const openSearchService = <C extends string = 'deployed'>(initializer: Initializer<C> = {}) =>
38
+ (configProvider: {[_key in C]: ConfigProviderForConfig<Config>}) => {
39
+ const config = configProvider[ifDefined(initializer.configSpace, 'deployed' as C)];
40
+ const client = once(async() => new Client({
41
+ ...AwsSigv4Signer({
42
+ getCredentials: () => defaultProvider()(),
43
+ region: await resolveConfigValue(config.region),
44
+ service: 'es',
45
+ }),
46
+ maxRetries: 4, // default is 3
47
+ requestTimeout: 5000, // default is 30000
48
+ pingTimeout: 2000, // default is 30000
49
+ node: await resolveConfigValue(config.node),
50
+ }));
51
+
52
+ return <T>(indexConfig: IndexConfig) => {
53
+ const pageSize = indexConfig.pageSize || 10;
54
+
55
+ const deleteIndexIfExists = async() => {
56
+ const { indices } = await client();
57
+ const index = indexConfig.name;
58
+ const { body } = await indices.exists({ index });
59
+
60
+ if (body) {
61
+ await indices.delete({ index });
62
+ }
63
+ };
64
+
65
+ const ensureIndexCreated = async() => {
66
+ const { indices } = await client();
67
+ const index = indexConfig.name;
68
+ const { body } = await indices.exists({ index });
69
+
70
+ if (!body) {
71
+ await indices.create({
72
+ index,
73
+ body: {
74
+ mappings: {
75
+ dynamic: false,
76
+ properties: indexConfig.mappings
77
+ }
78
+ }
79
+ });
80
+ }
81
+ };
82
+
83
+ const index = async (params: IndexOptions<T>) => {
84
+ const openSearchClient = await client();
85
+
86
+ await openSearchClient.index({
87
+ index: indexConfig.name,
88
+ body: params.body as RequestBody,
89
+ id: params.id,
90
+ refresh: true
91
+ }, {
92
+ requestTimeout: 10000,
93
+ maxRetries: 1,
94
+ });
95
+ };
96
+
97
+ const bulkIndex = async (items: IndexOptions<T>[]) => {
98
+ const openSearchClient = await client();
99
+ await openSearchClient.bulk({
100
+ index: indexConfig.name,
101
+ body: items.flatMap((item) => [
102
+ { index: { _id: item.id } },
103
+ item.body
104
+ ]) as RequestNDBody,
105
+ refresh: true
106
+ }, {
107
+ requestTimeout: 10000,
108
+ maxRetries: 1,
109
+ });
110
+ };
111
+
112
+ const search = async(options: SearchOptions) => {
113
+ const body: RequestParams.Search['body'] = {
114
+ query: { bool: {} },
115
+ track_total_hits: true,
116
+ size: pageSize
117
+ };
118
+
119
+ if (options.query) {
120
+ body.query.bool.must = [{
121
+ multi_match: {
122
+ fields: options.fields.map((field) => 'weight' in field ? `${field.key}^${field.weight}` : field.key),
123
+ query: options.query
124
+ }
125
+ }];
126
+ }
127
+
128
+ const {must_not, should, must, filter} = options;
129
+
130
+ if (filter && filter.length > 0) {
131
+ body.query.bool.filter = filter.map(mapFilter);
132
+ }
133
+
134
+ if (must && must.length > 0) {
135
+ body.query.bool.must ||= [];
136
+ body.query.bool.must = body.query.bool.must.concat(must.map(mapFilter));
137
+ }
138
+
139
+ if (must_not && must_not.length > 0) {
140
+ body.query.bool.must_not = must_not.map(mapFilter);
141
+ }
142
+
143
+ if (should && should.length > 0) {
144
+ body.query.bool.should = should.map(mapFilter);
145
+ body.query.bool.minimum_should_match = 1;
146
+ }
147
+
148
+ if (options.sort && options.sort.length > 0) {
149
+ body.sort = options.sort.map(sort => ({
150
+ [sort.key]: { order: sort.order }
151
+ }));
152
+ }
153
+
154
+ if (options.page) {
155
+ body.from = (options.page - 1) * pageSize;
156
+ }
157
+
158
+ const response = await (await client()).search<SearchResponse<T>>({
159
+ body,
160
+ index: indexConfig.name
161
+ });
162
+
163
+ if (response.statusCode !== 200) {
164
+ throw new Error(`Unexpected status code: ${response.statusCode} from OpenSearch`);
165
+ }
166
+
167
+ const hits = response.body.hits;
168
+
169
+ const items = hits.hits.map((hit) => hit._source).filter(isDefined);
170
+
171
+ const currentPage = options.page || 1;
172
+ const { total } = hits;
173
+ const totalItems = typeof total === 'number' ? total : total.value;
174
+ const totalPages = Math.ceil(totalItems / pageSize) || 1;
175
+
176
+ return { items, pageSize, currentPage, totalItems, totalPages };
177
+ };
178
+
179
+ const updateMappings = async () => {
180
+ const { indices } = await client();
181
+
182
+ await indices.putMapping({
183
+ index: indexConfig.name,
184
+ body: {
185
+ properties: indexConfig.mappings
186
+ }
187
+ }, {
188
+ requestTimeout: 10000,
189
+ maxRetries: 1,
190
+ });
191
+ };
192
+
193
+ return { ensureIndexCreated, deleteIndexIfExists, index, bulkIndex, search, updateMappings };
194
+ };
195
+ };
@@ -6,26 +6,54 @@
6
6
  *
7
7
  * There may be a better way to do this; `T1 extends T2` doesn't work
8
8
  */
9
- export type TupleExtends<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail] ? T2 extends [infer T2Head, ...infer T2Tail] ? T1Head extends T2Head ? TupleExtends<T1Tail, T2Tail> extends 'yes' ? 'yes' : 'no' : 'no' : T2 extends [] ? 'yes' : 'no' : T1 extends [] ? T2 extends [] ? 'yes' : 'no' : 'no';
9
+ export type TupleExtends<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail]
10
+ ? T2 extends [infer T2Head, ...infer T2Tail]
11
+ ? T1Head extends T2Head
12
+ ? TupleExtends<T1Tail, T2Tail> extends 'yes'
13
+ ? 'yes'
14
+ : 'no'
15
+ : 'no'
16
+ : T2 extends []
17
+ ? 'yes'
18
+ : 'no'
19
+ : T1 extends []
20
+ ? T2 extends []
21
+ ? 'yes'
22
+ : 'no'
23
+ : 'no'
24
+ ;
25
+
10
26
  /**
11
27
  * unions each member of the tuple
12
28
  */
13
- export type TupleZip<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail] ? T2 extends [infer T2Head, ...infer T2Tail] ? [T1Head & T2Head, ...TupleZip<T1Tail, T2Tail>] : T2 extends [] ? T1 : never : T1 extends [] ? T2 extends any[] ? T2 : never : never;
29
+ export type TupleZip<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail]
30
+ ? T2 extends [infer T2Head, ...infer T2Tail]
31
+ ? [T1Head & T2Head, ...TupleZip<T1Tail, T2Tail>]
32
+ : T2 extends []
33
+ ? T1
34
+ : never
35
+ : T1 extends []
36
+ ? T2 extends any[]
37
+ ? T2
38
+ : never
39
+ : never
40
+ ;
41
+
14
42
  /**
15
43
  * If `R` is `Promise<I>`, returns `I`, otherwise returns `R`
16
44
  * @deprecated use TypeScript builtin Awaited instead:
17
45
  * @see https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-5.html#the-awaited-type-and-promise-improvements
18
46
  */
19
47
  export type UnwrapPromise<R> = R extends Promise<infer I> ? I : R;
48
+
20
49
  /**
21
50
  * turns `thing | thing2` into `thing & thing2`
22
51
  * @see https://stackoverflow.com/a/50375286/14809536
23
52
  */
24
- export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
53
+ export type UnionToIntersection<U> = (U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never;
54
+
25
55
  /**
26
56
  * make certain fields required
27
57
  * @see https://stackoverflow.com/a/69328045/14809536
28
58
  */
29
- export type WithRequired<T, K extends keyof T> = T & {
30
- [P in K]-?: T[P];
31
- };
59
+ export type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
@@ -0,0 +1,31 @@
1
+ {
2
+ "compilerOptions": {
3
+ "incremental": true,
4
+ "allowJs": false,
5
+ "allowSyntheticDefaultImports": true,
6
+ "alwaysStrict": true,
7
+ "esModuleInterop": true,
8
+ "forceConsistentCasingInFileNames": true,
9
+ "isolatedModules": true,
10
+ "module": "commonjs",
11
+ "moduleResolution": "node",
12
+ "noEmit": true,
13
+ "noImplicitAny": true,
14
+ "listEmittedFiles": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "resolveJsonModule": true,
18
+ "skipLibCheck": true,
19
+ "strict": true,
20
+ "target": "es2019",
21
+ "lib": [
22
+ "es2020"
23
+ ],
24
+ "noFallthroughCasesInSwitch": true,
25
+ "outDir": "dist",
26
+ "declaration": true
27
+ },
28
+ "include": [
29
+ "src"
30
+ ]
31
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./tsconfig.without-specs",
3
+ "compilerOptions": {
4
+ "module": "commonjs",
5
+ "outDir": "dist/cjs"
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./tsconfig.without-specs",
3
+ "compilerOptions": {
4
+ "module": "es6",
5
+ "outDir": "dist/esm"
6
+ }
7
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "./tsconfig",
3
+ "exclude": [
4
+ "**/*.spec.ts"
5
+ ]
6
+ }
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bash
2
+ # spell-checker: ignore pipefail
3
+ set -euo pipefail; if [ -n "${DEBUG-}" ]; then set -x; fi
4
+
5
+ project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
6
+
7
+ cd "$project_dir"
8
+
9
+ # packages that must be built before other ones (in this order)
10
+ # trying to be graceful about the template being copied and packages
11
+ # getting removed without requiring updating the world
12
+ build_order=()
13
+ test -d ./packages/utils/ && build_order+=("@openstax/ts-utils")
14
+ test -d ./packages/lambda/ && build_order+=("@project/lambdas")
15
+
16
+ # all other packages
17
+ all_packages=$(yarn --silent workspaces info | node -e "process.stdout.write(Object.keys(JSON.parse(require('fs').readFileSync('/dev/stdin').toString())).join(' '))")
18
+ remaining_packages=$(echo "${build_order[@]}" "$all_packages" | tr ' ' '\n' | sort | uniq -u)
19
+
20
+ # build em
21
+ for package in "${build_order[@]}" $remaining_packages; do
22
+ echo "building $package ..."
23
+ yarn workspace "$package" build:clean
24
+ done
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ # spell-checker: ignore pipefail
3
+ set -euo pipefail; if [ -n "${DEBUG-}" ]; then set -x; fi
4
+
5
+ project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
6
+
7
+ cd "$project_dir"
8
+
9
+ yarn build
10
+ yarn workspaces run ci
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ # spell-checker: ignore pipefail SIGINT
3
+ set -euo pipefail; if [ -n "${DEBUG-}" ]; then set -x; fi
4
+
5
+ project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
6
+
7
+ cd "$project_dir"
8
+
9
+ source $(yarn -s ts-utils which init-constants-script)
10
+
11
+ ./scripts/build.bash
12
+
13
+ all_packages=$(yarn --silent workspaces info | node -e "process.stdout.write(Object.keys(JSON.parse(require('fs').readFileSync('/dev/stdin').toString())).join(' '))")
14
+
15
+ function start() {
16
+ # looping instead of running `yarn workspaces run start`
17
+ # so that each command can be sent to background
18
+ for package in $all_packages; do
19
+ echo "checking startup commands in $package ..."
20
+ yarn --silent workspace "$package" run data:seed 2>&1 || true
21
+ echo "starting $package ..."
22
+ yarn workspace "$package" start &
23
+ done
24
+
25
+ # wait for ctrl-c
26
+ read -r -d '' _ </dev/tty
27
+ }
28
+
29
+ (trap 'kill 0' SIGINT EXIT; start)
@@ -1,89 +0,0 @@
1
- export type AssertionFailed = string | Error | (() => never) | undefined;
2
- export declare const doThrow: (failed: AssertionFailed) => never;
3
- /**
4
- * Asserts that the given value is true.
5
- *
6
- * @param x The value to assert.
7
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
8
- * to provide some value for this for traceability. Passing an Error instead of a string
9
- * makes the stack trace more useful and allows you to handle assertion failures differently.
10
- * @example const definitelyTrue = assertTrue(randomThing, new Error('thing was not true'));
11
- * @returns the value that was asserted
12
- */
13
- export declare const assertTrue: <X>(x: X, failed?: AssertionFailed) => X & true;
14
- /**
15
- * Asserts that the given value is false.
16
- *
17
- * @param x The value to assert.
18
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
19
- * to provide some value for this for traceability. Passing an Error instead of a string
20
- * makes the stack trace more useful and allows you to handle assertion failures differently.
21
- * @example const definitelyFalse = assertFalse(randomThing, new Error('thing was not false'));
22
- * @returns the value that was asserted
23
- */
24
- export declare const assertFalse: <X>(x: X, failed?: AssertionFailed) => X & false;
25
- /**
26
- * Asserts that the given value is defined.
27
- *
28
- * @param x The value to assert.
29
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
30
- * to provide some value for this for traceability. Passing an Error instead of a string
31
- * makes the stack trace more useful and allows you to handle assertion failures differently.
32
- * @example const definitelyDefined = assertDefined(randomThing, new Error('thing was undefined'));
33
- * @returns the value that was asserted, with a type that excludes undefined
34
- */
35
- export declare const assertDefined: <X>(x: X, failed?: AssertionFailed) => Exclude<X, undefined>;
36
- /**
37
- * Asserts that the given value is a string.
38
- *
39
- * @param x The value to assert.
40
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
41
- * to provide some value for this for traceability. Passing an Error instead of a string
42
- * makes the stack trace more useful and allows you to handle assertion failures differently.
43
- * @example const definitelyAString = assertString(randomThing, new Error('thing is not a string'));
44
- * @returns the value that was asserted
45
- */
46
- export declare const assertString: <X>(x: X, failed?: AssertionFailed) => string;
47
- /**
48
- * Asserts that the given value is not `NaN`. Does not assert that the value is a number.
49
- *
50
- * @param thing The value to assert.
51
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
52
- * to provide some value for this for traceability. Passing an Error instead of a string
53
- * makes the stack trace more useful and allows you to handle assertion failures differently.
54
- * @example const definitelyNotNotANumber = assertNotNaN(randomThing, new Error('thing was NaN'));
55
- * @returns the value that was asserted
56
- */
57
- export declare const assertNotNaN: <T>(thing: T, failed?: AssertionFailed) => T;
58
- /**
59
- * @deprecated use assertNotNaN instead
60
- */
61
- export declare const notNaN: <T>(thing: T, failed?: AssertionFailed) => T;
62
- /**
63
- * Asserts that the first argument is an instance of the second.
64
- *
65
- * @param thing The value to assert.
66
- * @param constructable The class to check against.
67
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
68
- * to provide some value for this for traceability. Passing an Error instead of a string
69
- * makes the stack trace more useful and allows you to handle assertion failures differently.
70
- * @example const definitelySyntaxError = assertInstanceOf(error, SyntaxError, new Error('argument was not a SyntaxError'));
71
- * @returns the value that was asserted
72
- */
73
- export declare const assertInstanceOf: <T>(thing: any, constructable: Function & {
74
- new (...args: any[]): T;
75
- }, failed?: AssertionFailed) => T;
76
- /**
77
- * Asserts that the error in the first argument is an instance of the error given as the
78
- * second argument
79
- *
80
- * @param thing The value to assert.
81
- * @param constructable The error class to check against.
82
- * @example const definitelySyntaxError = assertInstanceOf(error, SyntaxError);
83
- * @returns the value that was asserted
84
- * @throws the original error if the check fails
85
- * @see assertInstanceOf
86
- */
87
- export declare const assertErrorInstanceOf: <T extends Error>(thing: unknown, constructable: Function & {
88
- new (...args: any[]): T;
89
- }) => T;
@@ -1,157 +0,0 @@
1
- "use strict";
2
- /*
3
- * all of these assertions take either a string, throw function, or nothing
4
- * for the second argument. its STRONGLY encouraged to provide some error
5
- * or message that explains the reason for the assertion
6
- *
7
- * eg:
8
- * assertDefined(user, new UnauthorizedException())
9
- * assertDefined(thing.otherThing, 'otherThing should be guaranteed to exist, but is missing')
10
- *
11
- * passing an Error instead of a string makes the first element of the resulting
12
- * stack trace more useful, and allows you to use specific error types
13
- * that might be handled differently.
14
- */
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.assertErrorInstanceOf = exports.assertInstanceOf = exports.notNaN = exports.assertNotNaN = exports.assertString = exports.assertDefined = exports.assertFalse = exports.assertTrue = exports.doThrow = void 0;
17
- const doThrow = (failed) => {
18
- if (typeof failed === 'string') {
19
- throw new Error(failed);
20
- }
21
- if (failed instanceof Error) {
22
- throw failed;
23
- }
24
- if (!failed) {
25
- throw new Error();
26
- }
27
- return failed();
28
- };
29
- exports.doThrow = doThrow;
30
- /**
31
- * Asserts that the given value is true.
32
- *
33
- * @param x The value to assert.
34
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
35
- * to provide some value for this for traceability. Passing an Error instead of a string
36
- * makes the stack trace more useful and allows you to handle assertion failures differently.
37
- * @example const definitelyTrue = assertTrue(randomThing, new Error('thing was not true'));
38
- * @returns the value that was asserted
39
- */
40
- const assertTrue = (x, failed) => {
41
- if (typeof x !== 'boolean' || x !== true) {
42
- return (0, exports.doThrow)(failed);
43
- }
44
- return x;
45
- };
46
- exports.assertTrue = assertTrue;
47
- /**
48
- * Asserts that the given value is false.
49
- *
50
- * @param x The value to assert.
51
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
52
- * to provide some value for this for traceability. Passing an Error instead of a string
53
- * makes the stack trace more useful and allows you to handle assertion failures differently.
54
- * @example const definitelyFalse = assertFalse(randomThing, new Error('thing was not false'));
55
- * @returns the value that was asserted
56
- */
57
- const assertFalse = (x, failed) => {
58
- if (typeof x !== 'boolean' || x !== false) {
59
- return (0, exports.doThrow)(failed);
60
- }
61
- return x;
62
- };
63
- exports.assertFalse = assertFalse;
64
- /**
65
- * Asserts that the given value is defined.
66
- *
67
- * @param x The value to assert.
68
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
69
- * to provide some value for this for traceability. Passing an Error instead of a string
70
- * makes the stack trace more useful and allows you to handle assertion failures differently.
71
- * @example const definitelyDefined = assertDefined(randomThing, new Error('thing was undefined'));
72
- * @returns the value that was asserted, with a type that excludes undefined
73
- */
74
- const assertDefined = (x, failed) => {
75
- if (x === undefined) {
76
- return (0, exports.doThrow)(failed);
77
- }
78
- return x;
79
- };
80
- exports.assertDefined = assertDefined;
81
- /**
82
- * Asserts that the given value is a string.
83
- *
84
- * @param x The value to assert.
85
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
86
- * to provide some value for this for traceability. Passing an Error instead of a string
87
- * makes the stack trace more useful and allows you to handle assertion failures differently.
88
- * @example const definitelyAString = assertString(randomThing, new Error('thing is not a string'));
89
- * @returns the value that was asserted
90
- */
91
- const assertString = (x, failed) => {
92
- if (typeof x !== 'string') {
93
- return (0, exports.doThrow)(failed);
94
- }
95
- return x;
96
- };
97
- exports.assertString = assertString;
98
- /**
99
- * Asserts that the given value is not `NaN`. Does not assert that the value is a number.
100
- *
101
- * @param thing The value to assert.
102
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
103
- * to provide some value for this for traceability. Passing an Error instead of a string
104
- * makes the stack trace more useful and allows you to handle assertion failures differently.
105
- * @example const definitelyNotNotANumber = assertNotNaN(randomThing, new Error('thing was NaN'));
106
- * @returns the value that was asserted
107
- */
108
- const assertNotNaN = (thing, failed) => {
109
- if (typeof thing === 'number' && isNaN(thing)) {
110
- return (0, exports.doThrow)(failed);
111
- }
112
- return thing;
113
- };
114
- exports.assertNotNaN = assertNotNaN;
115
- /**
116
- * @deprecated use assertNotNaN instead
117
- */
118
- exports.notNaN = exports.assertNotNaN;
119
- /**
120
- * Asserts that the first argument is an instance of the second.
121
- *
122
- * @param thing The value to assert.
123
- * @param constructable The class to check against.
124
- * @param failed The error to throw if the assertion fails. It is STRONGLY encouraged
125
- * to provide some value for this for traceability. Passing an Error instead of a string
126
- * makes the stack trace more useful and allows you to handle assertion failures differently.
127
- * @example const definitelySyntaxError = assertInstanceOf(error, SyntaxError, new Error('argument was not a SyntaxError'));
128
- * @returns the value that was asserted
129
- */
130
- const assertInstanceOf = (thing, constructable, failed) => {
131
- if (thing instanceof constructable) {
132
- return thing;
133
- }
134
- return (0, exports.doThrow)(failed);
135
- };
136
- exports.assertInstanceOf = assertInstanceOf;
137
- /**
138
- * Asserts that the error in the first argument is an instance of the error given as the
139
- * second argument
140
- *
141
- * @param thing The value to assert.
142
- * @param constructable The error class to check against.
143
- * @example const definitelySyntaxError = assertInstanceOf(error, SyntaxError);
144
- * @returns the value that was asserted
145
- * @throws the original error if the check fails
146
- * @see assertInstanceOf
147
- */
148
- const assertErrorInstanceOf = (thing, constructable) => {
149
- if (thing instanceof Error) {
150
- return (0, exports.assertInstanceOf)(thing, constructable, thing);
151
- }
152
- else {
153
- // this separate branch prevents an unknown non-Error thing from being passed to the assertion as an AssertionFailed
154
- throw new Error(`assertErrorInstanceOf received non-Error argument of type "${typeof thing}" and string representation "${thing}"`);
155
- }
156
- };
157
- exports.assertErrorInstanceOf = assertErrorInstanceOf;
@@ -1,5 +0,0 @@
1
- import { SSM } from '@aws-sdk/client-ssm';
2
- /**
3
- * A memoized instance of the AWS SSM client.
4
- */
5
- export declare const ssmService: () => SSM;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ssmService = void 0;
4
- const client_ssm_1 = require("@aws-sdk/client-ssm");
5
- const __1 = require("..");
6
- /**
7
- * A memoized instance of the AWS SSM client.
8
- */
9
- exports.ssmService = (0, __1.once)(() => new client_ssm_1.SSM({ apiVersion: '2012-08-10' }));
@@ -1,10 +0,0 @@
1
- import { ConfigValueProvider } from '.';
2
- /**
3
- * Returns a value from the AWS Parameter Store.
4
- *
5
- * @param parameterName the name of the parameter; can be a literal name (string) or can itself
6
- * be accessed via another parameter by giving a configuration value provider.
7
- * @example const someValue = resolveConfig(awsParameterConfig('some-parameter-name'));
8
- * @returns the configuration value provider for the value
9
- */
10
- export declare const awsParameterConfig: (parameterName: ConfigValueProvider<string>) => ConfigValueProvider<string>;