quidproquo-actionprocessor-awslambda 0.1.7 → 0.1.9

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 (168) hide show
  1. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js +1 -1
  2. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js.map +1 -1
  3. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +16 -5
  4. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js.map +1 -1
  5. package/lib/commonjs/getActionProcessor/core/ai/logic/createDriveFileResolver.js +2 -2
  6. package/lib/commonjs/getActionProcessor/core/ai/logic/createDriveFileResolver.js.map +1 -1
  7. package/lib/commonjs/getActionProcessor/core/ai/logic/index.d.ts +1 -0
  8. package/lib/commonjs/getActionProcessor/core/ai/logic/index.js +1 -0
  9. package/lib/commonjs/getActionProcessor/core/ai/logic/index.js.map +1 -1
  10. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +2 -1
  11. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js.map +1 -1
  12. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +2 -1
  13. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js.map +1 -1
  14. package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +10 -12
  15. package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js.map +1 -1
  16. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamFinishReason.d.ts +2 -0
  17. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js +10 -0
  18. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js.map +1 -0
  19. package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableMessages.js +9 -9
  20. package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableMessages.js.map +1 -1
  21. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +1 -1
  22. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js +1 -1
  23. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js.map +1 -1
  24. package/lib/commonjs/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.d.ts +2 -2
  25. package/lib/commonjs/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js +10 -6
  26. package/lib/commonjs/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js.map +1 -1
  27. package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js +4 -2
  28. package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js.map +1 -1
  29. package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js +4 -2
  30. package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js.map +1 -1
  31. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +7 -3
  32. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js.map +1 -1
  33. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +7 -3
  34. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js.map +1 -1
  35. package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +4 -2
  36. package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js.map +1 -1
  37. package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +6 -4
  38. package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js.map +1 -1
  39. package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +4 -2
  40. package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js.map +1 -1
  41. package/lib/commonjs/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js +7 -2
  42. package/lib/commonjs/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js.map +1 -1
  43. package/lib/commonjs/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js +6 -2
  44. package/lib/commonjs/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js.map +1 -1
  45. package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +3 -2
  46. package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js.map +1 -1
  47. package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +3 -2
  48. package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js.map +1 -1
  49. package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +3 -2
  50. package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js.map +1 -1
  51. package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +3 -2
  52. package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js.map +1 -1
  53. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +11 -9
  54. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js.map +1 -1
  55. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +7 -3
  56. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js.map +1 -1
  57. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +8 -3
  58. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js.map +1 -1
  59. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +9 -5
  60. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js.map +1 -1
  61. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +9 -2
  62. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js.map +1 -1
  63. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +10 -8
  64. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js.map +1 -1
  65. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js +13 -11
  66. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js.map +1 -1
  67. package/lib/commonjs/getActionProcessor/core/keyValueStore/index.js +2 -1
  68. package/lib/commonjs/getActionProcessor/core/keyValueStore/index.js.map +1 -1
  69. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +2 -2
  70. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js.map +1 -1
  71. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js +11 -1
  72. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js.map +1 -1
  73. package/lib/commonjs/lambdaHandlers/getSqsEvent_queueEvent.js +3 -3
  74. package/lib/commonjs/lambdaHandlers/getSqsEvent_queueEvent.js.map +1 -1
  75. package/lib/commonjs/logic/cognito/requestEmailVerificationCode.d.ts +2 -1
  76. package/lib/commonjs/logic/cognito/requestEmailVerificationCode.js +8 -1
  77. package/lib/commonjs/logic/cognito/requestEmailVerificationCode.js.map +1 -1
  78. package/lib/commonjs/logic/dynamo/getAllItems.d.ts +2 -1
  79. package/lib/commonjs/logic/dynamo/getAllItems.js +7 -2
  80. package/lib/commonjs/logic/dynamo/getAllItems.js.map +1 -1
  81. package/lib/commonjs/logic/dynamo/getItem.d.ts +2 -1
  82. package/lib/commonjs/logic/dynamo/getItem.js +8 -5
  83. package/lib/commonjs/logic/dynamo/getItem.js.map +1 -1
  84. package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js +1 -1
  85. package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js.map +1 -1
  86. package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +16 -6
  87. package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js.map +1 -1
  88. package/lib/esm/getActionProcessor/core/ai/logic/createDriveFileResolver.js +2 -2
  89. package/lib/esm/getActionProcessor/core/ai/logic/createDriveFileResolver.js.map +1 -1
  90. package/lib/esm/getActionProcessor/core/ai/logic/index.d.ts +1 -0
  91. package/lib/esm/getActionProcessor/core/ai/logic/index.js +1 -0
  92. package/lib/esm/getActionProcessor/core/ai/logic/index.js.map +1 -1
  93. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +2 -1
  94. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js.map +1 -1
  95. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +2 -1
  96. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js.map +1 -1
  97. package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +13 -8
  98. package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js.map +1 -1
  99. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamFinishReason.d.ts +2 -0
  100. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js +6 -0
  101. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js.map +1 -0
  102. package/lib/esm/getActionProcessor/core/ai/logic/toCacheableMessages.js +15 -15
  103. package/lib/esm/getActionProcessor/core/ai/logic/toCacheableMessages.js.map +1 -1
  104. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +1 -1
  105. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js +1 -1
  106. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js.map +1 -1
  107. package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.d.ts +2 -2
  108. package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js +10 -6
  109. package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js.map +1 -1
  110. package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js +5 -3
  111. package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js.map +1 -1
  112. package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js +5 -3
  113. package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js.map +1 -1
  114. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +9 -5
  115. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js.map +1 -1
  116. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +9 -5
  117. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js.map +1 -1
  118. package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +5 -3
  119. package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js.map +1 -1
  120. package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +7 -4
  121. package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js.map +1 -1
  122. package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +5 -3
  123. package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js.map +1 -1
  124. package/lib/esm/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js +8 -3
  125. package/lib/esm/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js.map +1 -1
  126. package/lib/esm/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js +7 -3
  127. package/lib/esm/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js.map +1 -1
  128. package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +4 -3
  129. package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js.map +1 -1
  130. package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +4 -3
  131. package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js.map +1 -1
  132. package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +4 -3
  133. package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js.map +1 -1
  134. package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +4 -3
  135. package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js.map +1 -1
  136. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +7 -5
  137. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js.map +1 -1
  138. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +8 -4
  139. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js.map +1 -1
  140. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +9 -4
  141. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js.map +1 -1
  142. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +10 -6
  143. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js.map +1 -1
  144. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +11 -4
  145. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js.map +1 -1
  146. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +7 -5
  147. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js.map +1 -1
  148. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js +14 -12
  149. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js.map +1 -1
  150. package/lib/esm/getActionProcessor/core/keyValueStore/index.js +2 -0
  151. package/lib/esm/getActionProcessor/core/keyValueStore/index.js.map +1 -1
  152. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +2 -2
  153. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js.map +1 -1
  154. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js +12 -2
  155. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js.map +1 -1
  156. package/lib/esm/lambdaHandlers/getSqsEvent_queueEvent.js +3 -3
  157. package/lib/esm/lambdaHandlers/getSqsEvent_queueEvent.js.map +1 -1
  158. package/lib/esm/logic/cognito/requestEmailVerificationCode.d.ts +2 -1
  159. package/lib/esm/logic/cognito/requestEmailVerificationCode.js +7 -1
  160. package/lib/esm/logic/cognito/requestEmailVerificationCode.js.map +1 -1
  161. package/lib/esm/logic/dynamo/getAllItems.d.ts +2 -1
  162. package/lib/esm/logic/dynamo/getAllItems.js +7 -2
  163. package/lib/esm/logic/dynamo/getAllItems.js.map +1 -1
  164. package/lib/esm/logic/dynamo/getItem.d.ts +2 -1
  165. package/lib/esm/logic/dynamo/getItem.js +8 -5
  166. package/lib/esm/logic/dynamo/getItem.js.map +1 -1
  167. package/lib/extension-layer/qpq-log-extension/index.js +37 -37
  168. package/package.json +7 -7
