quidproquo-actionprocessor-awslambda 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +2 -2
  2. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js.map +1 -1
  3. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.d.ts +2 -0
  4. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.js +41 -0
  5. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.js.map +1 -0
  6. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.d.ts +2 -0
  7. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.js +37 -0
  8. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.js.map +1 -0
  9. package/lib/commonjs/getActionProcessor/core/userDirectory/index.js +3 -1
  10. package/lib/commonjs/getActionProcessor/core/userDirectory/index.js.map +1 -1
  11. package/lib/commonjs/logic/cognito/globalSignOut.d.ts +1 -0
  12. package/lib/commonjs/logic/cognito/globalSignOut.js +28 -0
  13. package/lib/commonjs/logic/cognito/globalSignOut.js.map +1 -0
  14. package/lib/commonjs/logic/cognito/index.d.ts +2 -0
  15. package/lib/commonjs/logic/cognito/index.js +2 -0
  16. package/lib/commonjs/logic/cognito/index.js.map +1 -1
  17. package/lib/commonjs/logic/cognito/refreshToken.js +10 -1
  18. package/lib/commonjs/logic/cognito/refreshToken.js.map +1 -1
  19. package/lib/commonjs/logic/cognito/revokeRefreshToken.d.ts +1 -0
  20. package/lib/commonjs/logic/cognito/revokeRefreshToken.js +33 -0
  21. package/lib/commonjs/logic/cognito/revokeRefreshToken.js.map +1 -0
  22. package/lib/commonjs/logic/s3/generatePresignedUploadUrl.d.ts +1 -1
  23. package/lib/commonjs/logic/s3/generatePresignedUploadUrl.js +4 -1
  24. package/lib/commonjs/logic/s3/generatePresignedUploadUrl.js.map +1 -1
  25. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +2 -2
  26. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js.map +1 -1
  27. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.d.ts +2 -0
  28. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.js +26 -0
  29. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.js.map +1 -0
  30. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.d.ts +2 -0
  31. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.js +22 -0
  32. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.js.map +1 -0
  33. package/lib/esm/getActionProcessor/core/userDirectory/index.js +4 -0
  34. package/lib/esm/getActionProcessor/core/userDirectory/index.js.map +1 -1
  35. package/lib/esm/logic/cognito/globalSignOut.d.ts +1 -0
  36. package/lib/esm/logic/cognito/globalSignOut.js +15 -0
  37. package/lib/esm/logic/cognito/globalSignOut.js.map +1 -0
  38. package/lib/esm/logic/cognito/index.d.ts +2 -0
  39. package/lib/esm/logic/cognito/index.js +2 -0
  40. package/lib/esm/logic/cognito/index.js.map +1 -1
  41. package/lib/esm/logic/cognito/refreshToken.js +10 -1
  42. package/lib/esm/logic/cognito/refreshToken.js.map +1 -1
  43. package/lib/esm/logic/cognito/revokeRefreshToken.d.ts +1 -0
  44. package/lib/esm/logic/cognito/revokeRefreshToken.js +20 -0
  45. package/lib/esm/logic/cognito/revokeRefreshToken.js.map +1 -0
  46. package/lib/esm/logic/s3/generatePresignedUploadUrl.d.ts +1 -1
  47. package/lib/esm/logic/s3/generatePresignedUploadUrl.js +4 -1
  48. package/lib/esm/logic/s3/generatePresignedUploadUrl.js.map +1 -1
  49. package/package.json +7 -7
@@ -18,13 +18,13 @@ const utils_1 = require("./utils");
18
18
  // SigV4 presigned URLs cannot expire more than 7 days in the future
19
19
  const maxExpirationMs = 7 * 24 * 60 * 60 * 1000;
