@openstax/ts-utils 1.43.2 → 1.44.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/dist/cjs/aws/ssmService.js +2 -2
- package/dist/cjs/config/awsParameterConfig.d.ts +1 -1
- package/dist/cjs/config/awsParameterConfig.js +7 -7
- package/dist/cjs/config/envConfig.d.ts +1 -1
- package/dist/cjs/config/envConfig.js +2 -2
- package/dist/cjs/config/index.d.ts +5 -5
- package/dist/cjs/config/index.js +5 -5
- package/dist/cjs/config/lambdaParameterConfig.d.ts +1 -1
- package/dist/cjs/config/lambdaParameterConfig.js +10 -10
- package/dist/cjs/config/replaceConfig.d.ts +1 -1
- package/dist/cjs/config/replaceConfig.js +3 -3
- package/dist/cjs/config/resolveConfigValue.d.ts +1 -1
- package/dist/cjs/errors/index.d.ts +1 -1
- package/dist/cjs/fetch/fetchStatusRetry.d.ts +2 -2
- package/dist/cjs/fetch/fetchStatusRetry.js +2 -2
- package/dist/cjs/fetch/index.d.ts +1 -1
- package/dist/cjs/index.d.ts +5 -4
- package/dist/cjs/index.js +5 -4
- package/dist/cjs/middleware/apiErrorHandler.d.ts +3 -3
- package/dist/cjs/middleware/apiErrorHandler.js +12 -12
- package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +3 -3
- package/dist/cjs/middleware/apiSlowResponseMiddleware.js +9 -9
- package/dist/cjs/middleware/index.d.ts +1 -1
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
- package/dist/cjs/middleware/lambdaCorsResponseMiddleware.js +5 -5
- package/dist/cjs/middleware/throwNotFoundMiddleware.js +2 -2
- package/dist/cjs/misc/helpers.d.ts +1 -1
- package/dist/cjs/misc/jwks.js +3 -3
- package/dist/cjs/misc/merge.d.ts +1 -1
- package/dist/cjs/misc/merge.js +2 -2
- package/dist/cjs/misc/timingSafeCompareStrings.d.ts +5 -0
- package/dist/cjs/misc/timingSafeCompareStrings.js +15 -0
- package/dist/cjs/pagination/index.d.ts +1 -1
- package/dist/cjs/pagination/index.js +10 -10
- package/dist/cjs/routing/helpers.d.ts +1 -1
- package/dist/cjs/routing/helpers.js +7 -7
- package/dist/cjs/routing/index.d.ts +2 -2
- package/dist/cjs/routing/index.js +6 -6
- package/dist/cjs/routing/lambdaBatchRequestHandler.d.ts +2 -2
- package/dist/cjs/routing/lambdaBatchRequestHandler.js +6 -6
- package/dist/cjs/routing/validators/zod.js +2 -2
- package/dist/cjs/services/accountsGateway/index.d.ts +5 -5
- package/dist/cjs/services/accountsGateway/index.js +18 -18
- package/dist/cjs/services/apiGateway/index.d.ts +5 -5
- package/dist/cjs/services/apiGateway/index.js +12 -12
- package/dist/cjs/services/authProvider/browser.d.ts +4 -4
- package/dist/cjs/services/authProvider/browser.js +13 -13
- package/dist/cjs/services/authProvider/decryption.d.ts +3 -3
- package/dist/cjs/services/authProvider/decryption.js +17 -17
- package/dist/cjs/services/authProvider/index.d.ts +3 -3
- package/dist/cjs/services/authProvider/index.js +7 -7
- package/dist/cjs/services/authProvider/launchToken.d.ts +4 -4
- package/dist/cjs/services/authProvider/launchToken.js +6 -6
- package/dist/cjs/services/authProvider/subrequest.d.ts +3 -3
- package/dist/cjs/services/authProvider/subrequest.js +12 -12
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
- package/dist/cjs/services/authProvider/utils/decryptAndVerify.js +3 -3
- package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +2 -2
- package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +3 -3
- package/dist/cjs/services/authProvider/utils/userRoleValidator.js +7 -7
- package/dist/cjs/services/authProvider/utils/userSubrequest.d.ts +2 -2
- package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +1 -1
- package/dist/cjs/services/documentStore/dynamoEncoding.js +2 -2
- package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +2 -2
- package/dist/cjs/services/documentStore/unversioned/dynamodb.js +30 -30
- package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +2 -2
- package/dist/cjs/services/documentStore/unversioned/file-system.js +13 -13
- package/dist/cjs/services/documentStore/unversioned/index.d.ts +1 -1
- package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +3 -3
- package/dist/cjs/services/documentStore/versioned/dynamodb.js +17 -17
- package/dist/cjs/services/documentStore/versioned/file-system.d.ts +3 -3
- package/dist/cjs/services/documentStore/versioned/file-system.js +2 -2
- package/dist/cjs/services/documentStore/versioned/index.d.ts +2 -2
- package/dist/cjs/services/exercisesGateway/index.d.ts +2 -2
- package/dist/cjs/services/exercisesGateway/index.js +14 -14
- package/dist/cjs/services/fileServer/index.js +3 -3
- package/dist/cjs/services/fileServer/localFileServer.d.ts +2 -2
- package/dist/cjs/services/fileServer/localFileServer.js +11 -11
- package/dist/cjs/services/fileServer/s3FileServer.d.ts +2 -2
- package/dist/cjs/services/fileServer/s3FileServer.js +13 -13
- package/dist/cjs/services/httpMessageVerifier/index.d.ts +1 -1
- package/dist/cjs/services/httpMessageVerifier/index.js +19 -19
- package/dist/cjs/services/launchParams/index.d.ts +2 -2
- package/dist/cjs/services/launchParams/index.js +4 -4
- package/dist/cjs/services/launchParams/signer.d.ts +2 -2
- package/dist/cjs/services/launchParams/signer.js +9 -9
- package/dist/cjs/services/launchParams/verifier.d.ts +1 -1
- package/dist/cjs/services/launchParams/verifier.js +11 -11
- package/dist/cjs/services/logger/console.d.ts +1 -1
- package/dist/cjs/services/logger/console.js +2 -2
- package/dist/cjs/services/logger/index.d.ts +1 -1
- package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
- package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +7 -7
- package/dist/cjs/services/lrsGateway/batching.d.ts +2 -2
- package/dist/cjs/services/lrsGateway/batching.js +2 -2
- package/dist/cjs/services/lrsGateway/file-system.d.ts +3 -3
- package/dist/cjs/services/lrsGateway/file-system.js +10 -10
- package/dist/cjs/services/lrsGateway/index.d.ts +5 -5
- package/dist/cjs/services/lrsGateway/index.js +23 -23
- package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +4 -4
- package/dist/cjs/services/lrsGateway/xapiUtils.js +8 -8
- package/dist/cjs/services/postgresConnection/index.d.ts +2 -2
- package/dist/cjs/services/postgresConnection/index.js +14 -14
- package/dist/cjs/services/queueProvider/local.d.ts +2 -2
- package/dist/cjs/services/queueProvider/local.js +6 -6
- package/dist/cjs/services/queueProvider/sqs.d.ts +2 -2
- package/dist/cjs/services/queueProvider/sqs.js +7 -7
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
- package/dist/cjs/services/searchProvider/memorySearchTheBadWay.js +9 -9
- package/dist/cjs/services/searchProvider/openSearch.d.ts +2 -2
- package/dist/cjs/services/searchProvider/openSearch.js +8 -8
- package/dist/cjs/services/searchProvider/streamIndexer.d.ts +2 -2
- package/dist/cjs/services/searchProvider/streamIndexer.js +3 -3
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
- package/dist/esm/aws/ssmService.js +1 -1
- package/dist/esm/config/awsParameterConfig.d.ts +1 -1
- package/dist/esm/config/awsParameterConfig.js +3 -3
- package/dist/esm/config/envConfig.d.ts +1 -1
- package/dist/esm/config/envConfig.js +1 -1
- package/dist/esm/config/index.d.ts +5 -5
- package/dist/esm/config/index.js +5 -5
- package/dist/esm/config/lambdaParameterConfig.d.ts +1 -1
- package/dist/esm/config/lambdaParameterConfig.js +4 -4
- package/dist/esm/config/replaceConfig.d.ts +1 -1
- package/dist/esm/config/replaceConfig.js +1 -1
- package/dist/esm/config/resolveConfigValue.d.ts +1 -1
- package/dist/esm/errors/index.d.ts +1 -1
- package/dist/esm/fetch/fetchStatusRetry.d.ts +2 -2
- package/dist/esm/fetch/fetchStatusRetry.js +1 -1
- package/dist/esm/fetch/index.d.ts +1 -1
- package/dist/esm/index.d.ts +5 -4
- package/dist/esm/index.js +5 -4
- package/dist/esm/middleware/apiErrorHandler.d.ts +3 -3
- package/dist/esm/middleware/apiErrorHandler.js +3 -3
- package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +3 -3
- package/dist/esm/middleware/apiSlowResponseMiddleware.js +4 -4
- package/dist/esm/middleware/index.d.ts +1 -1
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +2 -2
- package/dist/esm/middleware/lambdaCorsResponseMiddleware.js +3 -3
- package/dist/esm/middleware/throwNotFoundMiddleware.js +1 -1
- package/dist/esm/misc/helpers.d.ts +1 -1
- package/dist/esm/misc/jwks.js +1 -1
- package/dist/esm/misc/merge.d.ts +1 -1
- package/dist/esm/misc/merge.js +1 -1
- package/dist/esm/misc/timingSafeCompareStrings.d.ts +5 -0
- package/dist/esm/misc/timingSafeCompareStrings.js +11 -0
- package/dist/esm/pagination/index.d.ts +1 -1
- package/dist/esm/pagination/index.js +3 -3
- package/dist/esm/routing/helpers.d.ts +1 -1
- package/dist/esm/routing/helpers.js +3 -3
- package/dist/esm/routing/index.d.ts +2 -2
- package/dist/esm/routing/index.js +3 -3
- package/dist/esm/routing/lambdaBatchRequestHandler.d.ts +2 -2
- package/dist/esm/routing/lambdaBatchRequestHandler.js +3 -3
- package/dist/esm/routing/validators/zod.js +1 -1
- package/dist/esm/services/accountsGateway/index.d.ts +5 -5
- package/dist/esm/services/accountsGateway/index.js +5 -5
- package/dist/esm/services/apiGateway/index.d.ts +5 -5
- package/dist/esm/services/apiGateway/index.js +5 -5
- package/dist/esm/services/authProvider/browser.d.ts +4 -4
- package/dist/esm/services/authProvider/browser.js +5 -5
- package/dist/esm/services/authProvider/decryption.d.ts +3 -3
- package/dist/esm/services/authProvider/decryption.js +7 -7
- package/dist/esm/services/authProvider/index.d.ts +3 -3
- package/dist/esm/services/authProvider/index.js +2 -2
- package/dist/esm/services/authProvider/launchToken.d.ts +4 -4
- package/dist/esm/services/authProvider/launchToken.js +2 -2
- package/dist/esm/services/authProvider/subrequest.d.ts +3 -3
- package/dist/esm/services/authProvider/subrequest.js +5 -5
- package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +1 -1
- package/dist/esm/services/authProvider/utils/decryptAndVerify.js +1 -1
- package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +2 -2
- package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +3 -3
- package/dist/esm/services/authProvider/utils/userRoleValidator.js +4 -4
- package/dist/esm/services/authProvider/utils/userSubrequest.d.ts +2 -2
- package/dist/esm/services/documentStore/dynamoEncoding.d.ts +1 -1
- package/dist/esm/services/documentStore/dynamoEncoding.js +1 -1
- package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +2 -2
- package/dist/esm/services/documentStore/unversioned/dynamodb.js +5 -5
- package/dist/esm/services/documentStore/unversioned/file-system.d.ts +2 -2
- package/dist/esm/services/documentStore/unversioned/file-system.js +4 -4
- package/dist/esm/services/documentStore/unversioned/index.d.ts +1 -1
- package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +3 -3
- package/dist/esm/services/documentStore/versioned/dynamodb.js +4 -4
- package/dist/esm/services/documentStore/versioned/file-system.d.ts +3 -3
- package/dist/esm/services/documentStore/versioned/file-system.js +1 -1
- package/dist/esm/services/documentStore/versioned/index.d.ts +2 -2
- package/dist/esm/services/exercisesGateway/index.d.ts +2 -2
- package/dist/esm/services/exercisesGateway/index.js +5 -5
- package/dist/esm/services/fileServer/index.js +1 -1
- package/dist/esm/services/fileServer/localFileServer.d.ts +2 -2
- package/dist/esm/services/fileServer/localFileServer.js +4 -4
- package/dist/esm/services/fileServer/s3FileServer.d.ts +2 -2
- package/dist/esm/services/fileServer/s3FileServer.js +4 -4
- package/dist/esm/services/httpMessageVerifier/index.d.ts +1 -1
- package/dist/esm/services/httpMessageVerifier/index.js +5 -5
- package/dist/esm/services/launchParams/index.d.ts +2 -2
- package/dist/esm/services/launchParams/index.js +2 -2
- package/dist/esm/services/launchParams/signer.d.ts +2 -2
- package/dist/esm/services/launchParams/signer.js +3 -3
- package/dist/esm/services/launchParams/verifier.d.ts +1 -1
- package/dist/esm/services/launchParams/verifier.js +5 -5
- package/dist/esm/services/logger/console.d.ts +1 -1
- package/dist/esm/services/logger/console.js +1 -1
- package/dist/esm/services/logger/index.d.ts +1 -1
- package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
- package/dist/esm/services/lrsGateway/attempt-utils.d.ts +7 -7
- package/dist/esm/services/lrsGateway/batching.d.ts +2 -2
- package/dist/esm/services/lrsGateway/batching.js +1 -1
- package/dist/esm/services/lrsGateway/file-system.d.ts +3 -3
- package/dist/esm/services/lrsGateway/file-system.js +5 -5
- package/dist/esm/services/lrsGateway/index.d.ts +5 -5
- package/dist/esm/services/lrsGateway/index.js +10 -10
- package/dist/esm/services/lrsGateway/xapiUtils.d.ts +4 -4
- package/dist/esm/services/lrsGateway/xapiUtils.js +2 -2
- package/dist/esm/services/postgresConnection/index.d.ts +2 -2
- package/dist/esm/services/postgresConnection/index.js +4 -4
- package/dist/esm/services/queueProvider/local.d.ts +2 -2
- package/dist/esm/services/queueProvider/local.js +3 -3
- package/dist/esm/services/queueProvider/sqs.d.ts +2 -2
- package/dist/esm/services/queueProvider/sqs.js +3 -3
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
- package/dist/esm/services/searchProvider/memorySearchTheBadWay.js +3 -3
- package/dist/esm/services/searchProvider/openSearch.d.ts +2 -2
- package/dist/esm/services/searchProvider/openSearch.js +3 -3
- package/dist/esm/services/searchProvider/streamIndexer.d.ts +2 -2
- package/dist/esm/services/searchProvider/streamIndexer.js +1 -1
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/script/bin/.init-params-script.bash.swp +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.requestPayloadProvider = exports.unsafePayloadValidator = exports.getRequestBody = exports.getHeader = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const assertions_1 = require("../assertions");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const guards_1 = require("../guards");
|
|
7
7
|
/**
|
|
8
8
|
* Get the value of a header, case insensitive; note if there are multiple headers of the same
|
|
9
9
|
* value, this only returns the first value
|
|
@@ -26,7 +26,7 @@ exports.getHeader = getHeader;
|
|
|
26
26
|
*/
|
|
27
27
|
const getRequestBody = (request) => {
|
|
28
28
|
if ((0, exports.getHeader)(request.headers, 'content-type') !== 'application/json') {
|
|
29
|
-
throw new
|
|
29
|
+
throw new errors_1.InvalidRequestError('unknown content type: ' + (0, exports.getHeader)(request.headers, 'content-type'));
|
|
30
30
|
}
|
|
31
31
|
if (!request.body) {
|
|
32
32
|
return {};
|
|
@@ -37,7 +37,7 @@ const getRequestBody = (request) => {
|
|
|
37
37
|
catch (error) {
|
|
38
38
|
// Since the body is provided by the user, invalid JSON in the body is an invalid request
|
|
39
39
|
// We return the message which tells them why the JSON is invalid, but no backtrace
|
|
40
|
-
throw new
|
|
40
|
+
throw new errors_1.InvalidRequestError((0, assertions_1.assertErrorInstanceOf)(error, SyntaxError).message);
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
43
|
exports.getRequestBody = getRequestBody;
|
|
@@ -46,7 +46,7 @@ exports.getRequestBody = getRequestBody;
|
|
|
46
46
|
* stub validator because writing validators is annoying
|
|
47
47
|
*/
|
|
48
48
|
const unsafePayloadValidator = () => (input) => {
|
|
49
|
-
return (0,
|
|
49
|
+
return (0, guards_1.isPlainObject)(input) && Object.keys(input).length > 0;
|
|
50
50
|
};
|
|
51
51
|
exports.unsafePayloadValidator = unsafePayloadValidator;
|
|
52
52
|
/**
|
|
@@ -83,7 +83,7 @@ const requestPayloadProvider = (validator) => () => (requestServices) => {
|
|
|
83
83
|
const payload = (0, exports.getRequestBody)(requestServices.request);
|
|
84
84
|
// for more precise error messages, throw your own InvalidRequestError from your validator function
|
|
85
85
|
if (!validator(payload)) {
|
|
86
|
-
throw new
|
|
86
|
+
throw new errors_1.InvalidRequestError();
|
|
87
87
|
}
|
|
88
88
|
return { ...requestServices, payload };
|
|
89
89
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Logger } from '../services/logger
|
|
1
|
+
import { Logger } from '../services/logger';
|
|
2
2
|
/** HTTP query parameters */
|
|
3
3
|
export type QueryParams = Record<string, string | undefined | string[] | null>;
|
|
4
4
|
/**
|
|
@@ -304,4 +304,4 @@ export declare enum METHOD {
|
|
|
304
304
|
DELETE = "DELETE",
|
|
305
305
|
OPTIONS = "OPTIONS"
|
|
306
306
|
}
|
|
307
|
-
export * from './helpers
|
|
307
|
+
export * from './helpers';
|
|
@@ -42,8 +42,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
42
42
|
exports.METHOD = exports.apiHtmlResponse = exports.apiTextResponse = exports.apiJsonResponse = exports.makeGetRequestResponder = exports.renderAnyRouteUrl = exports.makeRenderRouteUrl = exports.makeCreateRoute = exports.routesList = void 0;
|
|
43
43
|
const pathToRegexp = __importStar(require("path-to-regexp"));
|
|
44
44
|
const query_string_1 = __importDefault(require("query-string"));
|
|
45
|
-
const
|
|
46
|
-
const
|
|
45
|
+
const helpers_1 = require("../misc/helpers");
|
|
46
|
+
const console_1 = require("../services/logger/console");
|
|
47
47
|
/** this utility simplifies the route type to remove stuff that is only
|
|
48
48
|
* relevant internal to the route, like the service types, keeping only
|
|
49
49
|
* the payload type which is necessary for the apiGateway
|
|
@@ -197,12 +197,12 @@ const bindRoute = (services, appBinder, pathExtractor, matcher) => (route) => {
|
|
|
197
197
|
*/
|
|
198
198
|
const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatcher, errorHandler, logExtractor, batch }) => (services, responseMiddleware) => {
|
|
199
199
|
const appBinderImpl = (app, middleware) => middleware(app, appBinder);
|
|
200
|
-
const appBinder = (0,
|
|
200
|
+
const appBinder = (0, helpers_1.memoize)(appBinderImpl);
|
|
201
201
|
const boundRoutes = routes().map(bindRoute(services, appBinder, pathExtractor, routeMatcher));
|
|
202
202
|
const boundResponseMiddleware = responseMiddleware ? responseMiddleware(services) : undefined;
|
|
203
203
|
const boundBatch = batch ? batch(services) : undefined;
|
|
204
204
|
const boundBatchResponseMiddleware = (boundBatch === null || boundBatch === void 0 ? void 0 : boundBatch.responseMiddleware) ? boundBatch.responseMiddleware(services) : undefined;
|
|
205
|
-
const appLogger = services.logger || (0,
|
|
205
|
+
const appLogger = services.logger || (0, console_1.createConsoleLogger)();
|
|
206
206
|
// *note* this opaque promise guard is less generic than i hoped so
|
|
207
207
|
// i'm leaving it here instead of the guards file.
|
|
208
208
|
//
|
|
@@ -214,7 +214,7 @@ const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatcher, er
|
|
|
214
214
|
const requestResponder = (request, logger) => {
|
|
215
215
|
const boundErrorHandler = errorHandler ? (e) => errorHandler(e, logger) : undefined;
|
|
216
216
|
try {
|
|
217
|
-
const route = (0,
|
|
217
|
+
const route = (0, helpers_1.mapFind)(boundRoutes, (route) => route(request, logger));
|
|
218
218
|
if (route) {
|
|
219
219
|
logger.log(`route matched ${route.name}`);
|
|
220
220
|
const result = route.executor();
|
|
@@ -310,4 +310,4 @@ var METHOD;
|
|
|
310
310
|
METHOD["DELETE"] = "DELETE";
|
|
311
311
|
METHOD["OPTIONS"] = "OPTIONS";
|
|
312
312
|
})(METHOD || (exports.METHOD = METHOD = {}));
|
|
313
|
-
__exportStar(require("./helpers
|
|
313
|
+
__exportStar(require("./helpers"), exports);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
2
|
-
import { Logger } from '../services/logger
|
|
3
|
-
import { ApiResponse, BatchHandler } from '
|
|
2
|
+
import { Logger } from '../services/logger';
|
|
3
|
+
import { ApiResponse, BatchHandler } from '.';
|
|
4
4
|
type Ro = Promise<ApiResponse<number, any>>;
|
|
5
5
|
export declare const lambdaBatchRequestHandler: <Sa, Ri extends APIGatewayProxyEventV2>(config: {
|
|
6
6
|
batchPath: string;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.lambdaBatchRequestHandler = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
5
|
+
const asyncPool_1 = require("../misc/asyncPool");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const _1 = require(".");
|
|
8
8
|
const BatchItemSchema = zod_1.z.object({
|
|
9
9
|
id: zod_1.z.string(),
|
|
10
10
|
path: zod_1.z.string(),
|
|
@@ -25,7 +25,7 @@ const lambdaBatchRequestHandler = (config) => {
|
|
|
25
25
|
},
|
|
26
26
|
extractBatchRequests: (request) => {
|
|
27
27
|
// Parse and validate payload
|
|
28
|
-
const payload = (0,
|
|
28
|
+
const payload = (0, helpers_1.getRequestBody)(request);
|
|
29
29
|
const parsed = BatchRequestSchema.parse(payload);
|
|
30
30
|
// Create modified requests for each batch item
|
|
31
31
|
return parsed.requests.map(item => {
|
|
@@ -54,7 +54,7 @@ const lambdaBatchRequestHandler = (config) => {
|
|
|
54
54
|
});
|
|
55
55
|
},
|
|
56
56
|
composeBatchResponse: async (items) => {
|
|
57
|
-
const results = await (0,
|
|
57
|
+
const results = await (0, asyncPool_1.asyncPool)(items.map(({ id, makeRequest }) => async () => {
|
|
58
58
|
const response = await makeRequest();
|
|
59
59
|
return { id, response };
|
|
60
60
|
}), concurrency);
|
|
@@ -66,7 +66,7 @@ const lambdaBatchRequestHandler = (config) => {
|
|
|
66
66
|
headers: (response === null || response === void 0 ? void 0 : response.headers) || {}
|
|
67
67
|
}))
|
|
68
68
|
};
|
|
69
|
-
return (0,
|
|
69
|
+
return (0, _1.apiJsonResponse)(200, data);
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
};
|
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.zodPayloadValidator = void 0;
|
|
4
4
|
/* spell-checker: ignore treeify */
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
|
-
const
|
|
6
|
+
const errors_1 = require("../../errors");
|
|
7
7
|
const zodPayloadValidator = (validator) => (input) => {
|
|
8
8
|
const result = validator.safeParse(input);
|
|
9
9
|
if (result.success) {
|
|
10
10
|
return true;
|
|
11
11
|
}
|
|
12
|
-
throw new
|
|
12
|
+
throw new errors_1.ValidationError((0, zod_1.treeifyError)(result.error));
|
|
13
13
|
};
|
|
14
14
|
exports.zodPayloadValidator = zodPayloadValidator;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config
|
|
2
|
-
import { GenericFetch } from '../../fetch
|
|
3
|
-
import { JsonCompatibleStruct } from '../../routing
|
|
4
|
-
import { ApiUser } from '../authProvider
|
|
5
|
-
import { Logger } from '../logger
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
+
import { GenericFetch } from '../../fetch';
|
|
3
|
+
import { JsonCompatibleStruct } from '../../routing';
|
|
4
|
+
import { ApiUser } from '../authProvider';
|
|
5
|
+
import { Logger } from '../logger';
|
|
6
6
|
export type Config = {
|
|
7
7
|
accountsBase: string;
|
|
8
8
|
accountsAuthToken: string;
|
|
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.accountsGateway = void 0;
|
|
7
7
|
const lodash_1 = require("lodash");
|
|
8
8
|
const query_string_1 = __importDefault(require("query-string"));
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
9
|
+
const config_1 = require("../../config");
|
|
10
|
+
const guards_1 = require("../../guards");
|
|
11
|
+
const helpers_1 = require("../../misc/helpers");
|
|
12
|
+
const routing_1 = require("../../routing");
|
|
13
|
+
const logger_1 = require("../logger");
|
|
14
14
|
class ApiError extends Error {
|
|
15
15
|
constructor(message, status) {
|
|
16
16
|
super(message);
|
|
@@ -18,9 +18,9 @@ class ApiError extends Error {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
const accountsGateway = (initializer) => (configProvider) => {
|
|
21
|
-
const config = configProvider[(0,
|
|
22
|
-
const accountsBase = (0,
|
|
23
|
-
const accountsAuthToken = (0,
|
|
21
|
+
const config = configProvider[(0, guards_1.ifDefined)(initializer.configSpace, 'accounts')];
|
|
22
|
+
const accountsBase = (0, helpers_1.once)(() => (0, config_1.resolveConfigValue)(config.accountsBase));
|
|
23
|
+
const accountsAuthToken = (0, helpers_1.once)(() => (0, config_1.resolveConfigValue)(config.accountsAuthToken));
|
|
24
24
|
return ({ logger }) => {
|
|
25
25
|
const request = async (method, path, options, statuses = [200, 201]) => {
|
|
26
26
|
const host = (await accountsBase()).replace(/\/+$/, '');
|
|
@@ -40,10 +40,10 @@ const accountsGateway = (initializer) => (configProvider) => {
|
|
|
40
40
|
}
|
|
41
41
|
return response.json();
|
|
42
42
|
};
|
|
43
|
-
const findOrCreateUser = async (body) => request(
|
|
43
|
+
const findOrCreateUser = async (body) => request(routing_1.METHOD.POST, 'user/find-or-create', { body });
|
|
44
44
|
const findUser = async (body) => {
|
|
45
45
|
try {
|
|
46
|
-
return await request(
|
|
46
|
+
return await request(routing_1.METHOD.POST, 'user/find', { body });
|
|
47
47
|
}
|
|
48
48
|
catch (error) {
|
|
49
49
|
if (error instanceof ApiError && error.status === 404) {
|
|
@@ -54,16 +54,16 @@ const accountsGateway = (initializer) => (configProvider) => {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
|
-
const getUser = async (token) => request(
|
|
58
|
-
const linkUser = async (body) => request(
|
|
57
|
+
const getUser = async (token) => request(routing_1.METHOD.GET, 'user', { token });
|
|
58
|
+
const linkUser = async (body) => request(routing_1.METHOD.POST, 'user/external-ids', {
|
|
59
59
|
body: {
|
|
60
60
|
external_id: body.externalId,
|
|
61
61
|
user_id: body.userId,
|
|
62
62
|
...(body.role && { role: body.role }),
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
|
-
const searchUsers = async (payload) => request(
|
|
66
|
-
const updateUser = async (token, body) => request(
|
|
65
|
+
const searchUsers = async (payload) => request(routing_1.METHOD.GET, `users?${query_string_1.default.stringify(payload)}`, {});
|
|
66
|
+
const updateUser = async (token, body) => request(routing_1.METHOD.PUT, 'user', { body, token });
|
|
67
67
|
const getPlatformUserId = (externalIds, platformId) => {
|
|
68
68
|
for (const externalId of externalIds) {
|
|
69
69
|
const [userPlatformId, userId] = externalId.split('/', 2);
|
|
@@ -86,21 +86,21 @@ const accountsGateway = (initializer) => (configProvider) => {
|
|
|
86
86
|
return undefined;
|
|
87
87
|
const platformUserId = platformId ? getPlatformUserId(user.external_ids, platformId) : undefined;
|
|
88
88
|
if (platformId && !platformUserId) {
|
|
89
|
-
logger.logEvent(
|
|
89
|
+
logger.logEvent(logger_1.Level.Warn, {
|
|
90
90
|
message: 'Accounts user has no external_id matching the given platformId',
|
|
91
91
|
accountsUuid: user.uuid,
|
|
92
92
|
platformId,
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
if (!user.full_name) {
|
|
96
|
-
logger.logEvent(
|
|
96
|
+
logger.logEvent(logger_1.Level.Warn, {
|
|
97
97
|
message: 'Accounts user has no full_name',
|
|
98
98
|
accountsUuid: user.uuid,
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
return { data, fullName: user.full_name, platformUserId, uuid: user.uuid };
|
|
102
102
|
});
|
|
103
|
-
return results.filter(
|
|
103
|
+
return results.filter(guards_1.isDefined);
|
|
104
104
|
};
|
|
105
105
|
const getUserMap = async (userUuids, mapper) => {
|
|
106
106
|
if (userUuids.size === 0)
|
|
@@ -111,7 +111,7 @@ const accountsGateway = (initializer) => (configProvider) => {
|
|
|
111
111
|
});
|
|
112
112
|
const accountsUuids = items.map((user) => user.uuid);
|
|
113
113
|
if (!(0, lodash_1.isEqual)(accountsUuids.sort(), inputChunk.sort())) {
|
|
114
|
-
logger.logEvent(
|
|
114
|
+
logger.logEvent(logger_1.Level.Warn, {
|
|
115
115
|
message: 'Unexpected Accounts user search results',
|
|
116
116
|
uuids: inputChunk,
|
|
117
117
|
accountsUuids,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Headers } from 'node-fetch';
|
|
2
|
-
import { ConfigProviderForConfig } from '../../config
|
|
3
|
-
import { ConfigForFetch, GenericFetch, Response } from '../../fetch
|
|
4
|
-
import { AnyRoute, ApiResponse, OutputForRoute, ParamsForRoute, PayloadForRoute, QueryParams } from '../../routing
|
|
5
|
-
import { UnwrapPromise } from '../../types
|
|
6
|
-
import { Logger } from '../logger
|
|
2
|
+
import { ConfigProviderForConfig } from '../../config';
|
|
3
|
+
import { ConfigForFetch, GenericFetch, Response } from '../../fetch';
|
|
4
|
+
import { AnyRoute, ApiResponse, OutputForRoute, ParamsForRoute, PayloadForRoute, QueryParams } from '../../routing';
|
|
5
|
+
import { UnwrapPromise } from '../../types';
|
|
6
|
+
import { Logger } from '../logger';
|
|
7
7
|
export type TResponsePayload<R> = R extends ApiResponse<any, infer P> ? P : never;
|
|
8
8
|
export type TResponseStatus<R> = R extends ApiResponse<infer S, any> ? S : never;
|
|
9
9
|
export type RouteClient<R> = {
|
|
@@ -40,11 +40,11 @@ exports.createApiGateway = exports.loadResponse = void 0;
|
|
|
40
40
|
const pathToRegexp = __importStar(require("path-to-regexp"));
|
|
41
41
|
const query_string_1 = __importDefault(require("query-string"));
|
|
42
42
|
const uuid_1 = require("uuid");
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
43
|
+
const __1 = require("../..");
|
|
44
|
+
const config_1 = require("../../config");
|
|
45
|
+
const errors_1 = require("../../errors");
|
|
46
|
+
const fetchStatusRetry_1 = require("../../fetch/fetchStatusRetry");
|
|
47
|
+
const logger_1 = require("../logger");
|
|
48
48
|
/** Pulls the content out of a response based on the content type */
|
|
49
49
|
const loadResponse = (response) => () => {
|
|
50
50
|
const [contentType] = (response.headers.get('content-type') || '').split(';');
|
|
@@ -61,7 +61,7 @@ exports.loadResponse = loadResponse;
|
|
|
61
61
|
const makeRouteClient = (initializer, config, route, app) => {
|
|
62
62
|
/* TODO this duplicates code with makeRenderRouteUrl, reuse that */
|
|
63
63
|
const renderUrl = async ({ params, query }) => {
|
|
64
|
-
const apiBase = await (0,
|
|
64
|
+
const apiBase = await (0, config_1.resolveConfigValue)(config.apiBase);
|
|
65
65
|
const getPathForParams = pathToRegexp.compile(route.path, { encode: encodeURIComponent });
|
|
66
66
|
const search = query && query_string_1.default.stringify(query);
|
|
67
67
|
return apiBase.replace(/\/+$/, '') + getPathForParams(params || {}) + (search ? `?${search}` : '');
|
|
@@ -71,13 +71,13 @@ const makeRouteClient = (initializer, config, route, app) => {
|
|
|
71
71
|
const { fetch } = initializer;
|
|
72
72
|
const url = await renderUrl({ params, query });
|
|
73
73
|
const body = payload ? JSON.stringify(payload) : undefined;
|
|
74
|
-
const baseOptions = (0,
|
|
74
|
+
const baseOptions = (0, __1.merge)((await ((_a = app === null || app === void 0 ? void 0 : app.authProvider) === null || _a === void 0 ? void 0 : _a.getAuthorizedFetchConfig())) || {}, fetchConfig || {});
|
|
75
75
|
const requestId = (0, uuid_1.v4)();
|
|
76
76
|
const requestLogger = (_b = app === null || app === void 0 ? void 0 : app.logger) === null || _b === void 0 ? void 0 : _b.createSubContext();
|
|
77
77
|
requestLogger === null || requestLogger === void 0 ? void 0 : requestLogger.setContext({ requestId, url, timeStamp: new Date().getTime() });
|
|
78
|
-
const fetcher = (0,
|
|
79
|
-
requestLogger === null || requestLogger === void 0 ? void 0 : requestLogger.log('Request Initiated',
|
|
80
|
-
return fetcher(url, (0,
|
|
78
|
+
const fetcher = (0, fetchStatusRetry_1.fetchStatusRetry)(fetch, { retries: 1, status: [502], logger: requestLogger });
|
|
79
|
+
requestLogger === null || requestLogger === void 0 ? void 0 : requestLogger.log('Request Initiated', logger_1.Level.Info);
|
|
80
|
+
return fetcher(url, (0, __1.merge)(baseOptions, {
|
|
81
81
|
method: route.method,
|
|
82
82
|
body,
|
|
83
83
|
headers: {
|
|
@@ -90,10 +90,10 @@ const makeRouteClient = (initializer, config, route, app) => {
|
|
|
90
90
|
}
|
|
91
91
|
})).then(response => {
|
|
92
92
|
if (response.status === 401) {
|
|
93
|
-
throw new
|
|
93
|
+
throw new errors_1.UnauthorizedError();
|
|
94
94
|
}
|
|
95
95
|
if (response.status === 440) {
|
|
96
|
-
throw new
|
|
96
|
+
throw new errors_1.SessionExpiredError();
|
|
97
97
|
}
|
|
98
98
|
return {
|
|
99
99
|
status: response.status,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config
|
|
2
|
-
import { GenericFetch } from '../../fetch
|
|
3
|
-
import { UserData } from './utils/embeddedAuthProvider
|
|
4
|
-
import { ApiUser, AuthProvider } from '
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
+
import { GenericFetch } from '../../fetch';
|
|
3
|
+
import { UserData } from './utils/embeddedAuthProvider';
|
|
4
|
+
import { ApiUser, AuthProvider } from '.';
|
|
5
5
|
type Config = {
|
|
6
6
|
accountsBase: string;
|
|
7
7
|
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.browserAuthProvider = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const isUserData = (0,
|
|
4
|
+
const __1 = require("../..");
|
|
5
|
+
const config_1 = require("../../config");
|
|
6
|
+
const guards_1 = require("../../guards");
|
|
7
|
+
const routing_1 = require("../../routing");
|
|
8
|
+
const embeddedAuthProvider_1 = require("./utils/embeddedAuthProvider");
|
|
9
|
+
const isUserData = (0, routing_1.unsafePayloadValidator)();
|
|
10
10
|
const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
|
|
11
|
-
const config = configProvider[(0,
|
|
12
|
-
const accountsBase = (0,
|
|
11
|
+
const config = configProvider[(0, guards_1.ifDefined)(configSpace, 'auth')];
|
|
12
|
+
const accountsBase = (0, __1.once)(() => (0, config_1.resolveConfigValue)(config.accountsBase));
|
|
13
13
|
const queryString = window.location.search;
|
|
14
14
|
const queryKey = 'auth';
|
|
15
15
|
const urlSearchParams = new URLSearchParams(queryString);
|
|
@@ -17,7 +17,7 @@ const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
|
|
|
17
17
|
const referrer = window.document.referrer ? new URL(window.document.referrer) : undefined;
|
|
18
18
|
const isEmbedded = window.parent !== window;
|
|
19
19
|
const trustedParent = isEmbedded && referrer && referrer.hostname.match(/^(openstax\.org|((.*)(\.openstax\.org|local|localhost)))$/) ? referrer : undefined;
|
|
20
|
-
const { embeddedQueryKey, embeddedQueryValue, getAuthorizedEmbedUrl } = (0,
|
|
20
|
+
const { embeddedQueryKey, embeddedQueryValue, getAuthorizedEmbedUrl } = (0, embeddedAuthProvider_1.embeddedAuthProvider)(() => getUserData(), { authQuery: { key: queryKey, value: authQuery }, window });
|
|
21
21
|
const embeddedQuery = urlSearchParams.get(embeddedQueryKey);
|
|
22
22
|
let userData = { token: authQuery };
|
|
23
23
|
const getAuthToken = async () => {
|
|
@@ -65,14 +65,14 @@ const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
|
|
|
65
65
|
return reject(new Error('parent window is undefined or not trusted'));
|
|
66
66
|
}
|
|
67
67
|
const handler = (event) => {
|
|
68
|
-
if (event.data.type ===
|
|
68
|
+
if (event.data.type === embeddedAuthProvider_1.PostMessageTypes.ReceiveUser && event.origin === trustedParent.origin) {
|
|
69
69
|
clearTimeout(timeout);
|
|
70
70
|
window.removeEventListener('message', handler);
|
|
71
71
|
resolve(event.data.userData);
|
|
72
72
|
}
|
|
73
73
|
};
|
|
74
74
|
window.addEventListener('message', handler);
|
|
75
|
-
window.parent.postMessage({ type:
|
|
75
|
+
window.parent.postMessage({ type: embeddedAuthProvider_1.PostMessageTypes.RequestUser }, trustedParent.origin);
|
|
76
76
|
const timeout = setTimeout(() => {
|
|
77
77
|
window.removeEventListener('message', handler);
|
|
78
78
|
reject(new Error('loading user identity timed out'));
|
|
@@ -91,7 +91,7 @@ const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
|
|
|
91
91
|
const message = await response.text();
|
|
92
92
|
throw new Error(`Error response from Accounts ${response.status}: ${message}`);
|
|
93
93
|
};
|
|
94
|
-
const getUserData = (0,
|
|
94
|
+
const getUserData = (0, __1.once)(async () => {
|
|
95
95
|
// For backwards compatibility
|
|
96
96
|
if (authQuery === 'embedded') {
|
|
97
97
|
return getParentWindowUser();
|
|
@@ -103,7 +103,7 @@ const browserAuthProvider = ({ window, configSpace }) => (configProvider) => {
|
|
|
103
103
|
return (await getUserData()).user;
|
|
104
104
|
};
|
|
105
105
|
const updateUser = async (updates) => {
|
|
106
|
-
const response = await window.fetch((await accountsBase()).replace(/\/+$/, '') + '/api/user', { ...getAuthorizedFetchConfigFromData(userData), method:
|
|
106
|
+
const response = await window.fetch((await accountsBase()).replace(/\/+$/, '') + '/api/user', { ...getAuthorizedFetchConfigFromData(userData), method: routing_1.METHOD.PUT, body: JSON.stringify(updates) });
|
|
107
107
|
if (response.status === 200) {
|
|
108
108
|
const user = await response.json();
|
|
109
109
|
if (isUserData(user)) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ConfigProviderForConfig } from '../../config
|
|
2
|
-
import { GenericFetch } from '../../fetch
|
|
3
|
-
import { ApiUser, AuthProvider, CookieAuthProvider } from '
|
|
1
|
+
import type { ConfigProviderForConfig } from '../../config';
|
|
2
|
+
import { GenericFetch } from '../../fetch';
|
|
3
|
+
import { ApiUser, AuthProvider, CookieAuthProvider } from '.';
|
|
4
4
|
type Config = {
|
|
5
5
|
accountsBase: string;
|
|
6
6
|
cookieName: string;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.decryptionAuthProvider = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
4
|
+
const resolveConfigValue_1 = require("../../config/resolveConfigValue");
|
|
5
|
+
const errors_1 = require("../../errors");
|
|
6
|
+
const guards_1 = require("../../guards");
|
|
7
|
+
const helpers_1 = require("../../misc/helpers");
|
|
8
|
+
const decryptAndVerify_1 = require("./utils/decryptAndVerify");
|
|
9
|
+
const userSubrequest_1 = require("./utils/userSubrequest");
|
|
10
|
+
const _1 = require(".");
|
|
11
11
|
const decryptionAuthProvider = (initializer) => (configProvider) => {
|
|
12
|
-
const config = configProvider[(0,
|
|
13
|
-
const accountsBase = (0,
|
|
14
|
-
const cookieName = (0,
|
|
15
|
-
const encryptionPrivateKey = (0,
|
|
16
|
-
const signaturePublicKey = (0,
|
|
12
|
+
const config = configProvider[(0, guards_1.ifDefined)(initializer.configSpace, 'decryption')];
|
|
13
|
+
const accountsBase = (0, helpers_1.once)(() => (0, resolveConfigValue_1.resolveConfigValue)(config.accountsBase));
|
|
14
|
+
const cookieName = (0, helpers_1.once)(() => (0, resolveConfigValue_1.resolveConfigValue)(config.cookieName));
|
|
15
|
+
const encryptionPrivateKey = (0, helpers_1.once)(() => (0, resolveConfigValue_1.resolveConfigValue)(config.encryptionPrivateKey));
|
|
16
|
+
const signaturePublicKey = (0, helpers_1.once)(() => (0, resolveConfigValue_1.resolveConfigValue)(config.signaturePublicKey));
|
|
17
17
|
return ({ request, logger }) => {
|
|
18
18
|
let user;
|
|
19
19
|
let userData;
|
|
20
|
-
const getAuthToken = async () => (0,
|
|
20
|
+
const getAuthToken = async () => (0, _1.getAuthTokenOrCookie)(request, await cookieName())[0];
|
|
21
21
|
const getAuthorizedFetchConfig = async () => {
|
|
22
|
-
const [token, headers] = (0,
|
|
22
|
+
const [token, headers] = (0, _1.getAuthTokenOrCookie)(request, await cookieName());
|
|
23
23
|
if (!token) {
|
|
24
24
|
return {};
|
|
25
25
|
}
|
|
@@ -30,7 +30,7 @@ const decryptionAuthProvider = (initializer) => (configProvider) => {
|
|
|
30
30
|
if (!token) {
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
|
-
return (0,
|
|
33
|
+
return (0, decryptAndVerify_1.decryptAndVerify)(token, await encryptionPrivateKey(), await signaturePublicKey());
|
|
34
34
|
};
|
|
35
35
|
const getUser = async () => {
|
|
36
36
|
if (!user) {
|
|
@@ -39,7 +39,7 @@ const decryptionAuthProvider = (initializer) => (configProvider) => {
|
|
|
39
39
|
return undefined;
|
|
40
40
|
}
|
|
41
41
|
if ('error' in result && result.error == 'expired token') {
|
|
42
|
-
throw new
|
|
42
|
+
throw new errors_1.SessionExpiredError();
|
|
43
43
|
}
|
|
44
44
|
if ('user' in result) {
|
|
45
45
|
logger.setContext({ user: result.user.uuid });
|
|
@@ -63,7 +63,7 @@ const decryptionAuthProvider = (initializer) => (configProvider) => {
|
|
|
63
63
|
if (!token) {
|
|
64
64
|
return undefined;
|
|
65
65
|
}
|
|
66
|
-
userData = await (0,
|
|
66
|
+
userData = await (0, userSubrequest_1.loadUserData)(initializer.fetch, await accountsBase(), await cookieName(), token);
|
|
67
67
|
}
|
|
68
68
|
return userData;
|
|
69
69
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { FetchConfig } from '../../fetch
|
|
2
|
-
import type { HttpHeaders, QueryParams } from '../../routing
|
|
3
|
-
import type { Logger } from '../logger
|
|
1
|
+
import type { FetchConfig } from '../../fetch';
|
|
2
|
+
import type { HttpHeaders, QueryParams } from '../../routing';
|
|
3
|
+
import type { Logger } from '../logger';
|
|
4
4
|
export type ConsentPreferences = {
|
|
5
5
|
consent_preferences: {
|
|
6
6
|
accepted: string[];
|
|
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getAuthTokenOrCookie = exports.stubAuthProvider = void 0;
|
|
7
7
|
const cookie_1 = __importDefault(require("cookie"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const helpers_1 = require("../../misc/helpers");
|
|
9
|
+
const helpers_2 = require("../../routing/helpers");
|
|
10
10
|
const stubAuthProvider = (user) => {
|
|
11
11
|
const getUser = () => Promise.resolve(user);
|
|
12
12
|
return {
|
|
@@ -21,14 +21,14 @@ exports.stubAuthProvider = stubAuthProvider;
|
|
|
21
21
|
const getAuthTokenOrCookie = (request, cookieName, queryKey = 'auth') => {
|
|
22
22
|
var _a, _b;
|
|
23
23
|
const authParam = request.queryStringParameters ? request.queryStringParameters[queryKey] : undefined;
|
|
24
|
-
const authHeader = (0,
|
|
24
|
+
const authHeader = (0, helpers_2.getHeader)(request.headers, 'authorization');
|
|
25
25
|
const cookieValue = cookie_1.default.parse((_b = (_a = request.cookies) === null || _a === void 0 ? void 0 : _a.join('; ')) !== null && _b !== void 0 ? _b : '')[cookieName];
|
|
26
26
|
return typeof authParam === 'string'
|
|
27
|
-
? (0,
|
|
27
|
+
? (0, helpers_1.tuple)(authParam, { Authorization: `Bearer ${authParam}` })
|
|
28
28
|
: authHeader && authHeader.length >= 8 && authHeader.startsWith('Bearer ')
|
|
29
|
-
? (0,
|
|
29
|
+
? (0, helpers_1.tuple)(authHeader.slice(7), { Authorization: authHeader })
|
|
30
30
|
: cookieValue
|
|
31
|
-
? (0,
|
|
32
|
-
: (0,
|
|
31
|
+
? (0, helpers_1.tuple)(cookieValue, { cookie: cookie_1.default.serialize(cookieName, cookieValue) })
|
|
32
|
+
: (0, helpers_1.tuple)(null, {});
|
|
33
33
|
};
|
|
34
34
|
exports.getAuthTokenOrCookie = getAuthTokenOrCookie;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AccountsGateway } from '../accountsGateway
|
|
2
|
-
import { LaunchVerifier } from '../launchParams/verifier
|
|
3
|
-
import type { Logger } from '../logger
|
|
4
|
-
import { AuthProvider } from '
|
|
1
|
+
import { AccountsGateway } from '../accountsGateway';
|
|
2
|
+
import { LaunchVerifier } from '../launchParams/verifier';
|
|
3
|
+
import type { Logger } from '../logger';
|
|
4
|
+
import { AuthProvider } from '.';
|
|
5
5
|
export declare const launchTokenAuthMiddleware: () => <M extends {
|
|
6
6
|
logger: Logger;
|
|
7
7
|
accountsGateway: AccountsGateway;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.launchTokenAuthMiddleware = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const assertions_1 = require("../../assertions");
|
|
5
|
+
const helpers_1 = require("../../misc/helpers");
|
|
6
6
|
const stubAuthProvider = (services) => {
|
|
7
|
-
const getUserUuid = (0,
|
|
7
|
+
const getUserUuid = (0, helpers_1.once)(async () => {
|
|
8
8
|
const token = await services.launchVerifier.verify();
|
|
9
|
-
return (0,
|
|
9
|
+
return (0, assertions_1.assertDefined)(token.sub, new Error('Launch token does not contain a user UUID'));
|
|
10
10
|
});
|
|
11
|
-
const getUser = (0,
|
|
11
|
+
const getUser = (0, helpers_1.once)(async () => {
|
|
12
12
|
const uuid = await getUserUuid();
|
|
13
13
|
const { items } = await services.accountsGateway.searchUsers({ q: `uuid:${uuid}` });
|
|
14
|
-
return (0,
|
|
14
|
+
return (0, assertions_1.assertDefined)(items[0], new Error(`User with UUID ${uuid} not found`));
|
|
15
15
|
});
|
|
16
16
|
return {
|
|
17
17
|
getAuthToken: () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ConfigProviderForConfig } from '../../config
|
|
2
|
-
import { GenericFetch } from '../../fetch
|
|
3
|
-
import { CookieAuthProvider } from '
|
|
1
|
+
import { ConfigProviderForConfig } from '../../config';
|
|
2
|
+
import { GenericFetch } from '../../fetch';
|
|
3
|
+
import { CookieAuthProvider } from '.';
|
|
4
4
|
type Config = {
|
|
5
5
|
accountsBase: string;
|
|
6
6
|
cookieName: string;
|