@@ -1,22 +1,26 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResultError, ErrorTypeEnum } from 'quidproquo-core';
3
- import { actionResult, FileActionType, FileGenerateTemporarySecureUrlErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResultError, actionResultErrorFromCaughtError } from 'quidproquo-core';
3
+ import { actionResult, composeScopedFilePath, FileActionType, FileGenerateTemporarySecureUrlErrorTypeEnum, } from 'quidproquo-core';
4
4
  import { generatePresignedUrl } from '../../../logic/s3/generatePresignedUrl';
5
5
  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 getProcessFileGenerateTemporarySecureUrl = (qpqConfig) => {
9
- return async ({ drive, filepath, expirationMs }) => {
9
+ return async ({ drive, filepath, expirationMs, scope }) => {
10
10
  if (expirationMs > maxExpirationMs) {
11
11
  return actionResultError(FileGenerateTemporarySecureUrlErrorTypeEnum.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 generatePresignedUrl(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs);
15
+ const url = await generatePresignedUrl(s3BucketName, composeScopedFilePath(scope, filepath), qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs);
16
16
  return actionResult(url);
17
17
  }
18
18
  catch (error) {
19
- return actionResultError(ErrorTypeEnum.GenericError, 'Unable to generate temporary secure URL', error);
19
+ // Name-keyed, not instanceof: under npm link / module federation the
20
+ // error can come from another copy of quidproquo-core.
21
+ return actionResultErrorFromCaughtError(error, {
22
+ InvalidScopeError: (error) => actionResultError(FileGenerateTemporarySecureUrlErrorTypeEnum.InvalidScope, error.message),
23
+ });
20
24
  }
21
25
  };
22
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileGenerateTemporarySecureUrlActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAoD,iBAAiB,EAAE,aAAa,EAAa,MAAM,iBAAiB,CAAC;AAChI,OAAO,EACL,YAAY,EACZ,cAAc,EAEd,2CAA2C,GAC5C,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,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,wCAAwC,GAAG,CAAC,SAAoB,EAAiD,EAAE;IACvH,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE;QACjD,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,iBAAiB,CACtB,2CAA2C,CAAC,iBAAiB,EAC7D,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;YAE5I,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,yCAAyC,EAAE,KAAK,CAAC,CAAC;QACzG,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gDAAgD,GAAgC,KAAK,EAChG,SAAoB,EACU,EAAE,CAAC,CAAC;IAClC,CAAC,cAAc,CAAC,0BAA0B,CAAC,EAAE,wCAAwC,CAAC,SAAS,CAAC;CACjG,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport { ActionProcessorList, ActionProcessorListResolver, actionResultError, ErrorTypeEnum, QPQConfig } from 'quidproquo-core';\nimport {\n actionResult,\n FileActionType,\n FileGenerateTemporarySecureUrlActionProcessor,\n FileGenerateTemporarySecureUrlErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { generatePresignedUrl } from '../../../logic/s3/generatePresignedUrl';\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 getProcessFileGenerateTemporarySecureUrl = (qpqConfig: QPQConfig): FileGenerateTemporarySecureUrlActionProcessor => {\n return async ({ drive, filepath, expirationMs }) => {\n if (expirationMs > maxExpirationMs) {\n return actionResultError(\n FileGenerateTemporarySecureUrlErrorTypeEnum.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 generatePresignedUrl(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs);\n\n return actionResult(url);\n } catch (error: any) {\n return actionResultError(ErrorTypeEnum.GenericError, 'Unable to generate temporary secure URL', error);\n }\n };\n};\n\nexport const getFileGenerateTemporarySecureUrlActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [FileActionType.GenerateTemporarySecureUrl]: getProcessFileGenerateTemporarySecureUrl(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileGenerateTemporarySecureUrlActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.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,2CAA2C,GAC5C,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,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,wCAAwC,GAAG,CAAC,SAAoB,EAAiD,EAAE;IACvH,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;QACxD,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,iBAAiB,CACtB,2CAA2C,CAAC,iBAAiB,EAC7D,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,oBAAoB,CACpC,YAAY,EACZ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,YAAY,CACb,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,2CAA2C,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aACzH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gDAAgD,GAAgC,KAAK,EAChG,SAAoB,EACU,EAAE,CAAC,CAAC;IAClC,CAAC,cAAc,CAAC,0BAA0B,CAAC,EAAE,wCAAwC,CAAC,SAAS,CAAC;CACjG,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 FileGenerateTemporarySecureUrlActionProcessor,\n FileGenerateTemporarySecureUrlErrorTypeEnum,\n} from 'quidproquo-core';\n\nimport { generatePresignedUrl } from '../../../logic/s3/generatePresignedUrl';\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 getProcessFileGenerateTemporarySecureUrl = (qpqConfig: QPQConfig): FileGenerateTemporarySecureUrlActionProcessor => {\n return async ({ drive, filepath, expirationMs, scope }) => {\n if (expirationMs > maxExpirationMs) {\n return actionResultError(\n FileGenerateTemporarySecureUrlErrorTypeEnum.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 generatePresignedUrl(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n expirationMs,\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(FileGenerateTemporarySecureUrlErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileGenerateTemporarySecureUrlActionProcessor: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n): Promise<ActionProcessorList> => ({\n [FileActionType.GenerateTemporarySecureUrl]: getProcessFileGenerateTemporarySecureUrl(qpqConfig),\n});\n"]}
@@ -1,22 +1,26 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResultError, ErrorTypeEnum } from 'quidproquo-core';
3
- import { actionResult, FileActionType, FileGenerateTemporaryUploadSecureUrlErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResultError, actionResultErrorFromCaughtError } from 'quidproquo-core';
3
+ import { actionResult, composeScopedFilePath, FileActionType, FileGenerateTemporaryUploadSecureUrlErrorTypeEnum, } from 'quidproquo-core';
4
4
  import { generatePresignedUploadUrl } from '../../../logic/s3/generatePresignedUploadUrl';
5
5
  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 }, session) => {
9
+ return async ({ drive, filepath, expirationMs, contentType, 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, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType);
15
+ const url = await generatePresignedUploadUrl(s3BucketName, composeScopedFilePath(scope, filepath), qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType);
16
16
  return actionResult(url);
17
17
  }
18
18
  catch (error) {
19
- return actionResultError(ErrorTypeEnum.GenericError, 'Unable to generate temporary upload secure URL', error);
19
+ // Name-keyed, not instanceof: under npm link / module federation the
20
+ // error can come from another copy of quidproquo-core.
21
+ return actionResultErrorFromCaughtError(error, {
22
+ InvalidScopeError: (error) => actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.InvalidScope, error.message),
23
+ });
20
24
  }
21
25
  };
22
26
  };
@@ -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,aAAa,EAAa,MAAM,iBAAiB,CAAC;AAChI,OAAO,EACL,YAAY,EACZ,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,EAAE,OAAO,EAAE,EAAE;QACvE,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,QAAQ,EACR,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,KAAU,EAAE,CAAC;YACpB,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,gDAAgD,EAAE,KAAK,CAAC,CAAC;QAChH,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, ErrorTypeEnum, QPQConfig } from 'quidproquo-core';\nimport {\n actionResult,\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 }, 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 filepath,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n expirationMs,\n session.correlation,\n contentType,\n );\n\n return actionResult(url);\n } catch (error: any) {\n return actionResultError(ErrorTypeEnum.GenericError, 'Unable to generate temporary upload secure URL', error);\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,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,12 +1,13 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileIsColdStorageErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileIsColdStorageErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { getObjectStorageClass } from '../../../logic/s3/getObjectStorageClass';
4
4
  import { resolveStorageDriveBucketName } from './utils';
5
5
  const getProcessFileIsColdStorage = (qpqConfig) => {
6
- return async ({ drive, filepath }) => {
6
+ return async ({ drive, filepath, scope }) => {
7
7
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
8
8
  try {
9
- const isColdStorage = (await getObjectStorageClass(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';
9
+ const key = composeScopedFilePath(scope, filepath);
10
+ const isColdStorage = (await getObjectStorageClass(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';
10
11
  return actionResult(isColdStorage);
11
12
  }
12
13
  catch (error) {
@@ -16,6 +17,7 @@ const getProcessFileIsColdStorage = (qpqConfig) => {
16
17
  NotFound: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
17
18
  NoSuchKey: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
18
19
  NoSuchBucket: () => actionResultError(FileIsColdStorageErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
20
+ InvalidScopeError: (error) => actionResultError(FileIsColdStorageErrorTypeEnum.InvalidScope, error.message),
19
21
  });
20
22
  }
21
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileIsColdStorageActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,8BAA8B,GAE/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,2BAA2B,GAAG,CAAC,SAAoB,EAAoC,EAAE;IAC7F,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnC,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,aAAa,GACjB,CAAC,MAAM,qBAAqB,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;YAE1I,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,0CAA0C,CAAC;gBAC9H,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,0CAA0C,CAAC;gBAC3H,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAC7G,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAC9G,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;aACzH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC7I,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC;CACvE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileIsColdStorageActionProcessor,\n FileIsColdStorageErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getObjectStorageClass } from '../../../logic/s3/getObjectStorageClass';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileIsColdStorage = (qpqConfig: QPQConfig): FileIsColdStorageActionProcessor => {\n return async ({ drive, filepath }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n const isColdStorage =\n (await getObjectStorageClass(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';\n\n return actionResult(isColdStorage);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileIsColdStorageErrorTypeEnum.AccessDenied, 'Access denied reading file storage class'),\n Forbidden: () => actionResultError(FileIsColdStorageErrorTypeEnum.AccessDenied, 'Access denied reading file storage class'),\n NotFound: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NoSuchKey: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NoSuchBucket: () => actionResultError(FileIsColdStorageErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n });\n }\n };\n};\n\nexport const getFileIsColdStorageActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.IsColdStorage]: getProcessFileIsColdStorage(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileIsColdStorageActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,8BAA8B,GAE/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,2BAA2B,GAAG,CAAC,SAAoB,EAAoC,EAAE;IAC7F,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM,aAAa,GACjB,CAAC,MAAM,qBAAqB,CAAC,YAAY,EAAE,GAAG,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;YAErI,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,0CAA0C,CAAC;gBAC9H,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,0CAA0C,CAAC;gBAC3H,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAC7G,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAC9G,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;gBACxH,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC5G,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC7I,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC;CACvE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileIsColdStorageActionProcessor,\n FileIsColdStorageErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getObjectStorageClass } from '../../../logic/s3/getObjectStorageClass';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileIsColdStorage = (qpqConfig: QPQConfig): FileIsColdStorageActionProcessor => {\n return async ({ drive, filepath, scope }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n const key = composeScopedFilePath(scope, filepath);\n const isColdStorage =\n (await getObjectStorageClass(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';\n\n return actionResult(isColdStorage);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileIsColdStorageErrorTypeEnum.AccessDenied, 'Access denied reading file storage class'),\n Forbidden: () => actionResultError(FileIsColdStorageErrorTypeEnum.AccessDenied, 'Access denied reading file storage class'),\n NotFound: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NoSuchKey: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NoSuchBucket: () => actionResultError(FileIsColdStorageErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n InvalidScopeError: (error) => actionResultError(FileIsColdStorageErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileIsColdStorageActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.IsColdStorage]: getProcessFileIsColdStorage(qpqConfig),\n});\n"]}
@@ -1,15 +1,17 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileListDirectoryErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileListDirectoryErrorTypeEnum, stripScopedFilePath, } from 'quidproquo-core';
3
3
  import { listFiles } from '../../../logic/s3/s3Utils';
4
4
  import { resolveStorageDriveBucketName } from './utils';
5
5
  const getProcessFileListDirectory = (qpqConfig) => {
6
- return async ({ drive, folderPath, maxFiles, pageToken }) => {
6
+ return async ({ drive, folderPath, maxFiles, pageToken, scope }) => {
7
7
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
8
8
  try {
9
- const s3FileList = await listFiles(s3BucketName, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), folderPath, maxFiles, pageToken);
10
- // Add the drive onto the list
9
+ const s3FileList = await listFiles(s3BucketName, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), composeScopedFilePath(scope, folderPath), maxFiles, pageToken);
10
+ // S3 keys carry the scope prefix; strip it so callers see the same
11
+ // scope-relative paths they passed in. Add the drive onto the list.
11
12
  const fileInfos = s3FileList.fileInfos.map((s3fi) => ({
12
13
  ...s3fi,
14
+ filepath: stripScopedFilePath(scope, s3fi.filepath),
13
15
  drive,
14
16
  }));
15
17
  return actionResult({
@@ -22,6 +24,7 @@ const getProcessFileListDirectory = (qpqConfig) => {
22
24
  AccessDenied: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),
23
25
  Forbidden: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),
24
26
  NoSuchBucket: () => actionResultError(FileListDirectoryErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
27
+ InvalidScopeError: (error) => actionResultError(FileListDirectoryErrorTypeEnum.InvalidScope, error.message),
25
28
  });
26
29
  }
27
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileListDirectoryActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileListDirectoryActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,8BAA8B,GAE/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,2BAA2B,GAAG,CAAC,SAAoB,EAAoC,EAAE;IAC7F,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1D,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAChC,YAAY,EACZ,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,UAAU,EACV,QAAQ,EACR,SAAS,CACV,CAAC;YAEF,8BAA8B;YAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpD,GAAG,IAAI;gBACP,KAAK;aACN,CAAC,CAAC,CAAC;YAEJ,OAAO,YAAY,CAAC;gBAClB,SAAS;gBACT,SAAS,EAAE,UAAU,CAAC,SAAS;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,iCAAiC,CAAC;gBACrH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,iCAAiC,CAAC;gBAClH,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;aACzH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC7I,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC;CACvE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileListDirectoryActionProcessor,\n FileListDirectoryErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { listFiles } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileListDirectory = (qpqConfig: QPQConfig): FileListDirectoryActionProcessor => {\n return async ({ drive, folderPath, maxFiles, pageToken }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n const s3FileList = await listFiles(\n s3BucketName,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n folderPath,\n maxFiles,\n pageToken,\n );\n\n // Add the drive onto the list\n const fileInfos = s3FileList.fileInfos.map((s3fi) => ({\n ...s3fi,\n drive,\n }));\n\n return actionResult({\n fileInfos,\n pageToken: s3FileList.pageToken,\n });\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),\n Forbidden: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),\n NoSuchBucket: () => actionResultError(FileListDirectoryErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n });\n }\n };\n};\n\nexport const getFileListDirectoryActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ListDirectory]: getProcessFileListDirectory(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileListDirectoryActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileListDirectoryActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,8BAA8B,EAE9B,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,2BAA2B,GAAG,CAAC,SAAoB,EAAoC,EAAE;IAC7F,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QACjE,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAChC,YAAY,EACZ,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,EACxC,QAAQ,EACR,SAAS,CACV,CAAC;YAEF,mEAAmE;YACnE,oEAAoE;YACpE,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpD,GAAG,IAAI;gBACP,QAAQ,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACnD,KAAK;aACN,CAAC,CAAC,CAAC;YAEJ,OAAO,YAAY,CAAC;gBAClB,SAAS;gBACT,SAAS,EAAE,UAAU,CAAC,SAAS;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,iCAAiC,CAAC;gBACrH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,iCAAiC,CAAC;gBAClH,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;gBACxH,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC5G,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC7I,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC;CACvE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileListDirectoryActionProcessor,\n FileListDirectoryErrorTypeEnum,\n QPQConfig,\n stripScopedFilePath,\n} from 'quidproquo-core';\n\nimport { listFiles } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileListDirectory = (qpqConfig: QPQConfig): FileListDirectoryActionProcessor => {\n return async ({ drive, folderPath, maxFiles, pageToken, scope }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n const s3FileList = await listFiles(\n s3BucketName,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n composeScopedFilePath(scope, folderPath),\n maxFiles,\n pageToken,\n );\n\n // S3 keys carry the scope prefix; strip it so callers see the same\n // scope-relative paths they passed in. Add the drive onto the list.\n const fileInfos = s3FileList.fileInfos.map((s3fi) => ({\n ...s3fi,\n filepath: stripScopedFilePath(scope, s3fi.filepath),\n drive,\n }));\n\n return actionResult({\n fileInfos,\n pageToken: s3FileList.pageToken,\n });\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),\n Forbidden: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),\n NoSuchBucket: () => actionResultError(FileListDirectoryErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n InvalidScopeError: (error) => actionResultError(FileListDirectoryErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileListDirectoryActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ListDirectory]: getProcessFileListDirectory(qpqConfig),\n});\n"]}
@@ -1,18 +1,20 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileReadBinaryContentsErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileReadBinaryContentsErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { readBinaryFile } from '../../../logic/s3/s3Utils';
4
4
  import { resolveStorageDriveBucketName } from './utils';
5
5
  const getProcessFileReadBinaryContents = (qpqConfig) => {
6
- return async ({ drive, filepath }) => {
6
+ return async ({ drive, filepath, scope }) => {
7
7
  try {
8
8
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
- return actionResult(await readBinaryFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
9
+ const key = composeScopedFilePath(scope, filepath);
10
+ return actionResult(await readBinaryFile(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
10
11
  }
11
12
  catch (error) {
12
13
  return actionResultErrorFromCaughtError(error, {
13
14
  InvalidObjectState: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
14
15
  NoSuchKey: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
15
16
  NotFound: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
17
+ InvalidScopeError: (error) => actionResultError(FileReadBinaryContentsErrorTypeEnum.InvalidScope, error.message),
16
18
  });
17
19
  }
18
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileReadBinaryContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,mCAAmC,GAEpC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,gCAAgC,GAAG,CAAC,SAAoB,EAAyC,EAAE;IACvG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAErE,OAAO,YAAY,CAAC,MAAM,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnI,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;gBAC1I,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBACnH,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;aACnH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wCAAwC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAClJ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,gCAAgC,CAAC,SAAS,CAAC;CACjF,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileReadBinaryContentsActionProcessor,\n FileReadBinaryContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { readBinaryFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileReadBinaryContents = (qpqConfig: QPQConfig): FileReadBinaryContentsActionProcessor => {\n return async ({ drive, filepath }) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n return actionResult(await readBinaryFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n NoSuchKey: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NotFound: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n });\n }\n };\n};\n\nexport const getFileReadBinaryContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ReadBinaryContents]: getProcessFileReadBinaryContents(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileReadBinaryContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,mCAAmC,GAEpC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,gCAAgC,GAAG,CAAC,SAAoB,EAAyC,EAAE;IACvG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEnD,OAAO,YAAY,CAAC,MAAM,cAAc,CAAC,YAAY,EAAE,GAAG,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9H,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;gBAC1I,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBACnH,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAClH,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aACjH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wCAAwC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAClJ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,gCAAgC,CAAC,SAAS,CAAC;CACjF,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileReadBinaryContentsActionProcessor,\n FileReadBinaryContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { readBinaryFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileReadBinaryContents = (qpqConfig: QPQConfig): FileReadBinaryContentsActionProcessor => {\n return async ({ drive, filepath, scope }) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const key = composeScopedFilePath(scope, filepath);\n\n return actionResult(await readBinaryFile(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n NoSuchKey: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NotFound: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n InvalidScopeError: (error) => actionResultError(FileReadBinaryContentsErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileReadBinaryContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ReadBinaryContents]: getProcessFileReadBinaryContents(qpqConfig),\n});\n"]}
@@ -1,18 +1,23 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileReadObjectJsonErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileReadObjectJsonErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { readTextFile } from '../../../logic/s3/s3Utils';
4
4
  import { resolveStorageDriveBucketName } from './utils';
5
5
  const getProcessFileReadObjectJson = (qpqConfig) => {
6
- return async ({ drive, filepath }) => {
6
+ return async ({ drive, filepath, scope }) => {
7
7
  try {
8
8
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
- const json = await readTextFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));
9
+ const key = composeScopedFilePath(scope, filepath);
10
+ const json = await readTextFile(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));
10
11
  const obj = JSON.parse(json);
11
12
  return actionResult(obj);
12
13
  }
13
14
  catch (error) {
14
15
  return actionResultErrorFromCaughtError(error, {
15
16
  InvalidObjectState: () => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
17
+ NoSuchKey: () => actionResultError(FileReadObjectJsonErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
18
+ NotFound: () => actionResultError(FileReadObjectJsonErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
19
+ SyntaxError: () => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidJson, `Invalid JSON in file: ${filepath}`), // JSON.parse failure
20
+ InvalidScopeError: (error) => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidScope, error.message),
16
21
  });
17
22
  }
18
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileReadObjectJsonActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,+BAA+B,GAEhC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,4BAA4B,GAAG,CAAC,SAAoB,EAA6C,EAAE;IACvG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAErE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC;YAEvH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;aACvI,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC9I,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,4BAA4B,CAAC,SAAS,CAAC;CACzE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileReadObjectJsonActionProcessor,\n FileReadObjectJsonErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { readTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileReadObjectJson = (qpqConfig: QPQConfig): FileReadObjectJsonActionProcessor<object> => {\n return async ({ drive, filepath }) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n const json = await readTextFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));\n\n const obj = JSON.parse(json);\n\n return actionResult(obj);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n });\n }\n };\n};\n\nexport const getFileReadObjectJsonActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ReadObjectJson]: getProcessFileReadObjectJson(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileReadObjectJsonActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,+BAA+B,GAEhC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,4BAA4B,GAAG,CAAC,SAAoB,EAA6C,EAAE;IACvG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,GAAG,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC;YAElH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;gBACtI,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAC/G,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAC9G,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,WAAW,EAAE,yBAAyB,QAAQ,EAAE,CAAC,EAAE,qBAAqB;gBAC7I,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC7G,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC9I,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,4BAA4B,CAAC,SAAS,CAAC;CACzE,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileReadObjectJsonActionProcessor,\n FileReadObjectJsonErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { readTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileReadObjectJson = (qpqConfig: QPQConfig): FileReadObjectJsonActionProcessor<object> => {\n return async ({ drive, filepath, scope }) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const key = composeScopedFilePath(scope, filepath);\n\n const json = await readTextFile(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));\n\n const obj = JSON.parse(json);\n\n return actionResult(obj);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n NoSuchKey: () => actionResultError(FileReadObjectJsonErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NotFound: () => actionResultError(FileReadObjectJsonErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n SyntaxError: () => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidJson, `Invalid JSON in file: ${filepath}`), // JSON.parse failure\n InvalidScopeError: (error) => actionResultError(FileReadObjectJsonErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileReadObjectJsonActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ReadObjectJson]: getProcessFileReadObjectJson(qpqConfig),\n});\n"]}
@@ -1,16 +1,20 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileReadTextContentsErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileReadTextContentsErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { readTextFile } from '../../../logic/s3/s3Utils';
4
4
  import { resolveStorageDriveBucketName } from './utils';
5
5
  const getProcessFileReadTextContents = (qpqConfig) => {
6
- return async ({ drive, filepath }) => {
6
+ return async ({ drive, filepath, scope }) => {
7
7
  try {
8
8
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
- return actionResult(await readTextFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
9
+ const key = composeScopedFilePath(scope, filepath);
10
+ return actionResult(await readTextFile(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
10
11
  }
11
12
  catch (error) {
12
13
  return actionResultErrorFromCaughtError(error, {
13
14
  InvalidObjectState: () => actionResultError(FileReadTextContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
15
+ NoSuchKey: () => actionResultError(FileReadTextContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
16
+ NotFound: () => actionResultError(FileReadTextContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
17
+ InvalidScopeError: (error) => actionResultError(FileReadTextContentsErrorTypeEnum.InvalidScope, error.message),
14
18
  });
15
19
  }
16
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileReadTextContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,iCAAiC,GAElC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,8BAA8B,GAAG,CAAC,SAAoB,EAAuC,EAAE;IACnG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAErE,OAAO,YAAY,CAAC,MAAM,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjI,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,iCAAiC,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;aACzI,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sCAAsC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAChJ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,8BAA8B,CAAC,SAAS,CAAC;CAC7E,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileReadTextContentsActionProcessor,\n FileReadTextContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { readTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileReadTextContents = (qpqConfig: QPQConfig): FileReadTextContentsActionProcessor => {\n return async ({ drive, filepath }) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n return actionResult(await readTextFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileReadTextContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n });\n }\n };\n};\n\nexport const getFileReadTextContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ReadTextContents]: getProcessFileReadTextContents(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileReadTextContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,iCAAiC,GAElC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,8BAA8B,GAAG,CAAC,SAAoB,EAAuC,EAAE;IACnG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEnD,OAAO,YAAY,CAAC,MAAM,YAAY,CAAC,YAAY,EAAE,GAAG,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5H,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,iCAAiC,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;gBACxI,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,iCAAiC,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBACjH,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,iCAAiC,CAAC,YAAY,EAAE,mBAAmB,QAAQ,EAAE,CAAC;gBAChH,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,iCAAiC,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC/G,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sCAAsC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAChJ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,8BAA8B,CAAC,SAAS,CAAC;CAC7E,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileReadTextContentsActionProcessor,\n FileReadTextContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { readTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileReadTextContents = (qpqConfig: QPQConfig): FileReadTextContentsActionProcessor => {\n return async ({ drive, filepath, scope }) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const key = composeScopedFilePath(scope, filepath);\n\n return actionResult(await readTextFile(s3BucketName, key, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileReadTextContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n NoSuchKey: () => actionResultError(FileReadTextContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NotFound: () => actionResultError(FileReadTextContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n InvalidScopeError: (error) => actionResultError(FileReadTextContentsErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileReadTextContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.ReadTextContents]: getProcessFileReadTextContents(qpqConfig),\n});\n"]}
@@ -1,5 +1,5 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, ErrorTypeEnum, FileActionType, FileStreamOpenErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, ErrorTypeEnum, FileActionType, FileStreamOpenErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
4
4
  import { randomGuid } from '../../../awsLambdaUtils';
5
5
  import { createAwsClient } from '../../../logic/createAwsClient';
@@ -19,13 +19,13 @@ async function* chunkedReadableIterator(stream, chunkSize, transform) {
19
19
  }
20
20
  }
21
21
  const getProcessFileStreamOpen = (qpqConfig) => {
22
- return async ({ drive, filepath, encoding, chunkSize }, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
22
+ return async ({ drive, filepath, encoding, chunkSize, scope }, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
23
23
  try {
24
24
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
25
25
  const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
26
26
  const s3Client = createAwsClient(S3Client, { region });
27
27
  const response = await s3Client.send(new GetObjectCommand({
28
- Key: filepath,
28
+ Key: composeScopedFilePath(scope, filepath),
29
29
  Bucket: s3BucketName,
30
30
  }));
31
31
  if (!response.Body) {
@@ -44,6 +44,7 @@ const getProcessFileStreamOpen = (qpqConfig) => {
44
44
  InvalidObjectState: () => actionResultError(FileStreamOpenErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
45
45
  NoSuchKey: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
46
46
  NotFound: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
47
+ InvalidScopeError: (error) => actionResultError(FileStreamOpenErrorTypeEnum.InvalidScope, error.message),
47
48
  });
48
49
  }
49
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileStreamOpenActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileStreamOpenActionProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n ErrorTypeEnum,\n FileActionType,\n FileStreamOpenActionProcessor,\n FileStreamOpenErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { Readable } from 'stream';\nimport { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';\n\nimport { randomGuid } from '../../../awsLambdaUtils';\nimport { createAwsClient } from '../../../logic/createAwsClient';\nimport { resolveStorageDriveBucketName } from './utils';\n\nasync function* chunkedReadableIterator(stream: Readable, chunkSize: number, transform: (buf: Buffer) => string): AsyncIterableIterator<string> {\n let buffer = Buffer.alloc(0);\n\n for await (const chunk of stream) {\n const incoming = typeof chunk === 'string' ? Buffer.from(chunk, 'utf8') : (chunk as Buffer);\n buffer = Buffer.concat([buffer, incoming]);\n\n while (buffer.length >= chunkSize) {\n yield transform(buffer.subarray(0, chunkSize));\n buffer = buffer.subarray(chunkSize);\n }\n }\n\n if (buffer.length > 0) {\n yield transform(buffer);\n }\n}\n\nconst getProcessFileStreamOpen = (qpqConfig: QPQConfig): FileStreamOpenActionProcessor => {\n return async ({ drive, filepath, encoding, chunkSize }, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n const s3Client = createAwsClient(S3Client, { region });\n\n const response = await s3Client.send(\n new GetObjectCommand({\n Key: filepath,\n Bucket: s3BucketName,\n }),\n );\n\n if (!response.Body) {\n return actionResultError(ErrorTypeEnum.GenericError, `Empty response body for: ${filepath}`);\n }\n\n const streamId = `s3-${randomGuid()}`;\n const isText = encoding === 'text';\n const size = chunkSize ?? 65536;\n const transform = isText ? (buf: Buffer) => buf.toString('utf8') : (buf: Buffer) => buf.toString('base64');\n const iterator = chunkedReadableIterator(response.Body as Readable, size, transform);\n streamRegistry.register(streamId, iterator);\n\n return actionResult({ id: streamId, encoding });\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileStreamOpenErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n NoSuchKey: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NotFound: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n });\n }\n };\n};\n\nexport const getFileStreamOpenActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.StreamOpen]: getProcessFileStreamOpen(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileStreamOpenActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileStreamOpenActionProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n ErrorTypeEnum,\n FileActionType,\n FileStreamOpenActionProcessor,\n FileStreamOpenErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { Readable } from 'stream';\nimport { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';\n\nimport { randomGuid } from '../../../awsLambdaUtils';\nimport { createAwsClient } from '../../../logic/createAwsClient';\nimport { resolveStorageDriveBucketName } from './utils';\n\nasync function* chunkedReadableIterator(stream: Readable, chunkSize: number, transform: (buf: Buffer) => string): AsyncIterableIterator<string> {\n let buffer = Buffer.alloc(0);\n\n for await (const chunk of stream) {\n const incoming = typeof chunk === 'string' ? Buffer.from(chunk, 'utf8') : (chunk as Buffer);\n buffer = Buffer.concat([buffer, incoming]);\n\n while (buffer.length >= chunkSize) {\n yield transform(buffer.subarray(0, chunkSize));\n buffer = buffer.subarray(chunkSize);\n }\n }\n\n if (buffer.length > 0) {\n yield transform(buffer);\n }\n}\n\nconst getProcessFileStreamOpen = (qpqConfig: QPQConfig): FileStreamOpenActionProcessor => {\n return async (\n { drive, filepath, encoding, chunkSize, scope },\n session,\n actionProcessors,\n logger,\n updateSession,\n dynamicModuleLoader,\n streamRegistry,\n ) => {\n try {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n const s3Client = createAwsClient(S3Client, { region });\n\n const response = await s3Client.send(\n new GetObjectCommand({\n Key: composeScopedFilePath(scope, filepath),\n Bucket: s3BucketName,\n }),\n );\n\n if (!response.Body) {\n return actionResultError(ErrorTypeEnum.GenericError, `Empty response body for: ${filepath}`);\n }\n\n const streamId = `s3-${randomGuid()}`;\n const isText = encoding === 'text';\n const size = chunkSize ?? 65536;\n const transform = isText ? (buf: Buffer) => buf.toString('utf8') : (buf: Buffer) => buf.toString('base64');\n const iterator = chunkedReadableIterator(response.Body as Readable, size, transform);\n streamRegistry.register(streamId, iterator);\n\n return actionResult({ id: streamId, encoding });\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n InvalidObjectState: () => actionResultError(FileStreamOpenErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),\n NoSuchKey: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n NotFound: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),\n InvalidScopeError: (error) => actionResultError(FileStreamOpenErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileStreamOpenActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.StreamOpen]: getProcessFileStreamOpen(qpqConfig),\n});\n"]}
@@ -1,13 +1,13 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileWriteBinaryContentsErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileWriteBinaryContentsErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';
4
4
  import { writeBinaryFile } from '../../../logic/s3/s3Utils';
5
5
  import { resolveStorageDriveBucketName } from './utils';
6
6
  const getProcessFileWriteBinaryContents = (qpqConfig) => {
7
- return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions }) => {
7
+ return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions, scope }) => {
8
8
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
9
  try {
10
- await writeBinaryFile(s3BucketName, filepath, data, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier));
10
+ await writeBinaryFile(s3BucketName, composeScopedFilePath(scope, filepath), data, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier));
11
11
  return actionResult(void 0);
12
12
  }
13
13
  catch (error) {
@@ -15,6 +15,7 @@ const getProcessFileWriteBinaryContents = (qpqConfig) => {
15
15
  AccessDenied: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),
16
16
  Forbidden: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),
17
17
  NoSuchBucket: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
18
+ InvalidScopeError: (error) => actionResultError(FileWriteBinaryContentsErrorTypeEnum.InvalidScope, error.message),
18
19
  });
19
20
  }
20
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileWriteBinaryContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,oCAAoC,GAErC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,2CAA2C,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,iCAAiC,GAAG,CAAC,SAAoB,EAA0C,EAAE;IACzG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,EAAE,EAAE;QAC3E,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,eAAe,CACnB,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,2CAA2C,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAChG,CAAC;YAEF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACtH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACnH,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;aAC/H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yCAAyC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IACnJ,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,iCAAiC,CAAC,SAAS,CAAC;CACnF,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileWriteBinaryContentsActionProcessor,\n FileWriteBinaryContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';\nimport { writeBinaryFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileWriteBinaryContents = (qpqConfig: QPQConfig): FileWriteBinaryContentsActionProcessor => {\n return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n await writeBinaryFile(\n s3BucketName,\n filepath,\n data,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier),\n );\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n Forbidden: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n NoSuchBucket: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n });\n }\n };\n};\n\nexport const getFileWriteBinaryContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.WriteBinaryContents]: getProcessFileWriteBinaryContents(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileWriteBinaryContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,oCAAoC,GAErC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,2CAA2C,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,iCAAiC,GAAG,CAAC,SAAoB,EAA0C,EAAE;IACzG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,EAAE,EAAE;QAClF,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,eAAe,CACnB,YAAY,EACZ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,IAAI,EACJ,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,2CAA2C,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAChG,CAAC;YAEF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACtH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACnH,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;gBAC9H,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAClH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yCAAyC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IACnJ,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,iCAAiC,CAAC,SAAS,CAAC;CACnF,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileWriteBinaryContentsActionProcessor,\n FileWriteBinaryContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';\nimport { writeBinaryFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileWriteBinaryContents = (qpqConfig: QPQConfig): FileWriteBinaryContentsActionProcessor => {\n return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions, scope }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n await writeBinaryFile(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n data,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier),\n );\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n Forbidden: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n NoSuchBucket: () => actionResultError(FileWriteBinaryContentsErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n InvalidScopeError: (error) => actionResultError(FileWriteBinaryContentsErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileWriteBinaryContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.WriteBinaryContents]: getProcessFileWriteBinaryContents(qpqConfig),\n});\n"]}
@@ -1,14 +1,14 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileWriteObjectJsonErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileWriteObjectJsonErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';
4
4
  import { writeTextFile } from '../../../logic/s3/s3Utils';
5
5
  import { resolveStorageDriveBucketName } from './utils';
6
6
  const getProcessFileWriteObjectJson = (qpqConfig) => {
7
- return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions }) => {
7
+ return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions, scope }) => {
8
8
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
9
  const dataJson = JSON.stringify(data);
10
10
  try {
11
- await writeTextFile(s3BucketName, filepath, dataJson, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier));
11
+ await writeTextFile(s3BucketName, composeScopedFilePath(scope, filepath), dataJson, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier));
12
12
  return actionResult(void 0);
13
13
  }
14
14
  catch (error) {
@@ -16,6 +16,7 @@ const getProcessFileWriteObjectJson = (qpqConfig) => {
16
16
  AccessDenied: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.AccessDenied, 'Access denied writing file'),
17
17
  Forbidden: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.AccessDenied, 'Access denied writing file'),
18
18
  NoSuchBucket: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
19
+ InvalidScopeError: (error) => actionResultError(FileWriteObjectJsonErrorTypeEnum.InvalidScope, error.message),
19
20
  });
20
21
  }
21
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileWriteObjectJsonActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,gCAAgC,GAEjC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,2CAA2C,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,6BAA6B,GAAG,CAAC,SAAoB,EAA8C,EAAE;IACzG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,EAAE,EAAE;QAC3E,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,aAAa,CACjB,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,2CAA2C,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAChG,CAAC;YAEF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBAClH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBAC/G,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;aAC3H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qCAAqC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC/I,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,6BAA6B,CAAC,SAAS,CAAC;CAC3E,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileWriteObjectJsonActionProcessor,\n FileWriteObjectJsonErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';\nimport { writeTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileWriteObjectJson = (qpqConfig: QPQConfig): FileWriteObjectJsonActionProcessor<object> => {\n return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n const dataJson = JSON.stringify(data);\n\n try {\n await writeTextFile(\n s3BucketName,\n filepath,\n dataJson,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier),\n );\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n Forbidden: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n NoSuchBucket: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n });\n }\n };\n};\n\nexport const getFileWriteObjectJsonActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.WriteObjectJson]: getProcessFileWriteObjectJson(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileWriteObjectJsonActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,gCAAgC,GAEjC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,2CAA2C,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,6BAA6B,GAAG,CAAC,SAAoB,EAA8C,EAAE;IACzG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,EAAE,EAAE;QAClF,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,aAAa,CACjB,YAAY,EACZ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,QAAQ,EACR,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,2CAA2C,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAChG,CAAC;YAEF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBAClH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBAC/G,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;gBAC1H,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAC9G,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qCAAqC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IAC/I,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,6BAA6B,CAAC,SAAS,CAAC;CAC3E,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileWriteObjectJsonActionProcessor,\n FileWriteObjectJsonErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';\nimport { writeTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileWriteObjectJson = (qpqConfig: QPQConfig): FileWriteObjectJsonActionProcessor<object> => {\n return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions, scope }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n const dataJson = JSON.stringify(data);\n\n try {\n await writeTextFile(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n dataJson,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier),\n );\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n Forbidden: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n NoSuchBucket: () => actionResultError(FileWriteObjectJsonErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n InvalidScopeError: (error) => actionResultError(FileWriteObjectJsonErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileWriteObjectJsonActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.WriteObjectJson]: getProcessFileWriteObjectJson(qpqConfig),\n});\n"]}
@@ -1,13 +1,13 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileWriteTextContentsErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, composeScopedFilePath, FileActionType, FileWriteTextContentsErrorTypeEnum, } from 'quidproquo-core';
3
3
  import { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';
4
4
  import { writeTextFile } from '../../../logic/s3/s3Utils';
5
5
  import { resolveStorageDriveBucketName } from './utils';
6
6
  const getProcessFileWriteTextContents = (qpqConfig) => {
7
- return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions }) => {
7
+ return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions, scope }) => {
8
8
  const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
9
9
  try {
10
- await writeTextFile(s3BucketName, filepath, data, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier));
10
+ await writeTextFile(s3BucketName, composeScopedFilePath(scope, filepath), data, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier));
11
11
  return actionResult(void 0);
12
12
  }
13
13
  catch (error) {
@@ -15,6 +15,7 @@ const getProcessFileWriteTextContents = (qpqConfig) => {
15
15
  AccessDenied: () => actionResultError(FileWriteTextContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),
16
16
  Forbidden: () => actionResultError(FileWriteTextContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),
17
17
  NoSuchBucket: () => actionResultError(FileWriteTextContentsErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
18
+ InvalidScopeError: (error) => actionResultError(FileWriteTextContentsErrorTypeEnum.InvalidScope, error.message),
18
19
  });
19
20
  }
20
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFileWriteTextContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EAEd,kCAAkC,GAEnC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,2CAA2C,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,+BAA+B,GAAG,CAAC,SAAoB,EAAwC,EAAE;IACrG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,EAAE,EAAE;QAC3E,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,aAAa,CACjB,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,2CAA2C,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAChG,CAAC;YAEF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACpH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACjH,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;aAC7H,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IACjJ,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,+BAA+B,CAAC,SAAS,CAAC;CAC/E,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n FileActionType,\n FileWriteTextContentsActionProcessor,\n FileWriteTextContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';\nimport { writeTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileWriteTextContents = (qpqConfig: QPQConfig): FileWriteTextContentsActionProcessor => {\n return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n await writeTextFile(\n s3BucketName,\n filepath,\n data,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier),\n );\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileWriteTextContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n Forbidden: () => actionResultError(FileWriteTextContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n NoSuchBucket: () => actionResultError(FileWriteTextContentsErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n });\n }\n };\n};\n\nexport const getFileWriteTextContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.WriteTextContents]: getProcessFileWriteTextContents(qpqConfig),\n});\n"]}
1
+ {"version":3,"file":"getFileWriteTextContentsActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,cAAc,EAEd,kCAAkC,GAEnC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,2CAA2C,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,+BAA+B,GAAG,CAAC,SAAoB,EAAwC,EAAE;IACrG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,EAAE,EAAE;QAClF,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,aAAa,CACjB,YAAY,EACZ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,EACtC,IAAI,EACJ,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,EAC7D,2CAA2C,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,CAChG,CAAC;YAEF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,gCAAgC,CAAC,KAAK,EAAE;gBAC7C,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACpH,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBACjH,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,aAAa,EAAE,4BAA4B,KAAK,EAAE,CAAC;gBAC5H,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;aAChH,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IACjJ,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,+BAA+B,CAAC,SAAS,CAAC;CAC/E,CAAC,CAAC","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n actionResultErrorFromCaughtError,\n composeScopedFilePath,\n FileActionType,\n FileWriteTextContentsActionProcessor,\n FileWriteTextContentsErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { getS3BucketStorageClassFromStorageDriveTier } from '../../../awsLambdaUtils';\nimport { writeTextFile } from '../../../logic/s3/s3Utils';\nimport { resolveStorageDriveBucketName } from './utils';\n\nconst getProcessFileWriteTextContents = (qpqConfig: QPQConfig): FileWriteTextContentsActionProcessor => {\n return async ({ drive, filepath, data, storageDriveAdvancedWriteOptions, scope }) => {\n const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);\n\n try {\n await writeTextFile(\n s3BucketName,\n composeScopedFilePath(scope, filepath),\n data,\n qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig),\n getS3BucketStorageClassFromStorageDriveTier(storageDriveAdvancedWriteOptions?.storageDriveTier),\n );\n\n return actionResult(void 0);\n } catch (error: unknown) {\n return actionResultErrorFromCaughtError(error, {\n AccessDenied: () => actionResultError(FileWriteTextContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n Forbidden: () => actionResultError(FileWriteTextContentsErrorTypeEnum.AccessDenied, 'Access denied writing file'),\n NoSuchBucket: () => actionResultError(FileWriteTextContentsErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),\n InvalidScopeError: (error) => actionResultError(FileWriteTextContentsErrorTypeEnum.InvalidScope, error.message),\n });\n }\n };\n};\n\nexport const getFileWriteTextContentsActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [FileActionType.WriteTextContents]: getProcessFileWriteTextContents(qpqConfig),\n});\n"]}
@@ -1,21 +1,23 @@
1
1
  import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { qpqCoreUtils } from 'quidproquo-core';
3
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, KeyValueStoreActionType, KeyValueStoreDeleteErrorTypeEnum, } from 'quidproquo-core';
2
+ import { actionResult, actionResultError, actionResultErrorFromCaughtError, getScopedKvsTranslatorOrThrow, KeyValueStoreActionType, KeyValueStoreDeleteErrorTypeEnum, resolveKvsStoreConfigOrThrow, } from 'quidproquo-core';
4
3
  import { getKvsDynamoTableNameFromConfig } from '../../../awsNamingUtils';
5
4
  import { deleteItem } from '../../../logic/dynamo';
6
5
  const getProcessKeyValueStoreDelete = (qpqConfig) => {
7
- return async ({ keyValueStoreName, key, sortKey }) => {
6
+ return async ({ keyValueStoreName, key, sortKey, options }) => {
8
7
  const dynamoTableName = getKvsDynamoTableNameFromConfig(keyValueStoreName, qpqConfig, 'kvs');
9
8
  const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
10
- const storeConfig = qpqCoreUtils.getKeyValueStoreByName(qpqConfig, keyValueStoreName);
11
9
  try {
12
- await deleteItem(dynamoTableName, region, key, storeConfig.partitionKey.key, sortKey, storeConfig.sortKeys[0]?.key);
10
+ const storeConfig = resolveKvsStoreConfigOrThrow(qpqConfig, keyValueStoreName);
11
+ const scoped = getScopedKvsTranslatorOrThrow(qpqConfig, keyValueStoreName, options?.scope);
12
+ await deleteItem(dynamoTableName, region, scoped.key(key), storeConfig.partitionKey.key, sortKey, storeConfig.sortKeys[0]?.key);
13
13
  return actionResult(void 0);
14
14
  }
15
15
  catch (error) {
16
16
  return actionResultErrorFromCaughtError(error, {
17
17
  InternalServerError: () => actionResultError(KeyValueStoreDeleteErrorTypeEnum.ServiceUnavailable, 'KVS Service Unavailable'),
18
18
  ResourceNotFoundException: () => actionResultError(KeyValueStoreDeleteErrorTypeEnum.ResourceNotFound, 'KVS Resource Not Found'),
19
+ InvalidScopeError: (error) => actionResultError(KeyValueStoreDeleteErrorTypeEnum.InvalidScope, error.message),
20
+ KvsStoreNotFoundError: (error) => actionResultError(KeyValueStoreDeleteErrorTypeEnum.StoreNotFound, error.message),
19
21
  });
20
22
  }
21
23
  };