20
20
  const getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig) => {
21
- return (_a, session_1) => __awaiter(void 0, [_a, session_1], void 0, function* ({ drive, filepath, expirationMs, contentType, scope }, session) {
21
+ return (_a, session_1) => __awaiter(void 0, [_a, session_1], void 0, function* ({ drive, filepath, expirationMs, contentType, contentDisposition, scope }, session) {
22
22
  if (expirationMs > maxExpirationMs) {
23
23
  return (0, quidproquo_core_1.actionResultError)(quidproquo_core_2.FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong, 'Expiration exceeds the 7 day maximum for presigned URLs');
24
24
  }
25
25
  try {
26
26
  const s3BucketName = (0, utils_1.resolveStorageDriveBucketName)(drive, qpqConfig);
27
- const url = yield (0, generatePresignedUploadUrl_1.generatePresignedUploadUrl)(s3BucketName, (0, quidproquo_core_2.composeScopedFilePath)(scope, filepath), quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType);
27
+ const url = yield (0, generatePresignedUploadUrl_1.generatePresignedUploadUrl)(s3BucketName, (0, quidproquo_core_2.composeScopedFilePath)(scope, filepath), quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType, contentDisposition);
28
28
  return (0, quidproquo_core_2.actionResult)(url);
29
29
  }
30
30
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"getFileGenerateTemporaryUploadSecureUrlActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAA0D;AAC1D,qDAAmJ;AACnJ,qDAMyB;AAEzB,6FAA0F;AAC1F,mCAAwD;AAExD,oEAAoE;AACpE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,8CAA8C,GAAG,CAAC,SAAoB,EAAuD,EAAE;IACnI,OAAO,gBAAuE,EAAE,uDAAlE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,OAAO;QAC1E,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,IAAA,mCAAiB,EACtB,mEAAiD,CAAC,iBAAiB,EACnE,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,IAAA,uDAA0B,EAC1C,YAAY,EACZ,IAAA,uCAAqB,EAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,yCAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,YAAY,EACZ,OAAO,CAAC,WAAW,EACnB,WAAW,CACZ,CAAC;YAEF,OAAO,IAAA,8BAAY,EAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,uDAAuD;YACvD,OAAO,IAAA,kDAAgC,EAAC,KAAK,EAAE;gBAC7C,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,mCAAiB,EAAC,mEAAiD,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC/H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,sDAAsD,GAAgC,CACjG,SAAoB,EACU,EAAE;IAAC,OAAA,CAAC;QAClC,CAAC,gCAAc,CAAC,gCAAgC,CAAC,EAAE,8CAA8C,CAAC,SAAS,CAAC;KAC7G,CAAC,CAAA;EAAA,CAAC;AAJU,QAAA,sDAAsD,0DAIhE","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport { ActionProcessorList, ActionProcessorListResolver, actionResultError, actionResultErrorFromCaughtError, QPQConfig } from 'quidproquo-core';\nimport {\n actionResult,\n composeScopedFilePath,\n FileActionType,\n FileGenerateTemporaryUploadSecureUrlActionProcessor,\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { generatePresignedUploadUrl } from '../../../logic/s3/generatePresignedUploadUrl';\nimport { resolveStorageDriveBucketName } from './utils';\n\n// SigV4 presigned URLs cannot expire more than 7 days in the future\nconst maxExpirationMs = 7 * 24 * 60 * 60 * 1000;\n\nconst getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig: QPQConfig): FileGenerateTemporaryUploadSecureUrlActionProcessor => {\n return async ({ drive, filepath, expirationMs, contentType, scope }, session) => {\n if (expirationMs > maxExpirationMs) {\n return actionResultError(\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong,\n 'Expiration exceeds the 7 day maximum for presigned URLs',\n );\n }\n\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const url = await generatePresignedUploadUrl(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n expirationMs,\n session.correlation,\n contentType,\n );\n\n return actionResult(url);\n } catch (error: unknown) {\n // Name-keyed, not instanceof: under npm link / module federation the\n // error can come from another copy of quidproquo-core.\n return actionResultErrorFromCaughtError(error, {\n InvalidScopeError: (error) => actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileGenerateTemporaryUploadSecureUrlActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [FileActionType.GenerateTemporaryUploadSecureUrl]: getProcessFileGenerateTemporaryUploadSecureUrl(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileGenerateTemporaryUploadSecureUrlActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAA0D;AAC1D,qDAAmJ;AACnJ,qDAMyB;AAEzB,6FAA0F;AAC1F,mCAAwD;AAExD,oEAAoE;AACpE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,8CAA8C,GAAG,CAAC,SAAoB,EAAuD,EAAE;IACnI,OAAO,gBAA2F,EAAE,uDAAtF,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,OAAO;QAC9F,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,IAAA,mCAAiB,EACtB,mEAAiD,CAAC,iBAAiB,EACnE,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,IAAA,uDAA0B,EAC1C,YAAY,EACZ,IAAA,uCAAqB,EAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,yCAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,YAAY,EACZ,OAAO,CAAC,WAAW,EACnB,WAAW,EACX,kBAAkB,CACnB,CAAC;YAEF,OAAO,IAAA,8BAAY,EAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,uDAAuD;YACvD,OAAO,IAAA,kDAAgC,EAAC,KAAK,EAAE;gBAC7C,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,mCAAiB,EAAC,mEAAiD,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC/H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,sDAAsD,GAAgC,CACjG,SAAoB,EACU,EAAE;IAAC,OAAA,CAAC;QAClC,CAAC,gCAAc,CAAC,gCAAgC,CAAC,EAAE,8CAA8C,CAAC,SAAS,CAAC;KAC7G,CAAC,CAAA;EAAA,CAAC;AAJU,QAAA,sDAAsD,0DAIhE","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport { ActionProcessorList, ActionProcessorListResolver, actionResultError, actionResultErrorFromCaughtError, QPQConfig } from 'quidproquo-core';\nimport {\n actionResult,\n composeScopedFilePath,\n FileActionType,\n FileGenerateTemporaryUploadSecureUrlActionProcessor,\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { generatePresignedUploadUrl } from '../../../logic/s3/generatePresignedUploadUrl';\nimport { resolveStorageDriveBucketName } from './utils';\n\n// SigV4 presigned URLs cannot expire more than 7 days in the future\nconst maxExpirationMs = 7 * 24 * 60 * 60 * 1000;\n\nconst getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig: QPQConfig): FileGenerateTemporaryUploadSecureUrlActionProcessor => {\n return async ({ drive, filepath, expirationMs, contentType, contentDisposition, scope }, session) => {\n if (expirationMs > maxExpirationMs) {\n return actionResultError(\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong,\n 'Expiration exceeds the 7 day maximum for presigned URLs',\n );\n }\n\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const url = await generatePresignedUploadUrl(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n expirationMs,\n session.correlation,\n contentType,\n contentDisposition,\n );\n\n return actionResult(url);\n } catch (error: unknown) {\n // Name-keyed, not instanceof: under npm link / module federation the\n // error can come from another copy of quidproquo-core.\n return actionResultErrorFromCaughtError(error, {\n InvalidScopeError: (error) => actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileGenerateTemporaryUploadSecureUrlActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [FileActionType.GenerateTemporaryUploadSecureUrl]: getProcessFileGenerateTemporaryUploadSecureUrl(qpqConfig),\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getUserDirectoryRevokeRefreshTokenActionProcessor: ActionProcessorListResolver;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getUserDirectoryRevokeRefreshTokenActionProcessor = void 0;
13
+ const quidproquo_config_aws_1 = require("quidproquo-config-aws");
14
+ const quidproquo_core_1 = require("quidproquo-core");
15
+ const awsNamingUtils_1 = require("../../../awsNamingUtils");
16
+ const getExportedValue_1 = require("../../../logic/cloudformation/getExportedValue");
17
+ const revokeRefreshToken_1 = require("../../../logic/cognito/revokeRefreshToken");
18
+ const getProcessRevokeRefreshToken = (qpqConfig) => {
19
+ return (_a) => __awaiter(void 0, [_a], void 0, function* ({ userDirectoryName, refreshToken }) {
20
+ const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
21
+ const userPoolId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolIdFromConfig)(userDirectoryName, qpqConfig), region);
22
+ const userPoolClientId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolClientIdFromConfig)(userDirectoryName, qpqConfig), region);
23
+ try {
24
+ yield (0, revokeRefreshToken_1.revokeRefreshToken)(userPoolId, userPoolClientId, region, refreshToken);
25
+ return (0, quidproquo_core_1.actionResult)(void 0);
26
+ }
27
+ catch (error) {
28
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
29
+ NotAuthorizedException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRevokeRefreshTokenErrorTypeEnum.Unauthorized, 'Refresh token is invalid or already revoked'),
30
+ TooManyRequestsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRevokeRefreshTokenErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
31
+ });
32
+ }
33
+ });
34
+ };
35
+ const getUserDirectoryRevokeRefreshTokenActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
36
+ return ({
37
+ [quidproquo_core_1.UserDirectoryActionType.RevokeRefreshToken]: getProcessRevokeRefreshToken(qpqConfig),
38
+ });
39
+ });
40
+ exports.getUserDirectoryRevokeRefreshTokenActionProcessor = getUserDirectoryRevokeRefreshTokenActionProcessor;
41
+ //# sourceMappingURL=getUserDirectoryRevokeRefreshTokenActionProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUserDirectoryRevokeRefreshTokenActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAA0D;AAC1D,qDAUyB;AAEzB,4DAAyH;AACzH,qFAAkF;AAClF,kFAA+E;AAE/E,MAAM,4BAA4B,GAAG,CAAC,SAAoB,EAAkD,EAAE;IAC5G,OAAO,KAA4C,EAAE,4CAAvC,EAAE,iBAAiB,EAAE,YAAY,EAAE;QAC/C,MAAM,MAAM,GAAG,yCAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAE7E,MAAM,UAAU,GAAG,MAAM,IAAA,mCAAgB,EAAC,IAAA,oDAAmC,EAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAErH,MAAM,gBAAgB,GAAG,MAAM,IAAA,mCAAgB,EAAC,IAAA,0DAAyC,EAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAEjI,IAAI,CAAC;YACH,MAAM,IAAA,uCAAkB,EAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAE7E,OAAO,IAAA,8BAAY,EAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAA,kDAAgC,EAAC,KAAK,EAAE;gBAC7C,sBAAsB,EAAE,GAAG,EAAE,CAC3B,IAAA,mCAAiB,EAAC,8DAA4C,CAAC,YAAY,EAAE,6CAA6C,CAAC;gBAC7H,wBAAwB,EAAE,GAAG,EAAE,CAC7B,IAAA,mCAAiB,EAAC,8DAA4C,CAAC,aAAa,EAAE,2CAA2C,CAAC;aAC7H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,iDAAiD,GAAgC,CAC5F,SAAoB,EACU,EAAE;IAAC,OAAA,CAAC;QAClC,CAAC,yCAAuB,CAAC,kBAAkB,CAAC,EAAE,4BAA4B,CAAC,SAAS,CAAC;KACtF,CAAC,CAAA;EAAA,CAAC;AAJU,QAAA,iDAAiD,qDAI3D","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n QPQConfig,\n UserDirectoryActionType,\n UserDirectoryRevokeRefreshTokenActionProcessor,\n UserDirectoryRevokeRefreshTokenErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { getCFExportNameUserPoolClientIdFromConfig, getCFExportNameUserPoolIdFromConfig } from '../../../awsNamingUtils';\nimport { getExportedValue } from '../../../logic/cloudformation/getExportedValue';\nimport { revokeRefreshToken } from '../../../logic/cognito/revokeRefreshToken';\n\nconst getProcessRevokeRefreshToken = (qpqConfig: QPQConfig): UserDirectoryRevokeRefreshTokenActionProcessor => {\n return async ({ userDirectoryName, refreshToken }) => {\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n\n const userPoolId = await getExportedValue(getCFExportNameUserPoolIdFromConfig(userDirectoryName, qpqConfig), region);\n\n const userPoolClientId = await getExportedValue(getCFExportNameUserPoolClientIdFromConfig(userDirectoryName, qpqConfig), region);\n\n try {\n await revokeRefreshToken(userPoolId, userPoolClientId, region, refreshToken);\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n NotAuthorizedException: () =>\n actionResultError(UserDirectoryRevokeRefreshTokenErrorTypeEnum.Unauthorized, 'Refresh token is invalid or already revoked'),\n TooManyRequestsException: () =>\n actionResultError(UserDirectoryRevokeRefreshTokenErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),\n });\n }\n };\n};\n\nexport const getUserDirectoryRevokeRefreshTokenActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [UserDirectoryActionType.RevokeRefreshToken]: getProcessRevokeRefreshToken(qpqConfig),\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getUserDirectorySignOutUserActionProcessor: ActionProcessorListResolver;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getUserDirectorySignOutUserActionProcessor = void 0;
13
+ const quidproquo_config_aws_1 = require("quidproquo-config-aws");
14
+ const quidproquo_core_1 = require("quidproquo-core");
15
+ const globalSignOut_1 = require("../../../logic/cognito/globalSignOut");
16
+ const getProcessSignOutUser = (qpqConfig) => {
17
+ return (_a) => __awaiter(void 0, [_a], void 0, function* ({ accessToken }) {
18
+ const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
19
+ try {
20
+ yield (0, globalSignOut_1.globalSignOut)(accessToken, region);
21
+ return (0, quidproquo_core_1.actionResult)(void 0);
22
+ }
23
+ catch (error) {
24
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
25
+ NotAuthorizedException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySignOutUserErrorTypeEnum.Unauthorized, 'Access token is invalid or has expired'),
26
+ TooManyRequestsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySignOutUserErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
27
+ });
28
+ }
29
+ });
30
+ };
31
+ const getUserDirectorySignOutUserActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
32
+ return ({
33
+ [quidproquo_core_1.UserDirectoryActionType.SignOutUser]: getProcessSignOutUser(qpqConfig),
34
+ });
35
+ });
36
+ exports.getUserDirectorySignOutUserActionProcessor = getUserDirectorySignOutUserActionProcessor;
37
+ //# sourceMappingURL=getUserDirectorySignOutUserActionProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUserDirectorySignOutUserActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAA0D;AAC1D,qDAUyB;AAEzB,wEAAqE;AAErE,MAAM,qBAAqB,GAAG,CAAC,SAAoB,EAA2C,EAAE;IAC9F,OAAO,KAAwB,EAAE,4CAAnB,EAAE,WAAW,EAAE;QAC3B,MAAM,MAAM,GAAG,yCAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAE7E,IAAI,CAAC;YACH,MAAM,IAAA,6BAAa,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEzC,OAAO,IAAA,8BAAY,EAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAA,kDAAgC,EAAC,KAAK,EAAE;gBAC7C,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAA,mCAAiB,EAAC,uDAAqC,CAAC,YAAY,EAAE,wCAAwC,CAAC;gBAC7I,wBAAwB,EAAE,GAAG,EAAE,CAC7B,IAAA,mCAAiB,EAAC,uDAAqC,CAAC,aAAa,EAAE,2CAA2C,CAAC;aACtH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,0CAA0C,GAAgC,CACrF,SAAoB,EACU,EAAE;IAAC,OAAA,CAAC;QAClC,CAAC,yCAAuB,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC;KACxE,CAAC,CAAA;EAAA,CAAC;AAJU,QAAA,0CAA0C,8CAIpD","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n QPQConfig,\n UserDirectoryActionType,\n UserDirectorySignOutUserActionProcessor,\n UserDirectorySignOutUserErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { globalSignOut } from '../../../logic/cognito/globalSignOut';\n\nconst getProcessSignOutUser = (qpqConfig: QPQConfig): UserDirectorySignOutUserActionProcessor => {\n return async ({ accessToken }) => {\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n\n try {\n await globalSignOut(accessToken, region);\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n NotAuthorizedException: () => actionResultError(UserDirectorySignOutUserErrorTypeEnum.Unauthorized, 'Access token is invalid or has expired'),\n TooManyRequestsException: () =>\n actionResultError(UserDirectorySignOutUserErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),\n });\n }\n };\n};\n\nexport const getUserDirectorySignOutUserActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [UserDirectoryActionType.SignOutUser]: getProcessSignOutUser(qpqConfig),\n});\n"]}
@@ -26,11 +26,13 @@ const getUserDirectoryReadAccessTokenActionProcessor_1 = require("./getUserDirec
26
26
  const getUserDirectoryRefreshTokenActionProcessor_1 = require("./getUserDirectoryRefreshTokenActionProcessor");
27
27
  const getUserDirectoryRequestEmailVerificationActionProcessor_1 = require("./getUserDirectoryRequestEmailVerificationActionProcessor");
28
28
  const getUserDirectoryRespondToAuthChallengeActionProcessor_1 = require("./getUserDirectoryRespondToAuthChallengeActionProcessor");
29
+ const getUserDirectoryRevokeRefreshTokenActionProcessor_1 = require("./getUserDirectoryRevokeRefreshTokenActionProcessor");
29
30
  const getUserDirectorySetAccessTokenActionProcessor_1 = require("./getUserDirectorySetAccessTokenActionProcessor");
30
31
  const getUserDirectorySetPasswordActionProcessor_1 = require("./getUserDirectorySetPasswordActionProcessor");
31
32
  const getUserDirectorySetUserAttributesActionProcessor_1 = require("./getUserDirectorySetUserAttributesActionProcessor");
33
+ const getUserDirectorySignOutUserActionProcessor_1 = require("./getUserDirectorySignOutUserActionProcessor");
32
34
  const getUserDirectoryActionProcessor = (qpqConfig, dynamicModuleLoader) => __awaiter(void 0, void 0, void 0, function* () {
33
- return (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, getUserDirectoryAssociateSoftwareTokenActionProcessor_1.getUserDirectoryAssociateSoftwareTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryAuthenticateUserActionProcessor_1.getUserDirectoryAuthenticateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryChangePasswordActionProcessor_1.getUserDirectoryChangePasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmEmailVerificationActionProcessor_1.getUserDirectoryConfirmEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmForgotPasswordActionProcessor_1.getUserDirectoryConfirmForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryCreateUserActionProcessor_1.getUserDirectoryCreateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryDecodeAccessTokenActionProcessor_1.getUserDirectoryDecodeAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryForgotPasswordActionProcessor_1.getUserDirectoryForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesActionProcessor_1.getUserDirectoryGetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesByUserIdActionProcessor_1.getUserDirectoryGetUserAttributesByUserIdActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersActionProcessor_1.getUserDirectoryGetUsersActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersByAttributeActionProcessor_1.getUserDirectoryGetUsersByAttributeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryReadAccessTokenActionProcessor_1.getUserDirectoryReadAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRefreshTokenActionProcessor_1.getUserDirectoryRefreshTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRequestEmailVerificationActionProcessor_1.getUserDirectoryRequestEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRespondToAuthChallengeActionProcessor_1.getUserDirectoryRespondToAuthChallengeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetAccessTokenActionProcessor_1.getUserDirectorySetAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetPasswordActionProcessor_1.getUserDirectorySetPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetUserAttributesActionProcessor_1.getUserDirectorySetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))));
35
+ return (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, getUserDirectoryAssociateSoftwareTokenActionProcessor_1.getUserDirectoryAssociateSoftwareTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryAuthenticateUserActionProcessor_1.getUserDirectoryAuthenticateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryChangePasswordActionProcessor_1.getUserDirectoryChangePasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmEmailVerificationActionProcessor_1.getUserDirectoryConfirmEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmForgotPasswordActionProcessor_1.getUserDirectoryConfirmForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryCreateUserActionProcessor_1.getUserDirectoryCreateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryDecodeAccessTokenActionProcessor_1.getUserDirectoryDecodeAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryForgotPasswordActionProcessor_1.getUserDirectoryForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesActionProcessor_1.getUserDirectoryGetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesByUserIdActionProcessor_1.getUserDirectoryGetUserAttributesByUserIdActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersActionProcessor_1.getUserDirectoryGetUsersActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersByAttributeActionProcessor_1.getUserDirectoryGetUsersByAttributeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryReadAccessTokenActionProcessor_1.getUserDirectoryReadAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRefreshTokenActionProcessor_1.getUserDirectoryRefreshTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRevokeRefreshTokenActionProcessor_1.getUserDirectoryRevokeRefreshTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRequestEmailVerificationActionProcessor_1.getUserDirectoryRequestEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRespondToAuthChallengeActionProcessor_1.getUserDirectoryRespondToAuthChallengeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetAccessTokenActionProcessor_1.getUserDirectorySetAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetPasswordActionProcessor_1.getUserDirectorySetPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetUserAttributesActionProcessor_1.getUserDirectorySetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySignOutUserActionProcessor_1.getUserDirectorySignOutUserActionProcessor)(qpqConfig, dynamicModuleLoader))));
34
36
  });
35
37
  exports.getUserDirectoryActionProcessor = getUserDirectoryActionProcessor;
