@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.
- package/.cfnlintrc +2 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/workflows/ci.yml +36 -0
- package/.github/workflows/lint.yml +55 -0
- package/.nvmrc +1 -0
- package/.syncignore +4 -0
- package/.syncpackrc +18 -0
- package/CONTRIBUTING.md +96 -0
- package/LICENSE +661 -0
- package/Procfile +1 -0
- package/README.md +62 -90
- package/app.json +23 -0
- package/cspell.json +32 -0
- package/deploy/constants.env +21 -0
- package/deploy/deploy.bash +157 -0
- package/deploy/deployment-alt-region.cfn.yml +70 -0
- package/deploy/deployment.cfn.yml +650 -0
- package/deploy/destroy-deployment.bash +23 -0
- package/deploy/shared.cfn.yml +94 -0
- package/docs/lambda-build.md +35 -0
- package/package.json +12 -228
- package/packages/frontend/README.md +46 -0
- package/packages/frontend/package.json +101 -0
- package/packages/frontend/public/favicon.ico +0 -0
- package/packages/frontend/public/index.html +107 -0
- package/packages/frontend/public/maintenance.html +59 -0
- package/packages/frontend/public/manifest.json +15 -0
- package/packages/frontend/public/robots.txt +3 -0
- package/packages/frontend/script/make-certificate.bash +49 -0
- package/packages/frontend/script/server/cli.js +11 -0
- package/packages/frontend/script/server/index.js +47 -0
- package/packages/frontend/script/start.bash +22 -0
- package/packages/frontend/script/trust-localhost.bash +7 -0
- package/packages/frontend/src/auth/authProvider.ts +10 -0
- package/packages/frontend/src/auth/useAuth.ts +33 -0
- package/packages/frontend/src/components/Pagination.tsx +26 -0
- package/packages/frontend/src/configProvider/index.ts +53 -0
- package/packages/frontend/src/configProvider/use.ts +41 -0
- package/packages/frontend/src/core/context/services.spec.tsx +39 -0
- package/packages/frontend/src/core/context/services.tsx +16 -0
- package/packages/frontend/src/core/index.spec.ts +7 -0
- package/packages/frontend/src/core/index.ts +20 -0
- package/packages/frontend/src/core/services.tsx +14 -0
- package/packages/frontend/src/core/types.ts +3 -0
- package/packages/frontend/src/example/api.ts +28 -0
- package/packages/frontend/src/example/components/Layout.tsx +23 -0
- package/packages/frontend/src/example/screens/Home.spec.tsx +68 -0
- package/packages/frontend/src/example/screens/Home.tsx +78 -0
- package/packages/frontend/src/example/screens/ThingList.spec.tsx +60 -0
- package/packages/frontend/src/example/screens/ThingList.tsx +75 -0
- package/packages/frontend/src/example/screens/ThingView.spec.tsx +71 -0
- package/packages/frontend/src/example/screens/ThingView.tsx +47 -0
- package/packages/frontend/src/example/screens/index.ts +9 -0
- package/packages/frontend/src/index.css +159 -0
- package/packages/frontend/src/index.tsx +67 -0
- package/packages/frontend/src/react-app-env.d.ts +1 -0
- package/packages/frontend/src/routing/components/RouteLink.spec.tsx +55 -0
- package/packages/frontend/src/routing/components/RouteLink.tsx +35 -0
- package/packages/frontend/src/routing/middleware.ts +6 -0
- package/packages/frontend/src/routing/useQuery.ts +14 -0
- package/packages/frontend/src/setupProxy.js +19 -0
- package/packages/frontend/src/setupTests.ts +9 -0
- package/packages/frontend/src/tests/testServices.tsx +23 -0
- package/packages/frontend/tsconfig.json +27 -0
- package/packages/lambda/.eslintrc.js +64 -0
- package/packages/lambda/jest-global-setup.js +3 -0
- package/packages/lambda/jest-setup-after-env.js +1 -0
- package/packages/lambda/jest.config.js +31 -0
- package/packages/lambda/jest.resolver.js +17 -0
- package/packages/lambda/package.json +68 -0
- package/packages/lambda/script/build.bash +19 -0
- package/packages/lambda/script/bundle-functions.bash +10 -0
- package/packages/lambda/script/lambdaLocalProxy.js +16 -0
- package/packages/lambda/script/lambdaLocalProxy.spec.ts +147 -0
- package/packages/lambda/script/utils/getRouteData.ts +7 -0
- package/packages/lambda/script/utils/routeDataLoader.js +8 -0
- package/packages/lambda/script/utils/routeDataLoader.spec.ts +8 -0
- package/packages/lambda/src/functions/serviceApi/core/index.ts +7 -0
- package/packages/lambda/src/functions/serviceApi/core/request.spec.ts +38 -0
- package/packages/lambda/src/functions/serviceApi/core/request.ts +42 -0
- package/packages/lambda/src/functions/serviceApi/core/routes.spec.ts +7 -0
- package/packages/lambda/src/functions/serviceApi/core/routes.ts +10 -0
- package/packages/lambda/src/functions/serviceApi/core/services.ts +9 -0
- package/packages/lambda/src/functions/serviceApi/core/types.ts +13 -0
- package/packages/lambda/src/functions/serviceApi/entry/lambda/https-xray.ts +4 -0
- package/packages/lambda/src/functions/serviceApi/entry/lambda/index.spec.ts +48 -0
- package/packages/lambda/src/functions/serviceApi/entry/lambda/index.ts +58 -0
- package/packages/lambda/src/functions/serviceApi/entry/lambda/services.ts +36 -0
- package/packages/lambda/src/functions/serviceApi/entry/local.ts +71 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentSearchMiddleware.spec.ts +16 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentSearchMiddleware.ts +41 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentStoreMiddleware.spec.ts +78 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/example/documentStoreMiddleware.ts +70 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/example/routes.spec.ts +306 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/example/routes.ts +176 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/index.spec.ts +263 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/index.ts +134 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/authMiddleware.spec.ts +23 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/authMiddleware.ts +32 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/configMiddleware.spec.ts +10 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/configMiddleware.ts +7 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/frontendFileServerMiddleware.spec.ts +13 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/frontendFileServerMiddleware.ts +23 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/paginationMiddleware.spec.ts +9 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/paginationMiddleware.ts +9 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/searchMiddleware.spec.ts +12 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/searchMiddleware.ts +21 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/userRoleValidatorMiddleware.spec.ts +21 -0
- package/packages/lambda/src/functions/serviceApi/versions/v0/middleware/userRoleValidatorMiddleware.ts +18 -0
- package/packages/lambda/tsconfig.json +30 -0
- package/packages/lambda/webpack.config.js +97 -0
- package/packages/utils/.eslintrc.js +64 -0
- package/packages/utils/README.md +118 -0
- package/packages/utils/jest-global-setup.js +3 -0
- package/packages/utils/jest.config.js +25 -0
- package/packages/utils/jest.resolver.js +17 -0
- package/packages/utils/package.json +238 -0
- package/packages/utils/src/assertions/index.spec.ts +126 -0
- package/{dist/esm/assertions/index.js → packages/utils/src/assertions/index.ts} +64 -49
- package/packages/utils/src/aws/ssmService.ts +7 -0
- package/packages/utils/src/config/awsParameterConfig.ts +24 -0
- package/packages/utils/src/config/envConfig.ts +58 -0
- package/packages/utils/src/config/index.spec.ts +165 -0
- package/{dist/esm/config/index.d.ts → packages/utils/src/config/index.ts} +29 -13
- package/packages/utils/src/config/lambdaParameterConfig.ts +49 -0
- package/{dist/esm/config/replaceConfig.js → packages/utils/src/config/replaceConfig.ts} +16 -6
- package/packages/utils/src/config/resolveConfigValue.ts +10 -0
- package/packages/utils/src/errors/index.spec.ts +35 -0
- package/{dist/esm/errors/index.js → packages/utils/src/errors/index.ts} +57 -41
- package/packages/utils/src/fetch/fetchStatusRetry.spec.ts +197 -0
- package/packages/utils/src/fetch/fetchStatusRetry.ts +33 -0
- package/packages/utils/src/fetch/index.spec.ts +34 -0
- package/packages/utils/src/fetch/index.ts +87 -0
- package/packages/utils/src/guards/index.spec.ts +58 -0
- package/{dist/esm/guards/index.d.ts → packages/utils/src/guards/index.ts} +10 -7
- package/packages/utils/src/index.spec.ts +471 -0
- package/packages/utils/src/middleware/apiErrorHandler.spec.ts +65 -0
- package/packages/utils/src/middleware/apiErrorHandler.ts +67 -0
- package/packages/utils/src/middleware/apiSlowResponseMiddleware.spec.ts +184 -0
- package/packages/utils/src/middleware/apiSlowResponseMiddleware.ts +71 -0
- package/packages/utils/src/middleware/index.spec.ts +99 -0
- package/{dist/cjs/middleware/index.d.ts → packages/utils/src/middleware/index.ts} +53 -5
- package/packages/utils/src/middleware/lambdaCorsResponseMiddleware.spec.ts +103 -0
- package/packages/utils/src/middleware/lambdaCorsResponseMiddleware.ts +52 -0
- package/packages/utils/src/middleware/throwNotFoundMiddleware.spec.ts +20 -0
- package/packages/utils/src/middleware/throwNotFoundMiddleware.ts +11 -0
- package/packages/utils/src/misc/hashValue.ts +18 -0
- package/packages/utils/src/misc/helpers.ts +259 -0
- package/packages/utils/src/misc/merge.ts +48 -0
- package/{dist/esm/misc/partitionSequence.js → packages/utils/src/misc/partitionSequence.ts} +23 -15
- package/packages/utils/src/pagination/index.spec.ts +150 -0
- package/packages/utils/src/pagination/index.ts +117 -0
- package/{dist/esm/routing/helpers.js → packages/utils/src/routing/helpers.ts} +42 -30
- package/packages/utils/src/routing/index.spec.ts +553 -0
- package/packages/utils/src/routing/index.ts +424 -0
- package/packages/utils/src/routing/validators/zod.spec.ts +16 -0
- package/packages/utils/src/routing/validators/zod.ts +14 -0
- package/packages/utils/src/services/accountsGateway/README.md +3 -0
- package/packages/utils/src/services/accountsGateway/index.spec.ts +518 -0
- package/packages/utils/src/services/accountsGateway/index.ts +251 -0
- package/packages/utils/src/services/apiGateway/README.md +93 -0
- package/packages/utils/src/services/apiGateway/index.spec.ts +254 -0
- package/packages/utils/src/services/apiGateway/index.ts +189 -0
- package/packages/utils/src/services/authProvider/README.md +21 -0
- package/packages/utils/src/services/authProvider/browser.spec.ts +391 -0
- package/packages/utils/src/services/authProvider/browser.ts +209 -0
- package/packages/utils/src/services/authProvider/decryption.spec.ts +337 -0
- package/packages/utils/src/services/authProvider/decryption.ts +98 -0
- package/packages/utils/src/services/authProvider/index.ts +93 -0
- package/packages/utils/src/services/authProvider/stub.spec.ts +29 -0
- package/packages/utils/src/services/authProvider/subrequest.spec.ts +105 -0
- package/packages/utils/src/services/authProvider/subrequest.ts +68 -0
- package/packages/utils/src/services/authProvider/utils/decryptAndVerify.spec.ts +128 -0
- package/packages/utils/src/services/authProvider/utils/decryptAndVerify.ts +106 -0
- package/packages/utils/src/services/authProvider/utils/embeddedAuthProvider.spec.ts +26 -0
- package/packages/utils/src/services/authProvider/utils/embeddedAuthProvider.ts +57 -0
- package/packages/utils/src/services/authProvider/utils/userRoleValidator.spec.ts +135 -0
- package/packages/utils/src/services/authProvider/utils/userRoleValidator.ts +49 -0
- package/packages/utils/src/services/authProvider/utils/userSubrequest.spec.ts +26 -0
- package/packages/utils/src/services/authProvider/utils/userSubrequest.ts +10 -0
- package/packages/utils/src/services/documentStore/dynamoEncoding.ts +57 -0
- package/packages/utils/src/services/documentStore/fileSystemAssert.spec.ts +43 -0
- package/packages/utils/src/services/documentStore/fileSystemAssert.ts +10 -0
- package/{dist/cjs/services/documentStore/index.d.ts → packages/utils/src/services/documentStore/index.ts} +8 -8
- package/packages/utils/src/services/documentStore/unversioned/README.md +13 -0
- package/packages/utils/src/services/documentStore/unversioned/dynamodb.spec.ts +859 -0
- package/packages/utils/src/services/documentStore/unversioned/dynamodb.ts +243 -0
- package/packages/utils/src/services/documentStore/unversioned/file-system.spec.ts +629 -0
- package/packages/utils/src/services/documentStore/unversioned/file-system.ts +194 -0
- package/{dist/cjs/services/documentStore/unversioned/index.d.ts → packages/utils/src/services/documentStore/unversioned/index.ts} +2 -0
- package/packages/utils/src/services/documentStore/versioned/README.md +13 -0
- package/packages/utils/src/services/documentStore/versioned/dynamodb.spec.ts +376 -0
- package/packages/utils/src/services/documentStore/versioned/dynamodb.ts +167 -0
- package/packages/utils/src/services/documentStore/versioned/file-system.spec.ts +262 -0
- package/packages/utils/src/services/documentStore/versioned/file-system.ts +90 -0
- package/packages/utils/src/services/documentStore/versioned/index.ts +25 -0
- package/packages/utils/src/services/exercisesGateway/README.md +5 -0
- package/packages/utils/src/services/exercisesGateway/index.spec.ts +326 -0
- package/packages/utils/src/services/exercisesGateway/index.ts +163 -0
- package/packages/utils/src/services/fileServer/index.spec.ts +88 -0
- package/packages/utils/src/services/fileServer/index.ts +43 -0
- package/packages/utils/src/services/fileServer/localFileServer.spec.ts +182 -0
- package/packages/utils/src/services/fileServer/localFileServer.ts +159 -0
- package/packages/utils/src/services/fileServer/s3FileServer.spec.ts +266 -0
- package/packages/utils/src/services/fileServer/s3FileServer.ts +155 -0
- package/packages/utils/src/services/launchParams/index.spec.ts +366 -0
- package/packages/utils/src/services/launchParams/signer.ts +73 -0
- package/packages/utils/src/services/launchParams/verifier.ts +120 -0
- package/packages/utils/src/services/logger/console.spec.ts +29 -0
- package/{dist/esm/services/logger/console.js → packages/utils/src/services/logger/console.ts} +5 -2
- package/packages/utils/src/services/logger/index.spec.ts +65 -0
- package/{dist/esm/services/logger/index.d.ts → packages/utils/src/services/logger/index.ts} +23 -9
- package/packages/utils/src/services/lrsGateway/README.md +5 -0
- package/packages/utils/src/services/lrsGateway/addStatementDefaultFields.ts +22 -0
- package/packages/utils/src/services/lrsGateway/attempt-utils.spec.ts +847 -0
- package/packages/utils/src/services/lrsGateway/attempt-utils.ts +358 -0
- package/packages/utils/src/services/lrsGateway/file-system.spec.ts +363 -0
- package/packages/utils/src/services/lrsGateway/file-system.ts +165 -0
- package/packages/utils/src/services/lrsGateway/index.spec.ts +194 -0
- package/packages/utils/src/services/lrsGateway/index.ts +257 -0
- package/packages/utils/src/services/lrsGateway/xapiUtils.spec.ts +887 -0
- package/packages/utils/src/services/lrsGateway/xapiUtils.ts +262 -0
- package/packages/utils/src/services/postgresConnection/index.spec.ts +170 -0
- package/packages/utils/src/services/postgresConnection/index.ts +84 -0
- package/packages/utils/src/services/searchProvider/README.md +3 -0
- package/packages/utils/src/services/searchProvider/index.ts +59 -0
- package/packages/utils/src/services/searchProvider/memorySearchTheBadWay.spec.ts +526 -0
- package/packages/utils/src/services/searchProvider/memorySearchTheBadWay.ts +223 -0
- package/packages/utils/src/services/searchProvider/openSearch.spec.ts +926 -0
- package/packages/utils/src/services/searchProvider/openSearch.ts +195 -0
- package/{dist/esm/types.d.ts → packages/utils/src/types.ts} +34 -6
- package/packages/utils/tsconfig.json +31 -0
- package/packages/utils/tsconfig.without-specs.cjs.json +7 -0
- package/packages/utils/tsconfig.without-specs.esm.json +7 -0
- package/packages/utils/tsconfig.without-specs.json +6 -0
- package/scripts/build.bash +24 -0
- package/scripts/ci.bash +10 -0
- package/scripts/start.bash +29 -0
- package/dist/cjs/assertions/index.d.ts +0 -89
- package/dist/cjs/assertions/index.js +0 -157
- package/dist/cjs/aws/ssmService.d.ts +0 -5
- package/dist/cjs/aws/ssmService.js +0 -9
- package/dist/cjs/config/awsParameterConfig.d.ts +0 -10
- package/dist/cjs/config/awsParameterConfig.js +0 -26
- package/dist/cjs/config/envConfig.d.ts +0 -24
- package/dist/cjs/config/envConfig.js +0 -57
- package/dist/cjs/config/index.d.ts +0 -48
- package/dist/cjs/config/index.js +0 -35
- package/dist/cjs/config/lambdaParameterConfig.d.ts +0 -12
- package/dist/cjs/config/lambdaParameterConfig.js +0 -45
- package/dist/cjs/config/replaceConfig.d.ts +0 -14
- package/dist/cjs/config/replaceConfig.js +0 -22
- package/dist/cjs/config/resolveConfigValue.d.ts +0 -5
- package/dist/cjs/config/resolveConfigValue.js +0 -12
- package/dist/cjs/errors/index.d.ts +0 -88
- package/dist/cjs/errors/index.js +0 -123
- package/dist/cjs/fetch/fetchStatusRetry.d.ts +0 -8
- package/dist/cjs/fetch/fetchStatusRetry.js +0 -27
- package/dist/cjs/fetch/index.d.ts +0 -64
- package/dist/cjs/fetch/index.js +0 -55
- package/dist/cjs/guards/index.d.ts +0 -38
- package/dist/cjs/guards/index.js +0 -44
- package/dist/cjs/index.js +0 -20
- package/dist/cjs/middleware/apiErrorHandler.d.ts +0 -24
- package/dist/cjs/middleware/apiErrorHandler.js +0 -42
- package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +0 -23
- package/dist/cjs/middleware/apiSlowResponseMiddleware.js +0 -54
- package/dist/cjs/middleware/index.js +0 -48
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +0 -44
- package/dist/cjs/middleware/throwNotFoundMiddleware.d.ts +0 -4
- package/dist/cjs/middleware/throwNotFoundMiddleware.js +0 -14
- package/dist/cjs/misc/hashValue.d.ts +0 -10
- package/dist/cjs/misc/hashValue.js +0 -17
- package/dist/cjs/misc/helpers.d.ts +0 -124
- package/dist/cjs/misc/helpers.js +0 -214
- package/dist/cjs/misc/merge.d.ts +0 -21
- package/dist/cjs/misc/merge.js +0 -45
- package/dist/cjs/misc/partitionSequence.d.ts +0 -35
- package/dist/cjs/misc/partitionSequence.js +0 -55
- package/dist/cjs/pagination/index.d.ts +0 -91
- package/dist/cjs/pagination/index.js +0 -83
- package/dist/cjs/routing/helpers.d.ts +0 -57
- package/dist/cjs/routing/helpers.js +0 -90
- package/dist/cjs/routing/index.d.ts +0 -290
- package/dist/cjs/routing/index.js +0 -295
- package/dist/cjs/routing/validators/zod.d.ts +0 -4
- package/dist/cjs/routing/validators/zod.js +0 -14
- package/dist/cjs/services/accountsGateway/index.d.ts +0 -92
- package/dist/cjs/services/accountsGateway/index.js +0 -138
- package/dist/cjs/services/apiGateway/index.d.ts +0 -68
- package/dist/cjs/services/apiGateway/index.js +0 -118
- package/dist/cjs/services/authProvider/browser.d.ts +0 -40
- package/dist/cjs/services/authProvider/browser.js +0 -155
- package/dist/cjs/services/authProvider/decryption.d.ts +0 -19
- package/dist/cjs/services/authProvider/decryption.js +0 -73
- package/dist/cjs/services/authProvider/index.d.ts +0 -63
- package/dist/cjs/services/authProvider/index.js +0 -34
- package/dist/cjs/services/authProvider/subrequest.d.ts +0 -13
- package/dist/cjs/services/authProvider/subrequest.js +0 -49
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +0 -28
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +0 -91
- package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
- package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +0 -47
- package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +0 -13
- package/dist/cjs/services/authProvider/utils/userRoleValidator.js +0 -37
- package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +0 -3
- package/dist/cjs/services/authProvider/utils/userSubrequest.js +0 -13
- package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +0 -10
- package/dist/cjs/services/documentStore/dynamoEncoding.js +0 -52
- package/dist/cjs/services/documentStore/fileSystemAssert.d.ts +0 -1
- package/dist/cjs/services/documentStore/fileSystemAssert.js +0 -14
- package/dist/cjs/services/documentStore/index.js +0 -2
- package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +0 -31
- package/dist/cjs/services/documentStore/unversioned/dynamodb.js +0 -233
- package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +0 -32
- package/dist/cjs/services/documentStore/unversioned/file-system.js +0 -214
- package/dist/cjs/services/documentStore/unversioned/index.js +0 -2
- package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +0 -25
- package/dist/cjs/services/documentStore/versioned/dynamodb.js +0 -143
- package/dist/cjs/services/documentStore/versioned/file-system.d.ts +0 -25
- package/dist/cjs/services/documentStore/versioned/file-system.js +0 -73
- package/dist/cjs/services/documentStore/versioned/index.d.ts +0 -17
- package/dist/cjs/services/documentStore/versioned/index.js +0 -2
- package/dist/cjs/services/exercisesGateway/index.d.ts +0 -67
- package/dist/cjs/services/exercisesGateway/index.js +0 -107
- package/dist/cjs/services/fileServer/index.d.ts +0 -30
- package/dist/cjs/services/fileServer/index.js +0 -19
- package/dist/cjs/services/fileServer/localFileServer.d.ts +0 -13
- package/dist/cjs/services/fileServer/localFileServer.js +0 -132
- package/dist/cjs/services/fileServer/s3FileServer.d.ts +0 -14
- package/dist/cjs/services/fileServer/s3FileServer.js +0 -131
- package/dist/cjs/services/launchParams/index.js +0 -7
- package/dist/cjs/services/launchParams/signer.d.ts +0 -23
- package/dist/cjs/services/launchParams/signer.js +0 -58
- package/dist/cjs/services/launchParams/verifier.d.ts +0 -21
- package/dist/cjs/services/launchParams/verifier.js +0 -129
- package/dist/cjs/services/logger/console.d.ts +0 -4
- package/dist/cjs/services/logger/console.js +0 -12
- package/dist/cjs/services/logger/index.d.ts +0 -39
- package/dist/cjs/services/logger/index.js +0 -31
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.js +0 -21
- package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +0 -70
- package/dist/cjs/services/lrsGateway/attempt-utils.js +0 -258
- package/dist/cjs/services/lrsGateway/file-system.d.ts +0 -15
- package/dist/cjs/services/lrsGateway/file-system.js +0 -150
- package/dist/cjs/services/lrsGateway/index.d.ts +0 -122
- package/dist/cjs/services/lrsGateway/index.js +0 -148
- package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +0 -68
- package/dist/cjs/services/lrsGateway/xapiUtils.js +0 -109
- package/dist/cjs/services/postgresConnection/index.d.ts +0 -28
- package/dist/cjs/services/postgresConnection/index.js +0 -65
- package/dist/cjs/services/searchProvider/index.d.ts +0 -67
- package/dist/cjs/services/searchProvider/index.js +0 -2
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +0 -20
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +0 -191
- package/dist/cjs/services/searchProvider/openSearch.d.ts +0 -28
- package/dist/cjs/services/searchProvider/openSearch.js +0 -154
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +0 -1
- package/dist/cjs/types.d.ts +0 -31
- package/dist/cjs/types.js +0 -2
- package/dist/esm/assertions/index.d.ts +0 -89
- package/dist/esm/aws/ssmService.d.ts +0 -5
- package/dist/esm/aws/ssmService.js +0 -6
- package/dist/esm/config/awsParameterConfig.d.ts +0 -10
- package/dist/esm/config/awsParameterConfig.js +0 -22
- package/dist/esm/config/envConfig.d.ts +0 -24
- package/dist/esm/config/envConfig.js +0 -53
- package/dist/esm/config/index.js +0 -17
- package/dist/esm/config/lambdaParameterConfig.d.ts +0 -12
- package/dist/esm/config/lambdaParameterConfig.js +0 -38
- package/dist/esm/config/replaceConfig.d.ts +0 -14
- package/dist/esm/config/resolveConfigValue.d.ts +0 -5
- package/dist/esm/config/resolveConfigValue.js +0 -8
- package/dist/esm/errors/index.d.ts +0 -88
- package/dist/esm/fetch/fetchStatusRetry.d.ts +0 -8
- package/dist/esm/fetch/fetchStatusRetry.js +0 -23
- package/dist/esm/fetch/index.d.ts +0 -64
- package/dist/esm/fetch/index.js +0 -46
- package/dist/esm/guards/index.js +0 -36
- package/dist/esm/index.d.ts +0 -4
- package/dist/esm/index.js +0 -4
- package/dist/esm/middleware/apiErrorHandler.d.ts +0 -24
- package/dist/esm/middleware/apiErrorHandler.js +0 -38
- package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +0 -23
- package/dist/esm/middleware/apiSlowResponseMiddleware.js +0 -50
- package/dist/esm/middleware/index.d.ts +0 -47
- package/dist/esm/middleware/index.js +0 -44
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +0 -20
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +0 -40
- package/dist/esm/middleware/throwNotFoundMiddleware.d.ts +0 -4
- package/dist/esm/middleware/throwNotFoundMiddleware.js +0 -10
- package/dist/esm/misc/hashValue.d.ts +0 -10
- package/dist/esm/misc/hashValue.js +0 -13
- package/dist/esm/misc/helpers.d.ts +0 -124
- package/dist/esm/misc/helpers.js +0 -199
- package/dist/esm/misc/merge.d.ts +0 -21
- package/dist/esm/misc/merge.js +0 -40
- package/dist/esm/misc/partitionSequence.d.ts +0 -35
- package/dist/esm/pagination/index.d.ts +0 -91
- package/dist/esm/pagination/index.js +0 -77
- package/dist/esm/routing/helpers.d.ts +0 -57
- package/dist/esm/routing/index.d.ts +0 -290
- package/dist/esm/routing/index.js +0 -246
- package/dist/esm/routing/validators/zod.d.ts +0 -4
- package/dist/esm/routing/validators/zod.js +0 -10
- package/dist/esm/services/accountsGateway/index.d.ts +0 -92
- package/dist/esm/services/accountsGateway/index.js +0 -131
- package/dist/esm/services/apiGateway/index.d.ts +0 -68
- package/dist/esm/services/apiGateway/index.js +0 -77
- package/dist/esm/services/authProvider/browser.d.ts +0 -40
- package/dist/esm/services/authProvider/browser.js +0 -151
- package/dist/esm/services/authProvider/decryption.d.ts +0 -19
- package/dist/esm/services/authProvider/decryption.js +0 -69
- package/dist/esm/services/authProvider/index.d.ts +0 -63
- package/dist/esm/services/authProvider/index.js +0 -26
- package/dist/esm/services/authProvider/subrequest.d.ts +0 -13
- package/dist/esm/services/authProvider/subrequest.js +0 -45
- package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +0 -28
- package/dist/esm/services/authProvider/utils/decryptAndVerify.js +0 -85
- package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +0 -26
- package/dist/esm/services/authProvider/utils/embeddedAuthProvider.js +0 -40
- package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +0 -13
- package/dist/esm/services/authProvider/utils/userRoleValidator.js +0 -33
- package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +0 -3
- package/dist/esm/services/authProvider/utils/userSubrequest.js +0 -6
- package/dist/esm/services/documentStore/dynamoEncoding.d.ts +0 -10
- package/dist/esm/services/documentStore/dynamoEncoding.js +0 -45
- package/dist/esm/services/documentStore/fileSystemAssert.d.ts +0 -1
- package/dist/esm/services/documentStore/fileSystemAssert.js +0 -10
- package/dist/esm/services/documentStore/index.d.ts +0 -14
- package/dist/esm/services/documentStore/index.js +0 -1
- package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +0 -31
- package/dist/esm/services/documentStore/unversioned/dynamodb.js +0 -226
- package/dist/esm/services/documentStore/unversioned/file-system.d.ts +0 -32
- package/dist/esm/services/documentStore/unversioned/file-system.js +0 -174
- package/dist/esm/services/documentStore/unversioned/index.d.ts +0 -2
- package/dist/esm/services/documentStore/unversioned/index.js +0 -1
- package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +0 -25
- package/dist/esm/services/documentStore/versioned/dynamodb.js +0 -139
- package/dist/esm/services/documentStore/versioned/file-system.d.ts +0 -25
- package/dist/esm/services/documentStore/versioned/file-system.js +0 -69
- package/dist/esm/services/documentStore/versioned/index.d.ts +0 -17
- package/dist/esm/services/documentStore/versioned/index.js +0 -1
- package/dist/esm/services/exercisesGateway/index.d.ts +0 -67
- package/dist/esm/services/exercisesGateway/index.js +0 -70
- package/dist/esm/services/fileServer/index.d.ts +0 -30
- package/dist/esm/services/fileServer/index.js +0 -13
- package/dist/esm/services/fileServer/localFileServer.d.ts +0 -13
- package/dist/esm/services/fileServer/localFileServer.js +0 -125
- package/dist/esm/services/fileServer/s3FileServer.d.ts +0 -14
- package/dist/esm/services/fileServer/s3FileServer.js +0 -124
- package/dist/esm/services/launchParams/index.d.ts +0 -2
- package/dist/esm/services/launchParams/index.js +0 -2
- package/dist/esm/services/launchParams/signer.d.ts +0 -23
- package/dist/esm/services/launchParams/signer.js +0 -51
- package/dist/esm/services/launchParams/verifier.d.ts +0 -21
- package/dist/esm/services/launchParams/verifier.js +0 -92
- package/dist/esm/services/logger/console.d.ts +0 -4
- package/dist/esm/services/logger/index.js +0 -27
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +0 -5
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.js +0 -14
- package/dist/esm/services/lrsGateway/attempt-utils.d.ts +0 -70
- package/dist/esm/services/lrsGateway/attempt-utils.js +0 -236
- package/dist/esm/services/lrsGateway/file-system.d.ts +0 -15
- package/dist/esm/services/lrsGateway/file-system.js +0 -110
- package/dist/esm/services/lrsGateway/index.d.ts +0 -122
- package/dist/esm/services/lrsGateway/index.js +0 -111
- package/dist/esm/services/lrsGateway/xapiUtils.d.ts +0 -68
- package/dist/esm/services/lrsGateway/xapiUtils.js +0 -99
- package/dist/esm/services/postgresConnection/index.d.ts +0 -28
- package/dist/esm/services/postgresConnection/index.js +0 -58
- package/dist/esm/services/searchProvider/index.d.ts +0 -67
- package/dist/esm/services/searchProvider/index.js +0 -1
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +0 -20
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +0 -187
- package/dist/esm/services/searchProvider/openSearch.d.ts +0 -28
- package/dist/esm/services/searchProvider/openSearch.js +0 -150
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +0 -1
- package/dist/esm/types.js +0 -1
- /package/{script → packages/utils/script}/bin/copy-from-template.bash +0 -0
- /package/{script → packages/utils/script}/bin/delete-stack.bash +0 -0
- /package/{script → packages/utils/script}/bin/deploy.bash +0 -0
- /package/{script → packages/utils/script}/bin/destroy-deployment.bash +0 -0
- /package/{script → packages/utils/script}/bin/empty-bucket.bash +0 -0
- /package/{script → packages/utils/script}/bin/get-arg.bash +0 -0
- /package/{script → packages/utils/script}/bin/get-deployed-environments.bash +0 -0
- /package/{script → packages/utils/script}/bin/get-env-param.bash +0 -0
- /package/{script → packages/utils/script}/bin/get-kwarg.bash +0 -0
- /package/{script → packages/utils/script}/bin/get-stack-param.bash +0 -0
- /package/{script → packages/utils/script}/bin/has-flag.bash +0 -0
- /package/{script → packages/utils/script}/bin/init-constants-script.bash +0 -0
- /package/{script → packages/utils/script}/bin/init-params-script.bash +0 -0
- /package/{script → packages/utils/script}/bin/stack-exists.bash +0 -0
- /package/{script → packages/utils/script}/bin/update-utils.bash +0 -0
- /package/{script → packages/utils/script}/bin/upload-pager-duty-endpoints.bash +0 -0
- /package/{script → packages/utils/script}/bin/upload-params.bash +0 -0
- /package/{script → packages/utils/script}/bin/which.bash +0 -0
- /package/{script → packages/utils/script}/bin-entry.bash +0 -0
- /package/{script → packages/utils/script}/build.bash +0 -0
- /package/{dist/cjs/index.d.ts → packages/utils/src/index.ts} +0 -0
- /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]
|
|
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]
|
|
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)
|
|
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,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
|
package/scripts/ci.bash
ADDED
|
@@ -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,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>;
|