@openstax/ts-utils 1.33.1 → 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 -132
- 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 -125
- 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/bin/.init-params-script.bash.swp +0 -0
- /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
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/* cspell:ignore presigner */
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { CopyObjectCommand, GetObjectCommand, HeadObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
|
4
|
-
import { createPresignedPost } from '@aws-sdk/s3-presigned-post';
|
|
5
|
-
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
6
|
-
import { v4 as uuid } from 'uuid';
|
|
7
|
-
import { once } from '../..';
|
|
8
|
-
import { assertDefined } from '../../assertions';
|
|
9
|
-
import { resolveConfigValue } from '../../config';
|
|
10
|
-
import { ifDefined } from '../../guards';
|
|
11
|
-
export const s3FileServer = (initializer) => (configProvider) => {
|
|
12
|
-
const config = configProvider[ifDefined(initializer.configSpace, 'deployed')];
|
|
13
|
-
const bucketName = once(() => resolveConfigValue(config.bucketName));
|
|
14
|
-
const bucketRegion = once(() => resolveConfigValue(config.bucketRegion));
|
|
15
|
-
const publicViewerDomain = once(() => 'publicViewerDomain' in config && config.publicViewerDomain
|
|
16
|
-
? resolveConfigValue(config.publicViewerDomain)
|
|
17
|
-
: undefined);
|
|
18
|
-
const s3Service = once(async () => {
|
|
19
|
-
var _a, _b;
|
|
20
|
-
const args = { apiVersion: '2012-08-10', region: await bucketRegion() };
|
|
21
|
-
return (_b = (_a = initializer.getS3Client) === null || _a === void 0 ? void 0 : _a.call(initializer, args)) !== null && _b !== void 0 ? _b : new S3Client(args);
|
|
22
|
-
});
|
|
23
|
-
/*
|
|
24
|
-
* https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html
|
|
25
|
-
*/
|
|
26
|
-
const getSignedViewerUrl = async (source) => {
|
|
27
|
-
const bucket = (await bucketName());
|
|
28
|
-
const command = new GetObjectCommand({ Bucket: bucket, Key: source.path });
|
|
29
|
-
return getSignedUrl(await s3Service(), command, {
|
|
30
|
-
expiresIn: 3600, // 1 hour
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
const getPublicViewerUrl = async (source) => {
|
|
34
|
-
const host = assertDefined(await publicViewerDomain(), new Error(`Tried to get public viewer URL for ${source.path} but no publicViewerDomain configured`));
|
|
35
|
-
return `https://${host}/${source.path}`;
|
|
36
|
-
};
|
|
37
|
-
const getFileContent = async (source) => {
|
|
38
|
-
const bucket = await bucketName();
|
|
39
|
-
const command = new GetObjectCommand({ Bucket: bucket, Key: source.path });
|
|
40
|
-
const response = await (await s3Service()).send(command);
|
|
41
|
-
return Buffer.from(await assertDefined(response.Body, new Error('Invalid Response from s3')).transformToByteArray());
|
|
42
|
-
};
|
|
43
|
-
const putFileContent = async (source, content) => {
|
|
44
|
-
const bucket = await bucketName();
|
|
45
|
-
const command = new PutObjectCommand({
|
|
46
|
-
Bucket: bucket,
|
|
47
|
-
Key: source.path,
|
|
48
|
-
Body: content,
|
|
49
|
-
ContentType: source.mimeType,
|
|
50
|
-
});
|
|
51
|
-
await (await s3Service()).send(command);
|
|
52
|
-
return source;
|
|
53
|
-
};
|
|
54
|
-
/*
|
|
55
|
-
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_s3_presigned_post.html
|
|
56
|
-
* https://docs.aws.amazon.com/AmazonS3/latest/userguide/HTTPPOSTExamples.html
|
|
57
|
-
* https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html
|
|
58
|
-
*/
|
|
59
|
-
const getSignedFileUploadConfig = async () => {
|
|
60
|
-
const prefix = 'uploads/' + uuid();
|
|
61
|
-
const bucket = (await bucketName());
|
|
62
|
-
const Conditions = [
|
|
63
|
-
{ acl: 'private' },
|
|
64
|
-
{ bucket },
|
|
65
|
-
['starts-with', '$key', prefix],
|
|
66
|
-
['starts-with', '$Content-Type', ''],
|
|
67
|
-
];
|
|
68
|
-
const defaultFields = {
|
|
69
|
-
acl: 'private',
|
|
70
|
-
};
|
|
71
|
-
const { url, fields } = await createPresignedPost(await s3Service(), {
|
|
72
|
-
Bucket: bucket,
|
|
73
|
-
Key: prefix + '/${filename}',
|
|
74
|
-
Conditions,
|
|
75
|
-
Fields: defaultFields,
|
|
76
|
-
Expires: 3600, // 1 hour
|
|
77
|
-
});
|
|
78
|
-
return {
|
|
79
|
-
url, payload: fields
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
const copyFileTo = async (source, destinationPath) => {
|
|
83
|
-
const bucket = (await bucketName());
|
|
84
|
-
const destinationPathWithoutLeadingSlash = destinationPath.replace(/^\//, '');
|
|
85
|
-
const command = new CopyObjectCommand({
|
|
86
|
-
Bucket: bucket,
|
|
87
|
-
Key: destinationPathWithoutLeadingSlash,
|
|
88
|
-
CopySource: path.join(bucket, source.path),
|
|
89
|
-
});
|
|
90
|
-
await (await s3Service()).send(command);
|
|
91
|
-
return {
|
|
92
|
-
...source,
|
|
93
|
-
path: destinationPathWithoutLeadingSlash
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
|
-
const copyFileToDirectory = async (source, destination) => {
|
|
97
|
-
const destinationPath = path.join(destination, source.label);
|
|
98
|
-
return copyFileTo(source, destinationPath);
|
|
99
|
-
};
|
|
100
|
-
const isTemporaryUpload = (source) => {
|
|
101
|
-
return source.path.indexOf('uploads/') === 0;
|
|
102
|
-
};
|
|
103
|
-
const getFileChecksum = async (source) => {
|
|
104
|
-
const bucket = (await bucketName());
|
|
105
|
-
const command = new HeadObjectCommand({ Bucket: bucket, Key: source.path });
|
|
106
|
-
const response = await (await s3Service()).send(command);
|
|
107
|
-
return assertDefined(response.ETag);
|
|
108
|
-
};
|
|
109
|
-
const filesEqual = async (sourceA, sourceB) => {
|
|
110
|
-
const [aSum, bSum] = await Promise.all([getFileChecksum(sourceA), getFileChecksum(sourceB)]);
|
|
111
|
-
return aSum === bSum;
|
|
112
|
-
};
|
|
113
|
-
return {
|
|
114
|
-
getFileContent,
|
|
115
|
-
putFileContent,
|
|
116
|
-
getSignedViewerUrl,
|
|
117
|
-
getPublicViewerUrl,
|
|
118
|
-
getSignedFileUploadConfig,
|
|
119
|
-
copyFileTo,
|
|
120
|
-
copyFileToDirectory,
|
|
121
|
-
isTemporaryUpload,
|
|
122
|
-
getFileChecksum,
|
|
123
|
-
filesEqual,
|
|
124
|
-
};
|
|
125
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { JWK } from 'node-jose';
|
|
2
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
-
import type { JsonCompatibleStruct } from '../../routing';
|
|
4
|
-
type Config = {
|
|
5
|
-
alg: string;
|
|
6
|
-
expiresIn: string;
|
|
7
|
-
iss: string;
|
|
8
|
-
privateKey: string;
|
|
9
|
-
};
|
|
10
|
-
interface Initializer<C> {
|
|
11
|
-
configSpace?: C;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Creates a class that can sign launch params
|
|
15
|
-
*/
|
|
16
|
-
export declare const createLaunchSigner: <C extends string = "launch">({ configSpace }: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => {
|
|
17
|
-
jwks: () => Promise<{
|
|
18
|
-
keys: JWK.RawKey[];
|
|
19
|
-
}>;
|
|
20
|
-
sign: (data: JsonCompatibleStruct, subject: string, maxExp?: number | null) => Promise<string>;
|
|
21
|
-
};
|
|
22
|
-
export type LaunchSigner = ReturnType<ReturnType<typeof createLaunchSigner>>;
|
|
23
|
-
export {};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import jwt from 'jsonwebtoken';
|
|
2
|
-
import ms from 'ms';
|
|
3
|
-
import { JWK } from 'node-jose';
|
|
4
|
-
import { once } from '../..';
|
|
5
|
-
import { resolveConfigValue } from '../../config';
|
|
6
|
-
import { ifDefined } from '../../guards';
|
|
7
|
-
const SUPPORTED_ALGORITHMS = [
|
|
8
|
-
'RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'PS256', 'PS384', 'PS512'
|
|
9
|
-
];
|
|
10
|
-
const assertAlg = (alg) => {
|
|
11
|
-
if ((SUPPORTED_ALGORITHMS).includes(alg)) {
|
|
12
|
-
return alg;
|
|
13
|
-
}
|
|
14
|
-
throw new Error(`"${alg}" is not a valid algorithm`);
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Creates a class that can sign launch params
|
|
18
|
-
*/
|
|
19
|
-
export const createLaunchSigner = ({ configSpace }) => (configProvider) => {
|
|
20
|
-
const config = configProvider[ifDefined(configSpace, 'launch')];
|
|
21
|
-
const getAlg = once(async () => assertAlg(await resolveConfigValue(config.alg)));
|
|
22
|
-
const getExpiresIn = once(() => resolveConfigValue(config.expiresIn));
|
|
23
|
-
const getIss = once(() => resolveConfigValue(config.iss));
|
|
24
|
-
const getPrivateKey = once(() => resolveConfigValue(config.privateKey));
|
|
25
|
-
const getKeyStore = once(async () => {
|
|
26
|
-
const keystore = JWK.createKeyStore();
|
|
27
|
-
await keystore.add(await getPrivateKey(), 'pem');
|
|
28
|
-
return keystore;
|
|
29
|
-
});
|
|
30
|
-
const jwks = async () => (await getKeyStore()).toJSON(false);
|
|
31
|
-
const getExpiresInWithMax = async (maxExp) => {
|
|
32
|
-
const expiresIn = await getExpiresIn();
|
|
33
|
-
// The ms library used by jsonwebtoken can handle a value in seconds as well as a string like '1d'
|
|
34
|
-
if (!maxExp) {
|
|
35
|
-
return expiresIn;
|
|
36
|
-
}
|
|
37
|
-
// Convert both values to seconds for comparison
|
|
38
|
-
const expiresInSeconds = Math.floor(ms(expiresIn) / 1000);
|
|
39
|
-
const maxExpSeconds = maxExp - Math.floor(Date.now() / 1000);
|
|
40
|
-
return Math.min(expiresInSeconds, maxExpSeconds);
|
|
41
|
-
};
|
|
42
|
-
const sign = async (data, subject, maxExp) => {
|
|
43
|
-
const alg = await getAlg();
|
|
44
|
-
// expiresIn can be a number of seconds or a string like '1h' or '1d'
|
|
45
|
-
const expiresIn = await getExpiresInWithMax(maxExp);
|
|
46
|
-
const iss = await getIss();
|
|
47
|
-
const header = { alg, iss };
|
|
48
|
-
return jwt.sign(data, await getPrivateKey(), { algorithm: alg, expiresIn, header, issuer: iss, subject });
|
|
49
|
-
};
|
|
50
|
-
return { jwks, sign };
|
|
51
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import jwt from 'jsonwebtoken';
|
|
2
|
-
import type { JWK } from 'node-jose';
|
|
3
|
-
import { ConfigProviderForConfig } from '../../config';
|
|
4
|
-
type Config = {
|
|
5
|
-
trustedDomain: string;
|
|
6
|
-
bypassSignatureVerification: string;
|
|
7
|
-
};
|
|
8
|
-
interface Initializer<C> {
|
|
9
|
-
configSpace?: C;
|
|
10
|
-
fetcher?: (uri: string) => Promise<{
|
|
11
|
-
keys: JWK.RawKey[];
|
|
12
|
-
}>;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Creates a class that can verify launch params
|
|
16
|
-
*/
|
|
17
|
-
export declare const createLaunchVerifier: <C extends string = "launch">({ configSpace, fetcher }: Initializer<C>) => (configProvider: { [_key in C]: ConfigProviderForConfig<Config>; }) => (_services: {}, getDefaultToken?: () => string) => {
|
|
18
|
-
verify: <T = undefined>(...args: T extends undefined ? ([] | [string]) : ([(input: any) => T] | [string, (input: any) => T])) => Promise<T extends undefined ? jwt.JwtPayload : T>;
|
|
19
|
-
};
|
|
20
|
-
export type LaunchVerifier = ReturnType<ReturnType<ReturnType<typeof createLaunchVerifier>>>;
|
|
21
|
-
export {};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import jwt, { TokenExpiredError } from 'jsonwebtoken';
|
|
2
|
-
import { JwksClient } from 'jwks-rsa';
|
|
3
|
-
import { memoize } from '../..';
|
|
4
|
-
import { resolveConfigValue } from '../../config';
|
|
5
|
-
import { InvalidRequestError, SessionExpiredError } from '../../errors';
|
|
6
|
-
import { ifDefined } from '../../guards';
|
|
7
|
-
import { once } from '../../misc/helpers';
|
|
8
|
-
/**
|
|
9
|
-
* Creates a class that can verify launch params
|
|
10
|
-
*/
|
|
11
|
-
export const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvider) => {
|
|
12
|
-
const config = configProvider[ifDefined(configSpace, 'launch')];
|
|
13
|
-
const getTrustedDomain = once(() => resolveConfigValue(config.trustedDomain));
|
|
14
|
-
const getBypassSignatureVerification = once(async () => (await resolveConfigValue(config.bypassSignatureVerification)) === 'true');
|
|
15
|
-
const getJwksClient = memoize((jwksUri) => new JwksClient({ fetcher, jwksUri }));
|
|
16
|
-
const getJwksKey = memoize(async (jwksUri, kid) => {
|
|
17
|
-
const client = getJwksClient(jwksUri);
|
|
18
|
-
const key = await client.getSigningKey(kid);
|
|
19
|
-
return key.getPublicKey();
|
|
20
|
-
});
|
|
21
|
-
const getKey = async (header, callback) => {
|
|
22
|
-
// The JWT spec allows iss in the header as a copy of the iss claim, but we require it
|
|
23
|
-
if (!header.iss) {
|
|
24
|
-
return callback(new Error('JWT header missing iss claim'));
|
|
25
|
-
}
|
|
26
|
-
const { iss, kid } = header;
|
|
27
|
-
try {
|
|
28
|
-
const jwksUrl = new URL('/.well-known/jwks.json', iss);
|
|
29
|
-
const launchDomain = jwksUrl.hostname;
|
|
30
|
-
const trustedDomain = await getTrustedDomain();
|
|
31
|
-
if (launchDomain !== trustedDomain && !launchDomain.endsWith(`.${trustedDomain}`)) {
|
|
32
|
-
return callback(new Error(`Untrusted launch domain: "${launchDomain}"`));
|
|
33
|
-
}
|
|
34
|
-
callback(null, await getJwksKey(jwksUrl.toString(), kid));
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
callback(error);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
return (_services, getDefaultToken) => {
|
|
41
|
-
const verify = async (...args) => {
|
|
42
|
-
const [inputToken, validator] = args.length === 1
|
|
43
|
-
? typeof args[0] === 'string'
|
|
44
|
-
? [args[0], undefined]
|
|
45
|
-
: [undefined, args[0]]
|
|
46
|
-
: args;
|
|
47
|
-
const bypassSignatureVerification = await getBypassSignatureVerification();
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
const token = inputToken !== null && inputToken !== void 0 ? inputToken : getDefaultToken === null || getDefaultToken === void 0 ? void 0 : getDefaultToken();
|
|
50
|
-
if (!token) {
|
|
51
|
-
return reject(new InvalidRequestError('Missing token for launch verification'));
|
|
52
|
-
}
|
|
53
|
-
const resolvePayload = (err, payload) => {
|
|
54
|
-
if (err && err instanceof TokenExpiredError) {
|
|
55
|
-
reject(new SessionExpiredError());
|
|
56
|
-
}
|
|
57
|
-
else if (err) {
|
|
58
|
-
reject(err);
|
|
59
|
-
}
|
|
60
|
-
else if (typeof payload !== 'object' || payload === null) {
|
|
61
|
-
reject(new Error('received JWT token with unexpected non-JSON payload'));
|
|
62
|
-
}
|
|
63
|
-
else if (!payload.sub) {
|
|
64
|
-
reject(new Error('JWT payload missing sub claim'));
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
// we are migrating away from json encoding all the parameters into the `sub` claim
|
|
68
|
-
// and into using separate claims for each parameter. in transition, we check if the sub
|
|
69
|
-
// is json and return it if it is. this is still a breaking change when using this
|
|
70
|
-
// utility because applications no longer need to independently json parse the result
|
|
71
|
-
// starting now.
|
|
72
|
-
const parsed = payload;
|
|
73
|
-
try {
|
|
74
|
-
const jsonSubContents = JSON.parse(payload.sub);
|
|
75
|
-
Object.assign(parsed, jsonSubContents);
|
|
76
|
-
}
|
|
77
|
-
catch (e) { } // eslint-disable-line no-empty
|
|
78
|
-
// conditional return types are annoying
|
|
79
|
-
resolve((validator ? validator(parsed) : parsed));
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
if (bypassSignatureVerification) {
|
|
83
|
-
return resolvePayload(null, jwt.decode(token));
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
return jwt.verify(token, getKey, {}, resolvePayload);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
return { verify };
|
|
91
|
-
};
|
|
92
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The log level
|
|
3
|
-
*/
|
|
4
|
-
export var Level;
|
|
5
|
-
(function (Level) {
|
|
6
|
-
Level["Info"] = "info";
|
|
7
|
-
Level["Warn"] = "warn";
|
|
8
|
-
Level["Error"] = "error";
|
|
9
|
-
})(Level || (Level = {}));
|
|
10
|
-
/**
|
|
11
|
-
* Creates a logger that logs events using the given driver and context provider.
|
|
12
|
-
*
|
|
13
|
-
* @param driver the driver that logs events
|
|
14
|
-
* @param getParentContext a provider that returns the context to use for this logger
|
|
15
|
-
* (the context is returned when messages are logged with the logger)
|
|
16
|
-
* @returns a Logger
|
|
17
|
-
*/
|
|
18
|
-
export const createCoreLogger = (driver, getParentContext) => {
|
|
19
|
-
const context = {};
|
|
20
|
-
const getContext = () => ({ ...getParentContext === null || getParentContext === void 0 ? void 0 : getParentContext(), ...context });
|
|
21
|
-
return {
|
|
22
|
-
logEvent: (level, event) => driver(level, { ...event, context: getContext() }),
|
|
23
|
-
log: (message, level = Level.Info) => driver(level, { message, context: getContext() }),
|
|
24
|
-
setContext: (obj) => { Object.assign(context, obj); },
|
|
25
|
-
createSubContext: () => createCoreLogger(driver, getContext),
|
|
26
|
-
};
|
|
27
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { User } from '../authProvider';
|
|
2
|
-
import { EagerXapiStatement, UXapiStatement, XapiStatement } from '.';
|
|
3
|
-
export declare const addStatementDefaultFields: (statement: (Pick<XapiStatement, "object" | "verb" | "context" | "result"> & {
|
|
4
|
-
id?: string;
|
|
5
|
-
}) | UXapiStatement, user: User) => EagerXapiStatement;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import formatISO from 'date-fns/formatISO';
|
|
2
|
-
import { v4 as uuid } from 'uuid';
|
|
3
|
-
export const addStatementDefaultFields = (statement, user) => ({
|
|
4
|
-
id: uuid(),
|
|
5
|
-
actor: {
|
|
6
|
-
account: {
|
|
7
|
-
homePage: 'https://openstax.org',
|
|
8
|
-
name: user.uuid,
|
|
9
|
-
},
|
|
10
|
-
objectType: 'Agent',
|
|
11
|
-
},
|
|
12
|
-
timestamp: formatISO(new Date()),
|
|
13
|
-
...statement,
|
|
14
|
-
});
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { LrsGateway, UXapiStatement } from '.';
|
|
2
|
-
export type ActivityState = {
|
|
3
|
-
attempts: number;
|
|
4
|
-
completedAttempts: number;
|
|
5
|
-
currentAttempt?: UXapiStatement;
|
|
6
|
-
currentAttemptCompleted?: UXapiStatement;
|
|
7
|
-
currentAttemptStatements: UXapiStatement[];
|
|
8
|
-
mostRecentAttemptWithCompleted?: UXapiStatement;
|
|
9
|
-
mostRecentAttemptWithCompletedCompleted?: UXapiStatement;
|
|
10
|
-
};
|
|
11
|
-
export declare const matchAttempt: (statement: UXapiStatement) => boolean;
|
|
12
|
-
export declare const matchAttemptCompleted: (attempt: UXapiStatement) => (statement: UXapiStatement) => boolean;
|
|
13
|
-
export declare const resolveAttempts: (statements: UXapiStatement[], options?: {
|
|
14
|
-
activityIRI?: string;
|
|
15
|
-
parentActivityAttempt?: string;
|
|
16
|
-
}) => UXapiStatement[];
|
|
17
|
-
export declare const resolveCompletedForAttempt: (statements: UXapiStatement[], attempt: UXapiStatement, activityIRI?: string) => UXapiStatement | undefined;
|
|
18
|
-
export declare const oldestStatement: (statements: UXapiStatement[]) => UXapiStatement | undefined;
|
|
19
|
-
export declare const mostRecentStatement: (statements: UXapiStatement[]) => UXapiStatement | undefined;
|
|
20
|
-
export declare const resolveAttemptInfo: (statements: UXapiStatement[], options?: {
|
|
21
|
-
activityIRI?: string;
|
|
22
|
-
currentAttempt?: string;
|
|
23
|
-
parentActivityAttempt?: string;
|
|
24
|
-
currentPreference?: "latest" | "oldest";
|
|
25
|
-
}) => ActivityState;
|
|
26
|
-
export declare const loadStatementsForActivityAndFirstChildren: (gateway: LrsGateway, activityIRI: string, options?: {
|
|
27
|
-
anyUser?: boolean;
|
|
28
|
-
attempt?: string;
|
|
29
|
-
ensureSync?: boolean;
|
|
30
|
-
user?: string;
|
|
31
|
-
}) => Promise<import(".").XapiStatement[]>;
|
|
32
|
-
export declare const loadActivityAttemptInfo: (gateway: LrsGateway, activityIRI: string, options?: {
|
|
33
|
-
currentAttempt?: string;
|
|
34
|
-
parentActivityAttempt?: string;
|
|
35
|
-
ensureSync?: boolean;
|
|
36
|
-
}) => Promise<ActivityState>;
|
|
37
|
-
export declare const createStatement: (verb: UXapiStatement["verb"], activity: {
|
|
38
|
-
iri: string;
|
|
39
|
-
type: string;
|
|
40
|
-
name: string;
|
|
41
|
-
extensions?: {
|
|
42
|
-
[key: string]: string;
|
|
43
|
-
};
|
|
44
|
-
}, attempt: string, parentActivityIRI?: string) => Pick<UXapiStatement, "object" | "verb" | "context">;
|
|
45
|
-
export declare const createAttemptStatement: (activity: {
|
|
46
|
-
iri: string;
|
|
47
|
-
type: string;
|
|
48
|
-
name: string;
|
|
49
|
-
extensions?: {
|
|
50
|
-
[key: string]: string;
|
|
51
|
-
};
|
|
52
|
-
}, parentActivity?: {
|
|
53
|
-
iri?: string;
|
|
54
|
-
attempt?: string;
|
|
55
|
-
}) => Pick<UXapiStatement, "object" | "verb" | "context">;
|
|
56
|
-
export declare const putAttemptStatement: (gateway: LrsGateway, activity: {
|
|
57
|
-
iri: string;
|
|
58
|
-
type: string;
|
|
59
|
-
name: string;
|
|
60
|
-
extensions?: {
|
|
61
|
-
[key: string]: string;
|
|
62
|
-
};
|
|
63
|
-
}, parentActivity?: {
|
|
64
|
-
iri?: string;
|
|
65
|
-
attempt?: string;
|
|
66
|
-
}) => Promise<import(".").EagerXapiStatement>;
|
|
67
|
-
export declare const createAttemptActivityStatement: (attemptStatement: UXapiStatement, verb: UXapiStatement["verb"], result?: UXapiStatement["result"]) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
68
|
-
export declare const putAttemptActivityStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, verb: UXapiStatement["verb"], result?: UXapiStatement["result"]) => Promise<import(".").EagerXapiStatement>;
|
|
69
|
-
export declare const createCompletedStatement: (attemptStatement: UXapiStatement, result?: UXapiStatement["result"]) => Pick<UXapiStatement, "object" | "verb" | "context" | "result">;
|
|
70
|
-
export declare const putCompletedStatement: (gateway: LrsGateway, attemptStatement: UXapiStatement, result: UXapiStatement["result"]) => Promise<import(".").EagerXapiStatement>;
|