36
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,mIAAgI;AAChI,uHAAoH;AACpH,mHAAgH;AAChH,uIAAoI;AACpI,iIAA8H;AAC9H,2GAAwG;AACxG,yHAAsH;AACtH,mHAAgH;AAChH,yHAAsH;AACtH,yIAAsI;AACtI,uGAAoG;AACpG,6HAA0H;AAC1H,qHAAkH;AAClH,+GAA4G;AAC5G,uIAAoI;AACpI,mIAAgI;AAChI,mHAAgH;AAChH,6GAA0G;AAC1G,yHAAsH;AAE/G,MAAM,+BAA+B,GAAgC,CAC1E,SAAoB,EACpB,mBAAwC,EACV,EAAE;IAAC,OAAA,+QAC9B,CAAC,MAAM,IAAA,6GAAqD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC7F,CAAC,MAAM,IAAA,iGAA+C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACvF,CAAC,MAAM,IAAA,6FAA6C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACrF,CAAC,MAAM,IAAA,iHAAuD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC/F,CAAC,MAAM,IAAA,2GAAoD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC5F,CAAC,MAAM,IAAA,qFAAyC,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACjF,CAAC,MAAM,IAAA,mGAAgD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACxF,CAAC,MAAM,IAAA,6FAA6C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACrF,CAAC,MAAM,IAAA,mGAAgD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACxF,CAAC,MAAM,IAAA,mHAAwD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAChG,CAAC,MAAM,IAAA,iFAAuC,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC/E,CAAC,MAAM,IAAA,uGAAkD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC1F,CAAC,MAAM,IAAA,+FAA8C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACtF,CAAC,MAAM,IAAA,yFAA2C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACnF,CAAC,MAAM,IAAA,iHAAuD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC/F,CAAC,MAAM,IAAA,6GAAqD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC7F,CAAC,MAAM,IAAA,6FAA6C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACrF,CAAC,MAAM,IAAA,uFAA0C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAClF,CAAC,MAAM,IAAA,mGAAgD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EAC3F,CAAA;EAAA,CAAC;AAvBU,QAAA,+BAA+B,mCAuBzC","sourcesContent":["import { ActionProcessorList, ActionProcessorListResolver, DynamicModuleLoader, QPQConfig } from 'quidproquo-core';\n\nimport { getUserDirectoryAssociateSoftwareTokenActionProcessor } from './getUserDirectoryAssociateSoftwareTokenActionProcessor';\nimport { getUserDirectoryAuthenticateUserActionProcessor } from './getUserDirectoryAuthenticateUserActionProcessor';\nimport { getUserDirectoryChangePasswordActionProcessor } from './getUserDirectoryChangePasswordActionProcessor';\nimport { getUserDirectoryConfirmEmailVerificationActionProcessor } from './getUserDirectoryConfirmEmailVerificationActionProcessor';\nimport { getUserDirectoryConfirmForgotPasswordActionProcessor } from './getUserDirectoryConfirmForgotPasswordActionProcessor';\nimport { getUserDirectoryCreateUserActionProcessor } from './getUserDirectoryCreateUserActionProcessor';\nimport { getUserDirectoryDecodeAccessTokenActionProcessor } from './getUserDirectoryDecodeAccessTokenActionProcessor';\nimport { getUserDirectoryForgotPasswordActionProcessor } from './getUserDirectoryForgotPasswordActionProcessor';\nimport { getUserDirectoryGetUserAttributesActionProcessor } from './getUserDirectoryGetUserAttributesActionProcessor';\nimport { getUserDirectoryGetUserAttributesByUserIdActionProcessor } from './getUserDirectoryGetUserAttributesByUserIdActionProcessor';\nimport { getUserDirectoryGetUsersActionProcessor } from './getUserDirectoryGetUsersActionProcessor';\nimport { getUserDirectoryGetUsersByAttributeActionProcessor } from './getUserDirectoryGetUsersByAttributeActionProcessor';\nimport { getUserDirectoryReadAccessTokenActionProcessor } from './getUserDirectoryReadAccessTokenActionProcessor';\nimport { getUserDirectoryRefreshTokenActionProcessor } from './getUserDirectoryRefreshTokenActionProcessor';\nimport { getUserDirectoryRequestEmailVerificationActionProcessor } from './getUserDirectoryRequestEmailVerificationActionProcessor';\nimport { getUserDirectoryRespondToAuthChallengeActionProcessor } from './getUserDirectoryRespondToAuthChallengeActionProcessor';\nimport { getUserDirectorySetAccessTokenActionProcessor } from './getUserDirectorySetAccessTokenActionProcessor';\nimport { getUserDirectorySetPasswordActionProcessor } from './getUserDirectorySetPasswordActionProcessor';\nimport { getUserDirectorySetUserAttributesActionProcessor } from './getUserDirectorySetUserAttributesActionProcessor';\n\nexport const getUserDirectoryActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n dynamicModuleLoader: DynamicModuleLoader,\n): Promise<ActionProcessorList> => ({\n ...(await getUserDirectoryAssociateSoftwareTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryAuthenticateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryChangePasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryCreateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryDecodeAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesByUserIdActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersByAttributeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryReadAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRequestEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRespondToAuthChallengeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,mIAAgI;AAChI,uHAAoH;AACpH,mHAAgH;AAChH,uIAAoI;AACpI,iIAA8H;AAC9H,2GAAwG;AACxG,yHAAsH;AACtH,mHAAgH;AAChH,yHAAsH;AACtH,yIAAsI;AACtI,uGAAoG;AACpG,6HAA0H;AAC1H,qHAAkH;AAClH,+GAA4G;AAC5G,uIAAoI;AACpI,mIAAgI;AAChI,2HAAwH;AACxH,mHAAgH;AAChH,6GAA0G;AAC1G,yHAAsH;AACtH,6GAA0G;AAEnG,MAAM,+BAA+B,GAAgC,CAC1E,SAAoB,EACpB,mBAAwC,EACV,EAAE;IAAC,OAAA,2SAC9B,CAAC,MAAM,IAAA,6GAAqD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC7F,CAAC,MAAM,IAAA,iGAA+C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACvF,CAAC,MAAM,IAAA,6FAA6C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACrF,CAAC,MAAM,IAAA,iHAAuD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC/F,CAAC,MAAM,IAAA,2GAAoD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC5F,CAAC,MAAM,IAAA,qFAAyC,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACjF,CAAC,MAAM,IAAA,mGAAgD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACxF,CAAC,MAAM,IAAA,6FAA6C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACrF,CAAC,MAAM,IAAA,mGAAgD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACxF,CAAC,MAAM,IAAA,mHAAwD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAChG,CAAC,MAAM,IAAA,iFAAuC,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC/E,CAAC,MAAM,IAAA,uGAAkD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC1F,CAAC,MAAM,IAAA,+FAA8C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACtF,CAAC,MAAM,IAAA,yFAA2C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACnF,CAAC,MAAM,IAAA,qGAAiD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACzF,CAAC,MAAM,IAAA,iHAAuD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC/F,CAAC,MAAM,IAAA,6GAAqD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAC7F,CAAC,MAAM,IAAA,6FAA6C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACrF,CAAC,MAAM,IAAA,uFAA0C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAClF,CAAC,MAAM,IAAA,mGAAgD,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACxF,CAAC,MAAM,IAAA,uFAA0C,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EACrF,CAAA;EAAA,CAAC;AAzBU,QAAA,+BAA+B,mCAyBzC","sourcesContent":["import { ActionProcessorList, ActionProcessorListResolver, DynamicModuleLoader, QPQConfig } from 'quidproquo-core';\n\nimport { getUserDirectoryAssociateSoftwareTokenActionProcessor } from './getUserDirectoryAssociateSoftwareTokenActionProcessor';\nimport { getUserDirectoryAuthenticateUserActionProcessor } from './getUserDirectoryAuthenticateUserActionProcessor';\nimport { getUserDirectoryChangePasswordActionProcessor } from './getUserDirectoryChangePasswordActionProcessor';\nimport { getUserDirectoryConfirmEmailVerificationActionProcessor } from './getUserDirectoryConfirmEmailVerificationActionProcessor';\nimport { getUserDirectoryConfirmForgotPasswordActionProcessor } from './getUserDirectoryConfirmForgotPasswordActionProcessor';\nimport { getUserDirectoryCreateUserActionProcessor } from './getUserDirectoryCreateUserActionProcessor';\nimport { getUserDirectoryDecodeAccessTokenActionProcessor } from './getUserDirectoryDecodeAccessTokenActionProcessor';\nimport { getUserDirectoryForgotPasswordActionProcessor } from './getUserDirectoryForgotPasswordActionProcessor';\nimport { getUserDirectoryGetUserAttributesActionProcessor } from './getUserDirectoryGetUserAttributesActionProcessor';\nimport { getUserDirectoryGetUserAttributesByUserIdActionProcessor } from './getUserDirectoryGetUserAttributesByUserIdActionProcessor';\nimport { getUserDirectoryGetUsersActionProcessor } from './getUserDirectoryGetUsersActionProcessor';\nimport { getUserDirectoryGetUsersByAttributeActionProcessor } from './getUserDirectoryGetUsersByAttributeActionProcessor';\nimport { getUserDirectoryReadAccessTokenActionProcessor } from './getUserDirectoryReadAccessTokenActionProcessor';\nimport { getUserDirectoryRefreshTokenActionProcessor } from './getUserDirectoryRefreshTokenActionProcessor';\nimport { getUserDirectoryRequestEmailVerificationActionProcessor } from './getUserDirectoryRequestEmailVerificationActionProcessor';\nimport { getUserDirectoryRespondToAuthChallengeActionProcessor } from './getUserDirectoryRespondToAuthChallengeActionProcessor';\nimport { getUserDirectoryRevokeRefreshTokenActionProcessor } from './getUserDirectoryRevokeRefreshTokenActionProcessor';\nimport { getUserDirectorySetAccessTokenActionProcessor } from './getUserDirectorySetAccessTokenActionProcessor';\nimport { getUserDirectorySetPasswordActionProcessor } from './getUserDirectorySetPasswordActionProcessor';\nimport { getUserDirectorySetUserAttributesActionProcessor } from './getUserDirectorySetUserAttributesActionProcessor';\nimport { getUserDirectorySignOutUserActionProcessor } from './getUserDirectorySignOutUserActionProcessor';\n\nexport const getUserDirectoryActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n dynamicModuleLoader: DynamicModuleLoader,\n): Promise<ActionProcessorList> => ({\n ...(await getUserDirectoryAssociateSoftwareTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryAuthenticateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryChangePasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryCreateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryDecodeAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesByUserIdActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersByAttributeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryReadAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRevokeRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRequestEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRespondToAuthChallengeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySignOutUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n});\n"]}
@@ -0,0 +1 @@
1
+ export declare const globalSignOut: (accessToken: string, region: string) => Promise<void>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.globalSignOut = void 0;
13
+ const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
14
+ const createAwsClient_1 = require("../createAwsClient");
15
+ // Revokes EVERY refresh token issued to the user who owns this access token. Authorized by
16
+ // the access token itself (no IAM needed, like ChangePassword). Access tokens already minted
17
+ // stay valid until they expire (stateless JWTs), so keep the access-token validity short.
18
+ const globalSignOut = (accessToken, region) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
20
+ region,
21
+ });
22
+ const params = {
23
+ AccessToken: accessToken,
24
+ };
25
+ yield cognitoClient.send(new client_cognito_identity_provider_1.GlobalSignOutCommand(params));
26
+ });
27
+ exports.globalSignOut = globalSignOut;
28
+ //# sourceMappingURL=globalSignOut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalSignOut.js","sourceRoot":"","sources":["../../../../src/logic/cognito/globalSignOut.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gGAA2I;AAE3I,wDAAqD;AAErD,2FAA2F;AAC3F,6FAA6F;AAC7F,0FAA0F;AACnF,MAAM,aAAa,GAAG,CAAO,WAAmB,EAAE,MAAc,EAAiB,EAAE;IACxF,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,gEAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,MAAM,GAA8B;QACxC,WAAW,EAAE,WAAW;KACzB,CAAC;IAEF,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,uDAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAA,CAAC;AAVW,QAAA,aAAa,iBAUxB","sourcesContent":["import { CognitoIdentityProviderClient, GlobalSignOutCommand, GlobalSignOutCommandInput } from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\n\n// Revokes EVERY refresh token issued to the user who owns this access token. Authorized by\n// the access token itself (no IAM needed, like ChangePassword). Access tokens already minted\n// stay valid until they expire (stateless JWTs), so keep the access-token validity short.\nexport const globalSignOut = async (accessToken: string, region: string): Promise<void> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const params: GlobalSignOutCommandInput = {\n AccessToken: accessToken,\n };\n\n await cognitoClient.send(new GlobalSignOutCommand(params));\n};\n"]}
@@ -1,2 +1,4 @@
1
1
  export * from './decodeAccessToken';
2
2
  export * from './decodeValidJwt';
3
+ export * from './globalSignOut';
4
+ export * from './revokeRefreshToken';
@@ -16,4 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./decodeAccessToken"), exports);
18
18
  __exportStar(require("./decodeValidJwt"), exports);
19
+ __exportStar(require("./globalSignOut"), exports);
20
+ __exportStar(require("./revokeRefreshToken"), exports);
19
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/logic/cognito/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,mDAAiC","sourcesContent":["export * from './decodeAccessToken';\nexport * from './decodeValidJwt';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/logic/cognito/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,mDAAiC;AACjC,kDAAgC;AAChC,uDAAqC","sourcesContent":["export * from './decodeAccessToken';\nexport * from './decodeValidJwt';\nexport * from './globalSignOut';\nexport * from './revokeRefreshToken';\n"]}
@@ -33,7 +33,16 @@ const refreshToken = (userPoolId, clientId, region, username, refreshToken) => _
33
33
  // Time we issued the request
34
34
  const issueDateTime = new Date().toISOString();
35
35
  const response = yield cognitoClient.send(new client_cognito_identity_provider_1.AdminInitiateAuthCommand(params));
36
- return (0, transformCognitoResponse_1.cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo)(response, issueDateTime);
36
+ const authResponse = (0, transformCognitoResponse_1.cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo)(response, issueDateTime);
37
+ // Cognito's REFRESH_TOKEN_AUTH flow does NOT return a refresh token — the existing one stays
38
+ // valid and is reused — so AuthenticationResult.RefreshToken is undefined here. Carry the
39
+ // caller's refresh token forward so the client keeps a usable session; without this it's
40
+ // dropped after the first refresh and the session can never refresh again. (If refresh-token
41
+ // rotation is ever enabled, Cognito DOES return a new one — then we keep that instead.)
42
+ if (authResponse.authenticationInfo && !authResponse.authenticationInfo.refreshToken) {
43
+ authResponse.authenticationInfo.refreshToken = refreshToken;
44
+ }
45
+ return authResponse;
37
46
  });
38
47
  exports.refreshToken = refreshToken;
39
48
  //# sourceMappingURL=refreshToken.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"refreshToken.js","sourceRoot":"","sources":["../../../../src/logic/cognito/refreshToken.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,gGAKmD;AAEnD,wDAAqD;AACrD,qEAAkE;AAClE,+EAA2G;AAC3G,uEAAoE;AAE7D,MAAM,YAAY,GAAG,CAC1B,UAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,YAAoB,EACe,EAAE;IACrC,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,gEAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,IAAA,iDAAuB,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,IAAA,yCAAmB,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAkC;QAC5C,QAAQ,EAAE,+CAAY,CAAC,kBAAkB;QACzC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,QAAQ;QAElB,cAAc,EAAE;YACd,aAAa,EAAE,YAAY;YAC3B,WAAW,EAAE,UAAU;SACxB;KACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,2DAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhF,OAAO,IAAA,kFAAuD,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC1F,CAAC,CAAA,CAAC;AA9BW,QAAA,YAAY,gBA8BvB","sourcesContent":["import { AuthenticateUserResponse } from 'quidproquo-core';\n\nimport {\n AdminInitiateAuthCommand,\n AdminInitiateAuthCommandInput,\n AuthFlowType,\n CognitoIdentityProviderClient,\n} from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { calculateSecretHash } from './utils/calculateSecretHash';\nimport { cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo } from './utils/transformCognitoResponse';\nimport { getUserPoolClientSecret } from './getUserPoolClientSecret';\n\nexport const refreshToken = async (\n userPoolId: string,\n clientId: string,\n region: string,\n username: string,\n refreshToken: string,\n): Promise<AuthenticateUserResponse> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);\n const secretHash = calculateSecretHash(username, clientId, clientSecret);\n\n const params: AdminInitiateAuthCommandInput = {\n AuthFlow: AuthFlowType.REFRESH_TOKEN_AUTH,\n UserPoolId: userPoolId,\n ClientId: clientId,\n\n AuthParameters: {\n REFRESH_TOKEN: refreshToken,\n SECRET_HASH: secretHash,\n },\n };\n\n // Time we issued the request\n const issueDateTime = new Date().toISOString();\n const response = await cognitoClient.send(new AdminInitiateAuthCommand(params));\n\n return cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo(response, issueDateTime);\n};\n"]}
1
+ {"version":3,"file":"refreshToken.js","sourceRoot":"","sources":["../../../../src/logic/cognito/refreshToken.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,gGAKmD;AAEnD,wDAAqD;AACrD,qEAAkE;AAClE,+EAA2G;AAC3G,uEAAoE;AAE7D,MAAM,YAAY,GAAG,CAC1B,UAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,YAAoB,EACe,EAAE;IACrC,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,gEAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,IAAA,iDAAuB,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,IAAA,yCAAmB,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAkC;QAC5C,QAAQ,EAAE,+CAAY,CAAC,kBAAkB;QACzC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,QAAQ;QAElB,cAAc,EAAE;YACd,aAAa,EAAE,YAAY;YAC3B,WAAW,EAAE,UAAU;SACxB;KACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,2DAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhF,MAAM,YAAY,GAAG,IAAA,kFAAuD,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEtG,6FAA6F;IAC7F,0FAA0F;IAC1F,yFAAyF;IACzF,6FAA6F;IAC7F,wFAAwF;IACxF,IAAI,YAAY,CAAC,kBAAkB,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QACrF,YAAY,CAAC,kBAAkB,CAAC,YAAY,GAAG,YAAY,CAAC;IAC9D,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAA,CAAC;AAzCW,QAAA,YAAY,gBAyCvB","sourcesContent":["import { AuthenticateUserResponse } from 'quidproquo-core';\n\nimport {\n AdminInitiateAuthCommand,\n AdminInitiateAuthCommandInput,\n AuthFlowType,\n CognitoIdentityProviderClient,\n} from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { calculateSecretHash } from './utils/calculateSecretHash';\nimport { cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo } from './utils/transformCognitoResponse';\nimport { getUserPoolClientSecret } from './getUserPoolClientSecret';\n\nexport const refreshToken = async (\n userPoolId: string,\n clientId: string,\n region: string,\n username: string,\n refreshToken: string,\n): Promise<AuthenticateUserResponse> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);\n const secretHash = calculateSecretHash(username, clientId, clientSecret);\n\n const params: AdminInitiateAuthCommandInput = {\n AuthFlow: AuthFlowType.REFRESH_TOKEN_AUTH,\n UserPoolId: userPoolId,\n ClientId: clientId,\n\n AuthParameters: {\n REFRESH_TOKEN: refreshToken,\n SECRET_HASH: secretHash,\n },\n };\n\n // Time we issued the request\n const issueDateTime = new Date().toISOString();\n const response = await cognitoClient.send(new AdminInitiateAuthCommand(params));\n\n const authResponse = cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo(response, issueDateTime);\n\n // Cognito's REFRESH_TOKEN_AUTH flow does NOT return a refresh token — the existing one stays\n // valid and is reused — so AuthenticationResult.RefreshToken is undefined here. Carry the\n // caller's refresh token forward so the client keeps a usable session; without this it's\n // dropped after the first refresh and the session can never refresh again. (If refresh-token\n // rotation is ever enabled, Cognito DOES return a new one — then we keep that instead.)\n if (authResponse.authenticationInfo && !authResponse.authenticationInfo.refreshToken) {\n authResponse.authenticationInfo.refreshToken = refreshToken;\n }\n\n return authResponse;\n};\n"]}
@@ -0,0 +1 @@
1
+ export declare const revokeRefreshToken: (userPoolId: string, clientId: string, region: string, refreshToken: string) => Promise<void>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.revokeRefreshToken = void 0;
13
+ const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
14
+ const createAwsClient_1 = require("../createAwsClient");
15
+ const getUserPoolClientSecret_1 = require("./getUserPoolClientSecret");
16
+ // Revokes a single refresh token (and its access-token lineage) via Cognito RevokeToken.
17
+ // The app client has a secret (same one the refresh flow uses), so it must be supplied.
18
+ // Requires token revocation to be enabled on the app client (the CDK default) — a disabled
19
+ // client surfaces as UnsupportedOperationException/UnsupportedTokenTypeException.
20
+ const revokeRefreshToken = (userPoolId, clientId, region, refreshToken) => __awaiter(void 0, void 0, void 0, function* () {
21
+ const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
22
+ region,
23
+ });
24
+ const clientSecret = yield (0, getUserPoolClientSecret_1.getUserPoolClientSecret)(userPoolId, clientId, region);
25
+ const params = {
26
+ Token: refreshToken,
27
+ ClientId: clientId,
28
+ ClientSecret: clientSecret,
29
+ };
30
+ yield cognitoClient.send(new client_cognito_identity_provider_1.RevokeTokenCommand(params));
31
+ });
32
+ exports.revokeRefreshToken = revokeRefreshToken;
33
+ //# sourceMappingURL=revokeRefreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revokeRefreshToken.js","sourceRoot":"","sources":["../../../../src/logic/cognito/revokeRefreshToken.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gGAAuI;AAEvI,wDAAqD;AACrD,uEAAoE;AAEpE,yFAAyF;AACzF,wFAAwF;AACxF,2FAA2F;AAC3F,kFAAkF;AAC3E,MAAM,kBAAkB,GAAG,CAAO,UAAkB,EAAE,QAAgB,EAAE,MAAc,EAAE,YAAoB,EAAiB,EAAE;IACpI,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,gEAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,IAAA,iDAAuB,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEjF,MAAM,MAAM,GAA4B;QACtC,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,YAAY;KAC3B,CAAC;IAEF,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,qDAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAA,CAAC;AAdW,QAAA,kBAAkB,sBAc7B","sourcesContent":["import { CognitoIdentityProviderClient, RevokeTokenCommand, RevokeTokenCommandInput } from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { getUserPoolClientSecret } from './getUserPoolClientSecret';\n\n// Revokes a single refresh token (and its access-token lineage) via Cognito RevokeToken.\n// The app client has a secret (same one the refresh flow uses), so it must be supplied.\n// Requires token revocation to be enabled on the app client (the CDK default) — a disabled\n// client surfaces as UnsupportedOperationException/UnsupportedTokenTypeException.\nexport const revokeRefreshToken = async (userPoolId: string, clientId: string, region: string, refreshToken: string): Promise<void> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);\n\n const params: RevokeTokenCommandInput = {\n Token: refreshToken,\n ClientId: clientId,\n ClientSecret: clientSecret,\n };\n\n await cognitoClient.send(new RevokeTokenCommand(params));\n};\n"]}
@@ -1 +1 @@
1
- export declare const generatePresignedUploadUrl: (bucketName: string, objectKey: string, region: string, expirationMs: number, correlationId?: string, contentType?: string) => Promise<string>;
1
+ export declare const generatePresignedUploadUrl: (bucketName: string, objectKey: string, region: string, expirationMs: number, correlationId?: string, contentType?: string, contentDisposition?: string) => Promise<string>;
@@ -43,7 +43,7 @@ const createAwsClient_1 = require("../createAwsClient");
43
43
  // fields: presignedPost.fields
44
44
  // };
45
45
  // };
46
- const generatePresignedUploadUrl = (bucketName, objectKey, region, expirationMs, correlationId, contentType) => __awaiter(void 0, void 0, void 0, function* () {
46
+ const generatePresignedUploadUrl = (bucketName, objectKey, region, expirationMs, correlationId, contentType, contentDisposition) => __awaiter(void 0, void 0, void 0, function* () {
47
47
  // WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the
48
48
  // presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed
49
49
  // URL, which never matches the real body the browser PUTs — S3 then rejects the upload and
@@ -56,6 +56,9 @@ const generatePresignedUploadUrl = (bucketName, objectKey, region, expirationMs,
56
56
  Bucket: bucketName,
57
57
  Key: objectKey,
58
58
  ContentType: contentType,
59
+ // Signed into the URL: the client's PUT must send the matching Content-Disposition header, and
60
+ // S3 stores it so later GETs serve it back (e.g. 'inline' to preview a PDF instead of downloading).
61
+ ContentDisposition: contentDisposition,
59
62
  Metadata: Object.assign(Object.assign({}, (correlationId && { 'correlation-id': correlationId })), { 'upload-timestamp': Date.now().toString() }),
60
63
  });
61
64
  const url = yield (0, s3_request_presigner_1.getSignedUrl)(s3Client, putObjectCommand, {
@@ -1 +1 @@
1
- {"version":3,"file":"generatePresignedUploadUrl.js","sourceRoot":"","sources":["../../../../src/logic/s3/generatePresignedUploadUrl.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAgE;AAChE,wEAA6D;AAE7D,oEAAoE;AACpE,wDAAqD;AAErD,wDAAwD;AACxD,wBAAwB;AACxB,uBAAuB;AACvB,oBAAoB;AACpB,0BAA0B;AAC1B,qCAAqC;AACrC,sCAAsC;AACtC,mEAAmE;AACnE,4DAA4D;AAE5D,kCAAkC;AAElC,8CAA8C;AAC9C,uBAAuB;AACvB,6DAA6D;AAC7D,MAAM;AAEN,iDAAiD;AACjD,wBAAwB;AACxB,kEAAkE;AAClE,MAAM;AAEN,gEAAgE;AAChE,0BAA0B;AAC1B,sBAAsB;AACtB,8BAA8B;AAC9B,gDAAgD;AAChD,QAAQ;AAER,aAAa;AACb,8BAA8B;AAC9B,mCAAmC;AACnC,OAAO;AACP,KAAK;AAEE,MAAM,0BAA0B,GAAG,CACxC,UAAkB,EAClB,SAAiB,EACjB,MAAc,EACd,YAAoB,EACpB,aAAsB,EACtB,WAAoB,EACH,EAAE;IACnB,oFAAoF;IACpF,yFAAyF;IACzF,2FAA2F;IAC3F,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,IAAA,iCAAe,EAAC,oBAAQ,EAAE;QACzC,MAAM;QACN,0BAA0B,EAAE,eAAe;KAC5C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,4BAAgB,CAAC;QAC5C,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,SAAS;QACd,WAAW,EAAE,WAAW;QAExB,QAAQ,kCACH,CAAC,aAAa,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,KACzD,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,GAC1C;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,IAAA,mCAAY,EAAC,QAAQ,EAAE,gBAAgB,EAAE;QACzD,SAAS,EAAE,YAAY,GAAG,IAAI;KAC/B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAA,CAAC;AAjCW,QAAA,0BAA0B,8BAiCrC","sourcesContent":["import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\n\n// import { createPresignedPost } from '@aws-sdk/s3-presigned-post';\nimport { createAwsClient } from '../createAwsClient';\n\n// export const generatePresignedUploadFormUrl = async (\n// bucketName: string,\n// objectKey: string,\n// region: string,\n// expirationMs: number,\n// contentType: string | undefined,\n// maxSizeBytes?: number | undefined\n// ): Promise<{ url: string; fields: Record<string, string> }> => {\n// const s3Client = createAwsClient(S3Client, { region });\n\n// const conditions: any[] = [];\n\n// // Add content type condition if provided\n// if (contentType) {\n// conditions.push(['eq', '$Content-Type', contentType]);\n// }\n\n// // Add file size limit condition if provided\n// if (maxSizeBytes) {\n// conditions.push(['content-length-range', 0, maxSizeBytes]);\n// }\n\n// const presignedPost = await createPresignedPost(s3Client, {\n// Bucket: bucketName,\n// Key: objectKey,\n// Conditions: conditions,\n// Expires: Math.floor(expirationMs / 1000),\n// });\n\n// return {\n// url: presignedPost.url,\n// fields: presignedPost.fields\n// };\n// };\n\nexport const generatePresignedUploadUrl = async (\n bucketName: string,\n objectKey: string,\n region: string,\n expirationMs: number,\n correlationId?: string,\n contentType?: string,\n): Promise<string> => {\n // WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the\n // presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed\n // URL, which never matches the real body the browser PUTs — S3 then rejects the upload and\n // the failure surfaces in the browser as a CORS error (the error response has no ACAO header).\n const s3Client = createAwsClient(S3Client, {\n region,\n requestChecksumCalculation: 'WHEN_REQUIRED',\n });\n\n const putObjectCommand = new PutObjectCommand({\n Bucket: bucketName,\n Key: objectKey,\n ContentType: contentType,\n\n Metadata: {\n ...(correlationId && { 'correlation-id': correlationId }),\n 'upload-timestamp': Date.now().toString(),\n },\n });\n\n const url = await getSignedUrl(s3Client, putObjectCommand, {\n expiresIn: expirationMs / 1000,\n });\n\n return url;\n};\n"]}
1
+ {"version":3,"file":"generatePresignedUploadUrl.js","sourceRoot":"","sources":["../../../../src/logic/s3/generatePresignedUploadUrl.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAgE;AAChE,wEAA6D;AAE7D,oEAAoE;AACpE,wDAAqD;AAErD,wDAAwD;AACxD,wBAAwB;AACxB,uBAAuB;AACvB,oBAAoB;AACpB,0BAA0B;AAC1B,qCAAqC;AACrC,sCAAsC;AACtC,mEAAmE;AACnE,4DAA4D;AAE5D,kCAAkC;AAElC,8CAA8C;AAC9C,uBAAuB;AACvB,6DAA6D;AAC7D,MAAM;AAEN,iDAAiD;AACjD,wBAAwB;AACxB,kEAAkE;AAClE,MAAM;AAEN,gEAAgE;AAChE,0BAA0B;AAC1B,sBAAsB;AACtB,8BAA8B;AAC9B,gDAAgD;AAChD,QAAQ;AAER,aAAa;AACb,8BAA8B;AAC9B,mCAAmC;AACnC,OAAO;AACP,KAAK;AAEE,MAAM,0BAA0B,GAAG,CACxC,UAAkB,EAClB,SAAiB,EACjB,MAAc,EACd,YAAoB,EACpB,aAAsB,EACtB,WAAoB,EACpB,kBAA2B,EACV,EAAE;IACnB,oFAAoF;IACpF,yFAAyF;IACzF,2FAA2F;IAC3F,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,IAAA,iCAAe,EAAC,oBAAQ,EAAE;QACzC,MAAM;QACN,0BAA0B,EAAE,eAAe;KAC5C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,4BAAgB,CAAC;QAC5C,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,SAAS;QACd,WAAW,EAAE,WAAW;QACxB,+FAA+F;QAC/F,oGAAoG;QACpG,kBAAkB,EAAE,kBAAkB;QAEtC,QAAQ,kCACH,CAAC,aAAa,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,KACzD,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,GAC1C;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,IAAA,mCAAY,EAAC,QAAQ,EAAE,gBAAgB,EAAE;QACzD,SAAS,EAAE,YAAY,GAAG,IAAI;KAC/B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAA,CAAC;AArCW,QAAA,0BAA0B,8BAqCrC","sourcesContent":["import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\n\n// import { createPresignedPost } from '@aws-sdk/s3-presigned-post';\nimport { createAwsClient } from '../createAwsClient';\n\n// export const generatePresignedUploadFormUrl = async (\n// bucketName: string,\n// objectKey: string,\n// region: string,\n// expirationMs: number,\n// contentType: string | undefined,\n// maxSizeBytes?: number | undefined\n// ): Promise<{ url: string; fields: Record<string, string> }> => {\n// const s3Client = createAwsClient(S3Client, { region });\n\n// const conditions: any[] = [];\n\n// // Add content type condition if provided\n// if (contentType) {\n// conditions.push(['eq', '$Content-Type', contentType]);\n// }\n\n// // Add file size limit condition if provided\n// if (maxSizeBytes) {\n// conditions.push(['content-length-range', 0, maxSizeBytes]);\n// }\n\n// const presignedPost = await createPresignedPost(s3Client, {\n// Bucket: bucketName,\n// Key: objectKey,\n// Conditions: conditions,\n// Expires: Math.floor(expirationMs / 1000),\n// });\n\n// return {\n// url: presignedPost.url,\n// fields: presignedPost.fields\n// };\n// };\n\nexport const generatePresignedUploadUrl = async (\n bucketName: string,\n objectKey: string,\n region: string,\n expirationMs: number,\n correlationId?: string,\n contentType?: string,\n contentDisposition?: string,\n): Promise<string> => {\n // WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the\n // presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed\n // URL, which never matches the real body the browser PUTs — S3 then rejects the upload and\n // the failure surfaces in the browser as a CORS error (the error response has no ACAO header).\n const s3Client = createAwsClient(S3Client, {\n region,\n requestChecksumCalculation: 'WHEN_REQUIRED',\n });\n\n const putObjectCommand = new PutObjectCommand({\n Bucket: bucketName,\n Key: objectKey,\n ContentType: contentType,\n // Signed into the URL: the client's PUT must send the matching Content-Disposition header, and\n // S3 stores it so later GETs serve it back (e.g. 'inline' to preview a PDF instead of downloading).\n ContentDisposition: contentDisposition,\n\n Metadata: {\n ...(correlationId && { 'correlation-id': correlationId }),\n 'upload-timestamp': Date.now().toString(),\n },\n });\n\n const url = await getSignedUrl(s3Client, putObjectCommand, {\n expiresIn: expirationMs / 1000,\n });\n\n return url;\n};\n"]}
@@ -6,13 +6,13 @@ import { resolveStorageDriveBucketName } from './utils';
6
6
  // SigV4 presigned URLs cannot expire more than 7 days in the future
7
7
  const maxExpirationMs = 7 * 24 * 60 * 60 * 1000;
8
8
  const getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig) => {
9
- return async ({ drive, filepath, expirationMs, contentType, scope }, session) => {
9
+ return async ({ drive, filepath, expirationMs, contentType, contentDisposition, scope }, session) => {
10
10
  if (expirationMs > maxExpirationMs) {
11
11
  return actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong, 'Expiration exceeds the 7 day maximum for presigned URLs');
12
12
  }
13
13
  try {
14
14
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
15
- const url = await generatePresignedUploadUrl(s3BucketName, composeScopedFilePath(scope, filepath), qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType);
15
+ const url = await generatePresignedUploadUrl(s3BucketName, composeScopedFilePath(scope, filepath), qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType, contentDisposition);
16
16
  return actionResult(url);
17
17
  }
18
18
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"getFileGenerateTemporaryUploadSecureUrlActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAoD,iBAAiB,EAAE,gCAAgC,EAAa,MAAM,iBAAiB,CAAC;AACnJ,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,EAEd,iDAAiD,GAClD,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,oEAAoE;AACpE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,8CAA8C,GAAG,CAAC,SAAoB,EAAuD,EAAE;IACnI,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE;QAC9E,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,iBAAiB,CACtB,iDAAiD,CAAC,iBAAiB,EACnE,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,0BAA0B,CAC1C,YAAY,EACZ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,YAAY,EACZ,OAAO,CAAC,WAAW,EACnB,WAAW,CACZ,CAAC;YAEF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,uDAAuD;YACvD,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,iDAAiD,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC/H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sDAAsD,GAAgC,KAAK,EACtG,SAAoB,EACU,EAAE,CAAC,CAAC;IAClC,CAAC,cAAc,CAAC,gCAAgC,CAAC,EAAE,8CAA8C,CAAC,SAAS,CAAC;CAC7G,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport { ActionProcessorList, ActionProcessorListResolver, actionResultError, actionResultErrorFromCaughtError, QPQConfig } from 'quidproquo-core';\nimport {\n actionResult,\n composeScopedFilePath,\n FileActionType,\n FileGenerateTemporaryUploadSecureUrlActionProcessor,\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { generatePresignedUploadUrl } from '../../../logic/s3/generatePresignedUploadUrl';\nimport { resolveStorageDriveBucketName } from './utils';\n\n// SigV4 presigned URLs cannot expire more than 7 days in the future\nconst maxExpirationMs = 7 * 24 * 60 * 60 * 1000;\n\nconst getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig: QPQConfig): FileGenerateTemporaryUploadSecureUrlActionProcessor => {\n return async ({ drive, filepath, expirationMs, contentType, scope }, session) => {\n if (expirationMs > maxExpirationMs) {\n return actionResultError(\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong,\n 'Expiration exceeds the 7 day maximum for presigned URLs',\n );\n }\n\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const url = await generatePresignedUploadUrl(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n expirationMs,\n session.correlation,\n contentType,\n );\n\n return actionResult(url);\n } catch (error: unknown) {\n // Name-keyed, not instanceof: under npm link / module federation the\n // error can come from another copy of quidproquo-core.\n return actionResultErrorFromCaughtError(error, {\n InvalidScopeError: (error) => actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileGenerateTemporaryUploadSecureUrlActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [FileActionType.GenerateTemporaryUploadSecureUrl]: getProcessFileGenerateTemporaryUploadSecureUrl(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileGenerateTemporaryUploadSecureUrlActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAoD,iBAAiB,EAAE,gCAAgC,EAAa,MAAM,iBAAiB,CAAC;AACnJ,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,EAEd,iDAAiD,GAClD,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,oEAAoE;AACpE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,8CAA8C,GAAG,CAAC,SAAoB,EAAuD,EAAE;IACnI,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE;QAClG,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,iBAAiB,CACtB,iDAAiD,CAAC,iBAAiB,EACnE,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,0BAA0B,CAC1C,YAAY,EACZ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,YAAY,EACZ,OAAO,CAAC,WAAW,EACnB,WAAW,EACX,kBAAkB,CACnB,CAAC;YAEF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,uDAAuD;YACvD,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,iDAAiD,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC/H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sDAAsD,GAAgC,KAAK,EACtG,SAAoB,EACU,EAAE,CAAC,CAAC;IAClC,CAAC,cAAc,CAAC,gCAAgC,CAAC,EAAE,8CAA8C,CAAC,SAAS,CAAC;CAC7G,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport { ActionProcessorList, ActionProcessorListResolver, actionResultError, actionResultErrorFromCaughtError, QPQConfig } from 'quidproquo-core';\nimport {\n actionResult,\n composeScopedFilePath,\n FileActionType,\n FileGenerateTemporaryUploadSecureUrlActionProcessor,\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { generatePresignedUploadUrl } from '../../../logic/s3/generatePresignedUploadUrl';\nimport { resolveStorageDriveBucketName } from './utils';\n\n// SigV4 presigned URLs cannot expire more than 7 days in the future\nconst maxExpirationMs = 7 * 24 * 60 * 60 * 1000;\n\nconst getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig: QPQConfig): FileGenerateTemporaryUploadSecureUrlActionProcessor => {\n return async ({ drive, filepath, expirationMs, contentType, contentDisposition, scope }, session) => {\n if (expirationMs > maxExpirationMs) {\n return actionResultError(\n FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong,\n 'Expiration exceeds the 7 day maximum for presigned URLs',\n );\n }\n\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const url = await generatePresignedUploadUrl(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n expirationMs,\n session.correlation,\n contentType,\n contentDisposition,\n );\n\n return actionResult(url);\n } catch (error: unknown) {\n // Name-keyed, not instanceof: under npm link / module federation the\n // error can come from another copy of quidproquo-core.\n return actionResultErrorFromCaughtError(error, {\n InvalidScopeError: (error) => actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileGenerateTemporaryUploadSecureUrlActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [FileActionType.GenerateTemporaryUploadSecureUrl]: getProcessFileGenerateTemporaryUploadSecureUrl(qpqConfig),\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getUserDirectoryRevokeRefreshTokenActionProcessor: ActionProcessorListResolver;
@@ -0,0 +1,26 @@
1
+ import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, UserDirectoryActionType, UserDirectoryRevokeRefreshTokenErrorTypeEnum, } from 'quidproquo-core';
3
+ import { getCFExportNameUserPoolClientIdFromConfig, getCFExportNameUserPoolIdFromConfig } from '../../../awsNamingUtils';
4
+ import { getExportedValue } from '../../../logic/cloudformation/getExportedValue';
5
+ import { revokeRefreshToken } from '../../../logic/cognito/revokeRefreshToken';
6
+ const getProcessRevokeRefreshToken = (qpqConfig) => {
7
+ return async ({ userDirectoryName, refreshToken }) => {
8
+ const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
9
+ const userPoolId = await getExportedValue(getCFExportNameUserPoolIdFromConfig(userDirectoryName, qpqConfig), region);
10
+ const userPoolClientId = await getExportedValue(getCFExportNameUserPoolClientIdFromConfig(userDirectoryName, qpqConfig), region);
11
+ try {
12
+ await revokeRefreshToken(userPoolId, userPoolClientId, region, refreshToken);
13
+ return actionResult(void 0);
14
+ }
15
+ catch (error) {
16
+ return actionResultErrorFromCaughtError(error, {
17
+ NotAuthorizedException: () => actionResultError(UserDirectoryRevokeRefreshTokenErrorTypeEnum.Unauthorized, 'Refresh token is invalid or already revoked'),
18
+ TooManyRequestsException: () => actionResultError(UserDirectoryRevokeRefreshTokenErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
19
+ });
20
+ }
21
+ };
22
+ };
23
+ export const getUserDirectoryRevokeRefreshTokenActionProcessor = async (qpqConfig) => ({
24
+ [UserDirectoryActionType.RevokeRefreshToken]: getProcessRevokeRefreshToken(qpqConfig),
25
+ });
26
+ //# sourceMappingURL=getUserDirectoryRevokeRefreshTokenActionProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUserDirectoryRevokeRefreshTokenActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/getUserDirectoryRevokeRefreshTokenActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAEhC,uBAAuB,EAEvB,4CAA4C,GAC7C,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yCAAyC,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,MAAM,4BAA4B,GAAG,CAAC,SAAoB,EAAkD,EAAE;IAC5G,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAE7E,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,mCAAmC,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAErH,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,yCAAyC,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAEjI,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAE7E,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,sBAAsB,EAAE,GAAG,EAAE,CAC3B,iBAAiB,CAAC,4CAA4C,CAAC,YAAY,EAAE,6CAA6C,CAAC;gBAC7H,wBAAwB,EAAE,GAAG,EAAE,CAC7B,iBAAiB,CAAC,4CAA4C,CAAC,aAAa,EAAE,2CAA2C,CAAC;aAC7H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iDAAiD,GAAgC,KAAK,EACjG,SAAoB,EACU,EAAE,CAAC,CAAC;IAClC,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,EAAE,4BAA4B,CAAC,SAAS,CAAC;CACtF,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n QPQConfig,\n UserDirectoryActionType,\n UserDirectoryRevokeRefreshTokenActionProcessor,\n UserDirectoryRevokeRefreshTokenErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { getCFExportNameUserPoolClientIdFromConfig, getCFExportNameUserPoolIdFromConfig } from '../../../awsNamingUtils';\nimport { getExportedValue } from '../../../logic/cloudformation/getExportedValue';\nimport { revokeRefreshToken } from '../../../logic/cognito/revokeRefreshToken';\n\nconst getProcessRevokeRefreshToken = (qpqConfig: QPQConfig): UserDirectoryRevokeRefreshTokenActionProcessor => {\n return async ({ userDirectoryName, refreshToken }) => {\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n\n const userPoolId = await getExportedValue(getCFExportNameUserPoolIdFromConfig(userDirectoryName, qpqConfig), region);\n\n const userPoolClientId = await getExportedValue(getCFExportNameUserPoolClientIdFromConfig(userDirectoryName, qpqConfig), region);\n\n try {\n await revokeRefreshToken(userPoolId, userPoolClientId, region, refreshToken);\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n NotAuthorizedException: () =>\n actionResultError(UserDirectoryRevokeRefreshTokenErrorTypeEnum.Unauthorized, 'Refresh token is invalid or already revoked'),\n TooManyRequestsException: () =>\n actionResultError(UserDirectoryRevokeRefreshTokenErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),\n });\n }\n };\n};\n\nexport const getUserDirectoryRevokeRefreshTokenActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [UserDirectoryActionType.RevokeRefreshToken]: getProcessRevokeRefreshToken(qpqConfig),\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getUserDirectorySignOutUserActionProcessor: ActionProcessorListResolver;
@@ -0,0 +1,22 @@
1
+ import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, UserDirectoryActionType, UserDirectorySignOutUserErrorTypeEnum, } from 'quidproquo-core';
3
+ import { globalSignOut } from '../../../logic/cognito/globalSignOut';
4
+ const getProcessSignOutUser = (qpqConfig) => {
5
+ return async ({ accessToken }) => {
6
+ const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
7
+ try {
8
+ await globalSignOut(accessToken, region);
9
+ return actionResult(void 0);
10
+ }
11
+ catch (error) {
12
+ return actionResultErrorFromCaughtError(error, {
13
+ NotAuthorizedException: () => actionResultError(UserDirectorySignOutUserErrorTypeEnum.Unauthorized, 'Access token is invalid or has expired'),
14
+ TooManyRequestsException: () => actionResultError(UserDirectorySignOutUserErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
15
+ });
16
+ }
17
+ };
18
+ };
19
+ export const getUserDirectorySignOutUserActionProcessor = async (qpqConfig) => ({
20
+ [UserDirectoryActionType.SignOutUser]: getProcessSignOutUser(qpqConfig),
21
+ });
22
+ //# sourceMappingURL=getUserDirectorySignOutUserActionProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUserDirectorySignOutUserActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/getUserDirectorySignOutUserActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAEhC,uBAAuB,EAEvB,qCAAqC,GACtC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,MAAM,qBAAqB,GAAG,CAAC,SAAoB,EAA2C,EAAE;IAC9F,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAE7E,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEzC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,sBAAsB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,YAAY,EAAE,wCAAwC,CAAC;gBAC7I,wBAAwB,EAAE,GAAG,EAAE,CAC7B,iBAAiB,CAAC,qCAAqC,CAAC,aAAa,EAAE,2CAA2C,CAAC;aACtH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0CAA0C,GAAgC,KAAK,EAC1F,SAAoB,EACU,EAAE,CAAC,CAAC;IAClC,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC;CACxE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n QPQConfig,\n UserDirectoryActionType,\n UserDirectorySignOutUserActionProcessor,\n UserDirectorySignOutUserErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { globalSignOut } from '../../../logic/cognito/globalSignOut';\n\nconst getProcessSignOutUser = (qpqConfig: QPQConfig): UserDirectorySignOutUserActionProcessor => {\n return async ({ accessToken }) => {\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n\n try {\n await globalSignOut(accessToken, region);\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n NotAuthorizedException: () => actionResultError(UserDirectorySignOutUserErrorTypeEnum.Unauthorized, 'Access token is invalid or has expired'),\n TooManyRequestsException: () =>\n actionResultError(UserDirectorySignOutUserErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),\n });\n }\n };\n};\n\nexport const getUserDirectorySignOutUserActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [UserDirectoryActionType.SignOutUser]: getProcessSignOutUser(qpqConfig),\n});\n"]}
@@ -14,9 +14,11 @@ import { getUserDirectoryReadAccessTokenActionProcessor } from './getUserDirecto
14
14
  import { getUserDirectoryRefreshTokenActionProcessor } from './getUserDirectoryRefreshTokenActionProcessor';
15
15
  import { getUserDirectoryRequestEmailVerificationActionProcessor } from './getUserDirectoryRequestEmailVerificationActionProcessor';
16
16
  import { getUserDirectoryRespondToAuthChallengeActionProcessor } from './getUserDirectoryRespondToAuthChallengeActionProcessor';
17
+ import { getUserDirectoryRevokeRefreshTokenActionProcessor } from './getUserDirectoryRevokeRefreshTokenActionProcessor';
17
18
  import { getUserDirectorySetAccessTokenActionProcessor } from './getUserDirectorySetAccessTokenActionProcessor';
18
19
  import { getUserDirectorySetPasswordActionProcessor } from './getUserDirectorySetPasswordActionProcessor';
19
20
  import { getUserDirectorySetUserAttributesActionProcessor } from './getUserDirectorySetUserAttributesActionProcessor';
21
+ import { getUserDirectorySignOutUserActionProcessor } from './getUserDirectorySignOutUserActionProcessor';
20
22
  export const getUserDirectoryActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
21
23
  ...(await getUserDirectoryAssociateSoftwareTokenActionProcessor(qpqConfig, dynamicModuleLoader)),
22
24
  ...(await getUserDirectoryAuthenticateUserActionProcessor(qpqConfig, dynamicModuleLoader)),
@@ -32,10 +34,12 @@ export const getUserDirectoryActionProcessor = async (qpqConfig, dynamicModuleLo
32
34
  ...(await getUserDirectoryGetUsersByAttributeActionProcessor(qpqConfig, dynamicModuleLoader)),
33
35
  ...(await getUserDirectoryReadAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),
34
36
  ...(await getUserDirectoryRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),
37
+ ...(await getUserDirectoryRevokeRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),
35
38
  ...(await getUserDirectoryRequestEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),
36
39
  ...(await getUserDirectoryRespondToAuthChallengeActionProcessor(qpqConfig, dynamicModuleLoader)),
37
40
  ...(await getUserDirectorySetAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),
38
41
  ...(await getUserDirectorySetPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),
39
42
  ...(await getUserDirectorySetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),
43
+ ...(await getUserDirectorySignOutUserActionProcessor(qpqConfig, dynamicModuleLoader)),
40
44
  });
41
45
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qDAAqD,EAAE,MAAM,yDAAyD,CAAC;AAChI,OAAO,EAAE,+CAA+C,EAAE,MAAM,mDAAmD,CAAC;AACpH,OAAO,EAAE,6CAA6C,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,uDAAuD,EAAE,MAAM,2DAA2D,CAAC;AACpI,OAAO,EAAE,oDAAoD,EAAE,MAAM,wDAAwD,CAAC;AAC9H,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,gDAAgD,EAAE,MAAM,oDAAoD,CAAC;AACtH,OAAO,EAAE,6CAA6C,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,gDAAgD,EAAE,MAAM,oDAAoD,CAAC;AACtH,OAAO,EAAE,wDAAwD,EAAE,MAAM,4DAA4D,CAAC;AACtI,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAC;AACpG,OAAO,EAAE,kDAAkD,EAAE,MAAM,sDAAsD,CAAC;AAC1H,OAAO,EAAE,8CAA8C,EAAE,MAAM,kDAAkD,CAAC;AAClH,OAAO,EAAE,2CAA2C,EAAE,MAAM,+CAA+C,CAAC;AAC5G,OAAO,EAAE,uDAAuD,EAAE,MAAM,2DAA2D,CAAC;AACpI,OAAO,EAAE,qDAAqD,EAAE,MAAM,yDAAyD,CAAC;AAChI,OAAO,EAAE,6CAA6C,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,0CAA0C,EAAE,MAAM,8CAA8C,CAAC;AAC1G,OAAO,EAAE,gDAAgD,EAAE,MAAM,oDAAoD,CAAC;AAEtH,MAAM,CAAC,MAAM,+BAA+B,GAAgC,KAAK,EAC/E,SAAoB,EACpB,mBAAwC,EACV,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,MAAM,qDAAqD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAChG,GAAG,CAAC,MAAM,+CAA+C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC1F,GAAG,CAAC,MAAM,6CAA6C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxF,GAAG,CAAC,MAAM,uDAAuD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClG,GAAG,CAAC,MAAM,oDAAoD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC/F,GAAG,CAAC,MAAM,yCAAyC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACpF,GAAG,CAAC,MAAM,gDAAgD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,6CAA6C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxF,GAAG,CAAC,MAAM,gDAAgD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,wDAAwD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACnG,GAAG,CAAC,MAAM,uCAAuC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClF,GAAG,CAAC,MAAM,kDAAkD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC7F,GAAG,CAAC,MAAM,8CAA8C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACzF,GAAG,CAAC,MAAM,2CAA2C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACtF,GAAG,CAAC,MAAM,uDAAuD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClG,GAAG,CAAC,MAAM,qDAAqD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAChG,GAAG,CAAC,MAAM,6CAA6C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxF,GAAG,CAAC,MAAM,0CAA0C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACrF,GAAG,CAAC,MAAM,gDAAgD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;CAC5F,CAAC,CAAC","sourcesContent":["import { ActionProcessorList, ActionProcessorListResolver, DynamicModuleLoader, QPQConfig } from 'quidproquo-core';\n\nimport { getUserDirectoryAssociateSoftwareTokenActionProcessor } from './getUserDirectoryAssociateSoftwareTokenActionProcessor';\nimport { getUserDirectoryAuthenticateUserActionProcessor } from './getUserDirectoryAuthenticateUserActionProcessor';\nimport { getUserDirectoryChangePasswordActionProcessor } from './getUserDirectoryChangePasswordActionProcessor';\nimport { getUserDirectoryConfirmEmailVerificationActionProcessor } from './getUserDirectoryConfirmEmailVerificationActionProcessor';\nimport { getUserDirectoryConfirmForgotPasswordActionProcessor } from './getUserDirectoryConfirmForgotPasswordActionProcessor';\nimport { getUserDirectoryCreateUserActionProcessor } from './getUserDirectoryCreateUserActionProcessor';\nimport { getUserDirectoryDecodeAccessTokenActionProcessor } from './getUserDirectoryDecodeAccessTokenActionProcessor';\nimport { getUserDirectoryForgotPasswordActionProcessor } from './getUserDirectoryForgotPasswordActionProcessor';\nimport { getUserDirectoryGetUserAttributesActionProcessor } from './getUserDirectoryGetUserAttributesActionProcessor';\nimport { getUserDirectoryGetUserAttributesByUserIdActionProcessor } from './getUserDirectoryGetUserAttributesByUserIdActionProcessor';\nimport { getUserDirectoryGetUsersActionProcessor } from './getUserDirectoryGetUsersActionProcessor';\nimport { getUserDirectoryGetUsersByAttributeActionProcessor } from './getUserDirectoryGetUsersByAttributeActionProcessor';\nimport { getUserDirectoryReadAccessTokenActionProcessor } from './getUserDirectoryReadAccessTokenActionProcessor';\nimport { getUserDirectoryRefreshTokenActionProcessor } from './getUserDirectoryRefreshTokenActionProcessor';\nimport { getUserDirectoryRequestEmailVerificationActionProcessor } from './getUserDirectoryRequestEmailVerificationActionProcessor';\nimport { getUserDirectoryRespondToAuthChallengeActionProcessor } from './getUserDirectoryRespondToAuthChallengeActionProcessor';\nimport { getUserDirectorySetAccessTokenActionProcessor } from './getUserDirectorySetAccessTokenActionProcessor';\nimport { getUserDirectorySetPasswordActionProcessor } from './getUserDirectorySetPasswordActionProcessor';\nimport { getUserDirectorySetUserAttributesActionProcessor } from './getUserDirectorySetUserAttributesActionProcessor';\n\nexport const getUserDirectoryActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n dynamicModuleLoader: DynamicModuleLoader,\n): Promise<ActionProcessorList> => ({\n ...(await getUserDirectoryAssociateSoftwareTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryAuthenticateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryChangePasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryCreateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryDecodeAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesByUserIdActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersByAttributeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryReadAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRequestEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRespondToAuthChallengeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/userDirectory/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qDAAqD,EAAE,MAAM,yDAAyD,CAAC;AAChI,OAAO,EAAE,+CAA+C,EAAE,MAAM,mDAAmD,CAAC;AACpH,OAAO,EAAE,6CAA6C,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,uDAAuD,EAAE,MAAM,2DAA2D,CAAC;AACpI,OAAO,EAAE,oDAAoD,EAAE,MAAM,wDAAwD,CAAC;AAC9H,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,gDAAgD,EAAE,MAAM,oDAAoD,CAAC;AACtH,OAAO,EAAE,6CAA6C,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,gDAAgD,EAAE,MAAM,oDAAoD,CAAC;AACtH,OAAO,EAAE,wDAAwD,EAAE,MAAM,4DAA4D,CAAC;AACtI,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAC;AACpG,OAAO,EAAE,kDAAkD,EAAE,MAAM,sDAAsD,CAAC;AAC1H,OAAO,EAAE,8CAA8C,EAAE,MAAM,kDAAkD,CAAC;AAClH,OAAO,EAAE,2CAA2C,EAAE,MAAM,+CAA+C,CAAC;AAC5G,OAAO,EAAE,uDAAuD,EAAE,MAAM,2DAA2D,CAAC;AACpI,OAAO,EAAE,qDAAqD,EAAE,MAAM,yDAAyD,CAAC;AAChI,OAAO,EAAE,iDAAiD,EAAE,MAAM,qDAAqD,CAAC;AACxH,OAAO,EAAE,6CAA6C,EAAE,MAAM,iDAAiD,CAAC;AAChH,OAAO,EAAE,0CAA0C,EAAE,MAAM,8CAA8C,CAAC;AAC1G,OAAO,EAAE,gDAAgD,EAAE,MAAM,oDAAoD,CAAC;AACtH,OAAO,EAAE,0CAA0C,EAAE,MAAM,8CAA8C,CAAC;AAE1G,MAAM,CAAC,MAAM,+BAA+B,GAAgC,KAAK,EAC/E,SAAoB,EACpB,mBAAwC,EACV,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,MAAM,qDAAqD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAChG,GAAG,CAAC,MAAM,+CAA+C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC1F,GAAG,CAAC,MAAM,6CAA6C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxF,GAAG,CAAC,MAAM,uDAAuD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClG,GAAG,CAAC,MAAM,oDAAoD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC/F,GAAG,CAAC,MAAM,yCAAyC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACpF,GAAG,CAAC,MAAM,gDAAgD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,6CAA6C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxF,GAAG,CAAC,MAAM,gDAAgD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,wDAAwD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACnG,GAAG,CAAC,MAAM,uCAAuC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClF,GAAG,CAAC,MAAM,kDAAkD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC7F,GAAG,CAAC,MAAM,8CAA8C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACzF,GAAG,CAAC,MAAM,2CAA2C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACtF,GAAG,CAAC,MAAM,iDAAiD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC5F,GAAG,CAAC,MAAM,uDAAuD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAClG,GAAG,CAAC,MAAM,qDAAqD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAChG,GAAG,CAAC,MAAM,6CAA6C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxF,GAAG,CAAC,MAAM,0CAA0C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACrF,GAAG,CAAC,MAAM,gDAAgD,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,0CAA0C,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;CACtF,CAAC,CAAC","sourcesContent":["import { ActionProcessorList, ActionProcessorListResolver, DynamicModuleLoader, QPQConfig } from 'quidproquo-core';\n\nimport { getUserDirectoryAssociateSoftwareTokenActionProcessor } from './getUserDirectoryAssociateSoftwareTokenActionProcessor';\nimport { getUserDirectoryAuthenticateUserActionProcessor } from './getUserDirectoryAuthenticateUserActionProcessor';\nimport { getUserDirectoryChangePasswordActionProcessor } from './getUserDirectoryChangePasswordActionProcessor';\nimport { getUserDirectoryConfirmEmailVerificationActionProcessor } from './getUserDirectoryConfirmEmailVerificationActionProcessor';\nimport { getUserDirectoryConfirmForgotPasswordActionProcessor } from './getUserDirectoryConfirmForgotPasswordActionProcessor';\nimport { getUserDirectoryCreateUserActionProcessor } from './getUserDirectoryCreateUserActionProcessor';\nimport { getUserDirectoryDecodeAccessTokenActionProcessor } from './getUserDirectoryDecodeAccessTokenActionProcessor';\nimport { getUserDirectoryForgotPasswordActionProcessor } from './getUserDirectoryForgotPasswordActionProcessor';\nimport { getUserDirectoryGetUserAttributesActionProcessor } from './getUserDirectoryGetUserAttributesActionProcessor';\nimport { getUserDirectoryGetUserAttributesByUserIdActionProcessor } from './getUserDirectoryGetUserAttributesByUserIdActionProcessor';\nimport { getUserDirectoryGetUsersActionProcessor } from './getUserDirectoryGetUsersActionProcessor';\nimport { getUserDirectoryGetUsersByAttributeActionProcessor } from './getUserDirectoryGetUsersByAttributeActionProcessor';\nimport { getUserDirectoryReadAccessTokenActionProcessor } from './getUserDirectoryReadAccessTokenActionProcessor';\nimport { getUserDirectoryRefreshTokenActionProcessor } from './getUserDirectoryRefreshTokenActionProcessor';\nimport { getUserDirectoryRequestEmailVerificationActionProcessor } from './getUserDirectoryRequestEmailVerificationActionProcessor';\nimport { getUserDirectoryRespondToAuthChallengeActionProcessor } from './getUserDirectoryRespondToAuthChallengeActionProcessor';\nimport { getUserDirectoryRevokeRefreshTokenActionProcessor } from './getUserDirectoryRevokeRefreshTokenActionProcessor';\nimport { getUserDirectorySetAccessTokenActionProcessor } from './getUserDirectorySetAccessTokenActionProcessor';\nimport { getUserDirectorySetPasswordActionProcessor } from './getUserDirectorySetPasswordActionProcessor';\nimport { getUserDirectorySetUserAttributesActionProcessor } from './getUserDirectorySetUserAttributesActionProcessor';\nimport { getUserDirectorySignOutUserActionProcessor } from './getUserDirectorySignOutUserActionProcessor';\n\nexport const getUserDirectoryActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n dynamicModuleLoader: DynamicModuleLoader,\n): Promise<ActionProcessorList> => ({\n ...(await getUserDirectoryAssociateSoftwareTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryAuthenticateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryChangePasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryConfirmForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryCreateUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryDecodeAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryForgotPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUserAttributesByUserIdActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryGetUsersByAttributeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryReadAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRevokeRefreshTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRequestEmailVerificationActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectoryRespondToAuthChallengeActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetAccessTokenActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetPasswordActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySetUserAttributesActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserDirectorySignOutUserActionProcessor(qpqConfig, dynamicModuleLoader)),\n});\n"]}
@@ -0,0 +1 @@
1
+ export declare const globalSignOut: (accessToken: string, region: string) => Promise<void>;
@@ -0,0 +1,15 @@
1
+ import { CognitoIdentityProviderClient, GlobalSignOutCommand } from '@aws-sdk/client-cognito-identity-provider';
2
+ import { createAwsClient } from '../createAwsClient';
3
+ // Revokes EVERY refresh token issued to the user who owns this access token. Authorized by
4
+ // the access token itself (no IAM needed, like ChangePassword). Access tokens already minted
5
+ // stay valid until they expire (stateless JWTs), so keep the access-token validity short.
6
+ export const globalSignOut = async (accessToken, region) => {
7
+ const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {
8
+ region,
9
+ });
10
+ const params = {
11
+ AccessToken: accessToken,
12
+ };
13
+ await cognitoClient.send(new GlobalSignOutCommand(params));
14
+ };
15
+ //# sourceMappingURL=globalSignOut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalSignOut.js","sourceRoot":"","sources":["../../../../src/logic/cognito/globalSignOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAA6B,MAAM,2CAA2C,CAAC;AAE3I,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,2FAA2F;AAC3F,6FAA6F;AAC7F,0FAA0F;AAC1F,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,WAAmB,EAAE,MAAc,EAAiB,EAAE;IACxF,MAAM,aAAa,GAAG,eAAe,CAAC,6BAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,MAAM,GAA8B;QACxC,WAAW,EAAE,WAAW;KACzB,CAAC;IAEF,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC","sourcesContent":["import { CognitoIdentityProviderClient, GlobalSignOutCommand, GlobalSignOutCommandInput } from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\n\n// Revokes EVERY refresh token issued to the user who owns this access token. Authorized by\n// the access token itself (no IAM needed, like ChangePassword). Access tokens already minted\n// stay valid until they expire (stateless JWTs), so keep the access-token validity short.\nexport const globalSignOut = async (accessToken: string, region: string): Promise<void> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const params: GlobalSignOutCommandInput = {\n AccessToken: accessToken,\n };\n\n await cognitoClient.send(new GlobalSignOutCommand(params));\n};\n"]}
@@ -1,2 +1,4 @@
1
1
  export * from './decodeAccessToken';
2
2
  export * from './decodeValidJwt';
3
+ export * from './globalSignOut';
4
+ export * from './revokeRefreshToken';
@@ -1,3 +1,5 @@
1
1
  export * from './decodeAccessToken';
2
2
  export * from './decodeValidJwt';
3
+ export * from './globalSignOut';
4
+ export * from './revokeRefreshToken';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/logic/cognito/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './decodeAccessToken';\nexport * from './decodeValidJwt';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/logic/cognito/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from './decodeAccessToken';\nexport * from './decodeValidJwt';\nexport * from './globalSignOut';\nexport * from './revokeRefreshToken';\n"]}
@@ -21,6 +21,15 @@ export const refreshToken = async (userPoolId, clientId, region, username, refre
21
21
  // Time we issued the request
22
22
  const issueDateTime = new Date().toISOString();
23
23
  const response = await cognitoClient.send(new AdminInitiateAuthCommand(params));
24
- return cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo(response, issueDateTime);
24
+ const authResponse = cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo(response, issueDateTime);
25
+ // Cognito's REFRESH_TOKEN_AUTH flow does NOT return a refresh token — the existing one stays
26
+ // valid and is reused — so AuthenticationResult.RefreshToken is undefined here. Carry the
27
+ // caller's refresh token forward so the client keeps a usable session; without this it's
28
+ // dropped after the first refresh and the session can never refresh again. (If refresh-token
29
+ // rotation is ever enabled, Cognito DOES return a new one — then we keep that instead.)
30
+ if (authResponse.authenticationInfo && !authResponse.authenticationInfo.refreshToken) {
31
+ authResponse.authenticationInfo.refreshToken = refreshToken;
32
+ }
33
+ return authResponse;
25
34
  };
26
35
  //# sourceMappingURL=refreshToken.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"refreshToken.js","sourceRoot":"","sources":["../../../../src/logic/cognito/refreshToken.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EAExB,YAAY,EACZ,6BAA6B,GAC9B,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,uDAAuD,EAAE,MAAM,kCAAkC,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,UAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,YAAoB,EACe,EAAE;IACrC,MAAM,aAAa,GAAG,eAAe,CAAC,6BAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAkC;QAC5C,QAAQ,EAAE,YAAY,CAAC,kBAAkB;QACzC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,QAAQ;QAElB,cAAc,EAAE;YACd,aAAa,EAAE,YAAY;YAC3B,WAAW,EAAE,UAAU;SACxB;KACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhF,OAAO,uDAAuD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC1F,CAAC,CAAC","sourcesContent":["import { AuthenticateUserResponse } from 'quidproquo-core';\n\nimport {\n AdminInitiateAuthCommand,\n AdminInitiateAuthCommandInput,\n AuthFlowType,\n CognitoIdentityProviderClient,\n} from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { calculateSecretHash } from './utils/calculateSecretHash';\nimport { cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo } from './utils/transformCognitoResponse';\nimport { getUserPoolClientSecret } from './getUserPoolClientSecret';\n\nexport const refreshToken = async (\n userPoolId: string,\n clientId: string,\n region: string,\n username: string,\n refreshToken: string,\n): Promise<AuthenticateUserResponse> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);\n const secretHash = calculateSecretHash(username, clientId, clientSecret);\n\n const params: AdminInitiateAuthCommandInput = {\n AuthFlow: AuthFlowType.REFRESH_TOKEN_AUTH,\n UserPoolId: userPoolId,\n ClientId: clientId,\n\n AuthParameters: {\n REFRESH_TOKEN: refreshToken,\n SECRET_HASH: secretHash,\n },\n };\n\n // Time we issued the request\n const issueDateTime = new Date().toISOString();\n const response = await cognitoClient.send(new AdminInitiateAuthCommand(params));\n\n return cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo(response, issueDateTime);\n};\n"]}
1
+ {"version":3,"file":"refreshToken.js","sourceRoot":"","sources":["../../../../src/logic/cognito/refreshToken.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EAExB,YAAY,EACZ,6BAA6B,GAC9B,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,uDAAuD,EAAE,MAAM,kCAAkC,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,UAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,YAAoB,EACe,EAAE;IACrC,MAAM,aAAa,GAAG,eAAe,CAAC,6BAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAkC;QAC5C,QAAQ,EAAE,YAAY,CAAC,kBAAkB;QACzC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,QAAQ;QAElB,cAAc,EAAE;YACd,aAAa,EAAE,YAAY;YAC3B,WAAW,EAAE,UAAU;SACxB;KACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhF,MAAM,YAAY,GAAG,uDAAuD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEtG,6FAA6F;IAC7F,0FAA0F;IAC1F,yFAAyF;IACzF,6FAA6F;IAC7F,wFAAwF;IACxF,IAAI,YAAY,CAAC,kBAAkB,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QACrF,YAAY,CAAC,kBAAkB,CAAC,YAAY,GAAG,YAAY,CAAC;IAC9D,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC","sourcesContent":["import { AuthenticateUserResponse } from 'quidproquo-core';\n\nimport {\n AdminInitiateAuthCommand,\n AdminInitiateAuthCommandInput,\n AuthFlowType,\n CognitoIdentityProviderClient,\n} from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { calculateSecretHash } from './utils/calculateSecretHash';\nimport { cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo } from './utils/transformCognitoResponse';\nimport { getUserPoolClientSecret } from './getUserPoolClientSecret';\n\nexport const refreshToken = async (\n userPoolId: string,\n clientId: string,\n region: string,\n username: string,\n refreshToken: string,\n): Promise<AuthenticateUserResponse> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);\n const secretHash = calculateSecretHash(username, clientId, clientSecret);\n\n const params: AdminInitiateAuthCommandInput = {\n AuthFlow: AuthFlowType.REFRESH_TOKEN_AUTH,\n UserPoolId: userPoolId,\n ClientId: clientId,\n\n AuthParameters: {\n REFRESH_TOKEN: refreshToken,\n SECRET_HASH: secretHash,\n },\n };\n\n // Time we issued the request\n const issueDateTime = new Date().toISOString();\n const response = await cognitoClient.send(new AdminInitiateAuthCommand(params));\n\n const authResponse = cognitoAdminInitiateAuthResponseToQpqAuthenticationInfo(response, issueDateTime);\n\n // Cognito's REFRESH_TOKEN_AUTH flow does NOT return a refresh token — the existing one stays\n // valid and is reused — so AuthenticationResult.RefreshToken is undefined here. Carry the\n // caller's refresh token forward so the client keeps a usable session; without this it's\n // dropped after the first refresh and the session can never refresh again. (If refresh-token\n // rotation is ever enabled, Cognito DOES return a new one — then we keep that instead.)\n if (authResponse.authenticationInfo && !authResponse.authenticationInfo.refreshToken) {\n authResponse.authenticationInfo.refreshToken = refreshToken;\n }\n\n return authResponse;\n};\n"]}
@@ -0,0 +1 @@
1
+ export declare const revokeRefreshToken: (userPoolId: string, clientId: string, region: string, refreshToken: string) => Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { CognitoIdentityProviderClient, RevokeTokenCommand } from '@aws-sdk/client-cognito-identity-provider';
2
+ import { createAwsClient } from '../createAwsClient';
3
+ import { getUserPoolClientSecret } from './getUserPoolClientSecret';
4
+ // Revokes a single refresh token (and its access-token lineage) via Cognito RevokeToken.
5
+ // The app client has a secret (same one the refresh flow uses), so it must be supplied.
6
+ // Requires token revocation to be enabled on the app client (the CDK default) — a disabled
7
+ // client surfaces as UnsupportedOperationException/UnsupportedTokenTypeException.
8
+ export const revokeRefreshToken = async (userPoolId, clientId, region, refreshToken) => {
9
+ const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {
10
+ region,
11
+ });
12
+ const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);
13
+ const params = {
14
+ Token: refreshToken,
15
+ ClientId: clientId,
16
+ ClientSecret: clientSecret,
17
+ };
18
+ await cognitoClient.send(new RevokeTokenCommand(params));
19
+ };
20
+ //# sourceMappingURL=revokeRefreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revokeRefreshToken.js","sourceRoot":"","sources":["../../../../src/logic/cognito/revokeRefreshToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAA2B,MAAM,2CAA2C,CAAC;AAEvI,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,yFAAyF;AACzF,wFAAwF;AACxF,2FAA2F;AAC3F,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,UAAkB,EAAE,QAAgB,EAAE,MAAc,EAAE,YAAoB,EAAiB,EAAE;IACpI,MAAM,aAAa,GAAG,eAAe,CAAC,6BAA6B,EAAE;QACnE,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEjF,MAAM,MAAM,GAA4B;QACtC,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,YAAY;KAC3B,CAAC;IAEF,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC","sourcesContent":["import { CognitoIdentityProviderClient, RevokeTokenCommand, RevokeTokenCommandInput } from '@aws-sdk/client-cognito-identity-provider';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { getUserPoolClientSecret } from './getUserPoolClientSecret';\n\n// Revokes a single refresh token (and its access-token lineage) via Cognito RevokeToken.\n// The app client has a secret (same one the refresh flow uses), so it must be supplied.\n// Requires token revocation to be enabled on the app client (the CDK default) — a disabled\n// client surfaces as UnsupportedOperationException/UnsupportedTokenTypeException.\nexport const revokeRefreshToken = async (userPoolId: string, clientId: string, region: string, refreshToken: string): Promise<void> => {\n const cognitoClient = createAwsClient(CognitoIdentityProviderClient, {\n region,\n });\n\n const clientSecret = await getUserPoolClientSecret(userPoolId, clientId, region);\n\n const params: RevokeTokenCommandInput = {\n Token: refreshToken,\n ClientId: clientId,\n ClientSecret: clientSecret,\n };\n\n await cognitoClient.send(new RevokeTokenCommand(params));\n};\n"]}
@@ -1 +1 @@
1
- export declare const generatePresignedUploadUrl: (bucketName: string, objectKey: string, region: string, expirationMs: number, correlationId?: string, contentType?: string) => Promise<string>;
1
+ export declare const generatePresignedUploadUrl: (bucketName: string, objectKey: string, region: string, expirationMs: number, correlationId?: string, contentType?: string, contentDisposition?: string) => Promise<string>;
@@ -31,7 +31,7 @@ import { createAwsClient } from '../createAwsClient';
31
31
  // fields: presignedPost.fields
32
32
  // };
33
33
  // };
34
- export const generatePresignedUploadUrl = async (bucketName, objectKey, region, expirationMs, correlationId, contentType) => {
34
+ export const generatePresignedUploadUrl = async (bucketName, objectKey, region, expirationMs, correlationId, contentType, contentDisposition) => {
35
35
  // WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the
36
36
  // presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed
37
37
  // URL, which never matches the real body the browser PUTs — S3 then rejects the upload and
@@ -44,6 +44,9 @@ export const generatePresignedUploadUrl = async (bucketName, objectKey, region,
44
44
  Bucket: bucketName,
45
45
  Key: objectKey,
46
46
  ContentType: contentType,
47
+ // Signed into the URL: the client's PUT must send the matching Content-Disposition header, and
48
+ // S3 stores it so later GETs serve it back (e.g. 'inline' to preview a PDF instead of downloading).
49
+ ContentDisposition: contentDisposition,
47
50
  Metadata: {
48
51
  ...(correlationId && { 'correlation-id': correlationId }),
49
52
  'upload-timestamp': Date.now().toString(),
@@ -1 +1 @@
1
- {"version":3,"file":"generatePresignedUploadUrl.js","sourceRoot":"","sources":["../../../../src/logic/s3/generatePresignedUploadUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,oEAAoE;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,wDAAwD;AACxD,wBAAwB;AACxB,uBAAuB;AACvB,oBAAoB;AACpB,0BAA0B;AAC1B,qCAAqC;AACrC,sCAAsC;AACtC,mEAAmE;AACnE,4DAA4D;AAE5D,kCAAkC;AAElC,8CAA8C;AAC9C,uBAAuB;AACvB,6DAA6D;AAC7D,MAAM;AAEN,iDAAiD;AACjD,wBAAwB;AACxB,kEAAkE;AAClE,MAAM;AAEN,gEAAgE;AAChE,0BAA0B;AAC1B,sBAAsB;AACtB,8BAA8B;AAC9B,gDAAgD;AAChD,QAAQ;AAER,aAAa;AACb,8BAA8B;AAC9B,mCAAmC;AACnC,OAAO;AACP,KAAK;AAEL,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAC7C,UAAkB,EAClB,SAAiB,EACjB,MAAc,EACd,YAAoB,EACpB,aAAsB,EACtB,WAAoB,EACH,EAAE;IACnB,oFAAoF;IACpF,yFAAyF;IACzF,2FAA2F;IAC3F,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE;QACzC,MAAM;QACN,0BAA0B,EAAE,eAAe;KAC5C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC5C,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,SAAS;QACd,WAAW,EAAE,WAAW;QAExB,QAAQ,EAAE;YACR,GAAG,CAAC,aAAa,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;YACzD,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SAC1C;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE;QACzD,SAAS,EAAE,YAAY,GAAG,IAAI;KAC/B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC","sourcesContent":["import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\n\n// import { createPresignedPost } from '@aws-sdk/s3-presigned-post';\nimport { createAwsClient } from '../createAwsClient';\n\n// export const generatePresignedUploadFormUrl = async (\n// bucketName: string,\n// objectKey: string,\n// region: string,\n// expirationMs: number,\n// contentType: string | undefined,\n// maxSizeBytes?: number | undefined\n// ): Promise<{ url: string; fields: Record<string, string> }> => {\n// const s3Client = createAwsClient(S3Client, { region });\n\n// const conditions: any[] = [];\n\n// // Add content type condition if provided\n// if (contentType) {\n// conditions.push(['eq', '$Content-Type', contentType]);\n// }\n\n// // Add file size limit condition if provided\n// if (maxSizeBytes) {\n// conditions.push(['content-length-range', 0, maxSizeBytes]);\n// }\n\n// const presignedPost = await createPresignedPost(s3Client, {\n// Bucket: bucketName,\n// Key: objectKey,\n// Conditions: conditions,\n// Expires: Math.floor(expirationMs / 1000),\n// });\n\n// return {\n// url: presignedPost.url,\n// fields: presignedPost.fields\n// };\n// };\n\nexport const generatePresignedUploadUrl = async (\n bucketName: string,\n objectKey: string,\n region: string,\n expirationMs: number,\n correlationId?: string,\n contentType?: string,\n): Promise<string> => {\n // WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the\n // presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed\n // URL, which never matches the real body the browser PUTs — S3 then rejects the upload and\n // the failure surfaces in the browser as a CORS error (the error response has no ACAO header).\n const s3Client = createAwsClient(S3Client, {\n region,\n requestChecksumCalculation: 'WHEN_REQUIRED',\n });\n\n const putObjectCommand = new PutObjectCommand({\n Bucket: bucketName,\n Key: objectKey,\n ContentType: contentType,\n\n Metadata: {\n ...(correlationId && { 'correlation-id': correlationId }),\n 'upload-timestamp': Date.now().toString(),\n },\n });\n\n const url = await getSignedUrl(s3Client, putObjectCommand, {\n expiresIn: expirationMs / 1000,\n });\n\n return url;\n};\n"]}
1
+ {"version":3,"file":"generatePresignedUploadUrl.js","sourceRoot":"","sources":["../../../../src/logic/s3/generatePresignedUploadUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,oEAAoE;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,wDAAwD;AACxD,wBAAwB;AACxB,uBAAuB;AACvB,oBAAoB;AACpB,0BAA0B;AAC1B,qCAAqC;AACrC,sCAAsC;AACtC,mEAAmE;AACnE,4DAA4D;AAE5D,kCAAkC;AAElC,8CAA8C;AAC9C,uBAAuB;AACvB,6DAA6D;AAC7D,MAAM;AAEN,iDAAiD;AACjD,wBAAwB;AACxB,kEAAkE;AAClE,MAAM;AAEN,gEAAgE;AAChE,0BAA0B;AAC1B,sBAAsB;AACtB,8BAA8B;AAC9B,gDAAgD;AAChD,QAAQ;AAER,aAAa;AACb,8BAA8B;AAC9B,mCAAmC;AACnC,OAAO;AACP,KAAK;AAEL,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAC7C,UAAkB,EAClB,SAAiB,EACjB,MAAc,EACd,YAAoB,EACpB,aAAsB,EACtB,WAAoB,EACpB,kBAA2B,EACV,EAAE;IACnB,oFAAoF;IACpF,yFAAyF;IACzF,2FAA2F;IAC3F,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE;QACzC,MAAM;QACN,0BAA0B,EAAE,eAAe;KAC5C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC5C,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,SAAS;QACd,WAAW,EAAE,WAAW;QACxB,+FAA+F;QAC/F,oGAAoG;QACpG,kBAAkB,EAAE,kBAAkB;QAEtC,QAAQ,EAAE;YACR,GAAG,CAAC,aAAa,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;YACzD,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SAC1C;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE;QACzD,SAAS,EAAE,YAAY,GAAG,IAAI;KAC/B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC","sourcesContent":["import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\n\n// import { createPresignedPost } from '@aws-sdk/s3-presigned-post';\nimport { createAwsClient } from '../createAwsClient';\n\n// export const generatePresignedUploadFormUrl = async (\n// bucketName: string,\n// objectKey: string,\n// region: string,\n// expirationMs: number,\n// contentType: string | undefined,\n// maxSizeBytes?: number | undefined\n// ): Promise<{ url: string; fields: Record<string, string> }> => {\n// const s3Client = createAwsClient(S3Client, { region });\n\n// const conditions: any[] = [];\n\n// // Add content type condition if provided\n// if (contentType) {\n// conditions.push(['eq', '$Content-Type', contentType]);\n// }\n\n// // Add file size limit condition if provided\n// if (maxSizeBytes) {\n// conditions.push(['content-length-range', 0, maxSizeBytes]);\n// }\n\n// const presignedPost = await createPresignedPost(s3Client, {\n// Bucket: bucketName,\n// Key: objectKey,\n// Conditions: conditions,\n// Expires: Math.floor(expirationMs / 1000),\n// });\n\n// return {\n// url: presignedPost.url,\n// fields: presignedPost.fields\n// };\n// };\n\nexport const generatePresignedUploadUrl = async (\n bucketName: string,\n objectKey: string,\n region: string,\n expirationMs: number,\n correlationId?: string,\n contentType?: string,\n contentDisposition?: string,\n): Promise<string> => {\n // WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the\n // presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed\n // URL, which never matches the real body the browser PUTs — S3 then rejects the upload and\n // the failure surfaces in the browser as a CORS error (the error response has no ACAO header).\n const s3Client = createAwsClient(S3Client, {\n region,\n requestChecksumCalculation: 'WHEN_REQUIRED',\n });\n\n const putObjectCommand = new PutObjectCommand({\n Bucket: bucketName,\n Key: objectKey,\n ContentType: contentType,\n // Signed into the URL: the client's PUT must send the matching Content-Disposition header, and\n // S3 stores it so later GETs serve it back (e.g. 'inline' to preview a PDF instead of downloading).\n ContentDisposition: contentDisposition,\n\n Metadata: {\n ...(correlationId && { 'correlation-id': correlationId }),\n 'upload-timestamp': Date.now().toString(),\n },\n });\n\n const url = await getSignedUrl(s3Client, putObjectCommand, {\n expiresIn: expirationMs / 1000,\n });\n\n return url;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quidproquo-actionprocessor-awslambda",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -60,11 +60,11 @@
60
60
  "lodash": "^4.17.21",
61
61
  "node-cache": "^5.1.2",
62
62
  "node-match-path": "^0.6.3",
63
- "quidproquo-actionprocessor-js": "0.1.8",
64
- "quidproquo-actionprocessor-node": "0.1.8",
65
- "quidproquo-config-aws": "0.1.8",
66
- "quidproquo-core": "0.1.8",
67
- "quidproquo-webserver": "0.1.8"
63
+ "quidproquo-actionprocessor-js": "0.1.10",
64
+ "quidproquo-actionprocessor-node": "0.1.10",
65
+ "quidproquo-config-aws": "0.1.10",
66
+ "quidproquo-core": "0.1.10",
67
+ "quidproquo-webserver": "0.1.10"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@types/busboy": "^1.5.0",
@@ -72,7 +72,7 @@
72
72
  "@types/lodash": "^4.14.194",
73
73
  "@types/node": "^22.13.13",
74
74
  "esbuild": "^0.25.8",
75
- "quidproquo-tsconfig": "0.1.8",
75
+ "quidproquo-tsconfig": "0.1.10",
76
76
  "typescript": "^5.8.2"
77
77
  }
78
78
  }