quidproquo-actionprocessor-awslambda 0.0.262 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/awsNamingUtils.d.ts +1 -0
- package/lib/commonjs/awsNamingUtils.js +12 -1
- package/lib/commonjs/getActionProcessor/core/ai/aiModelMap.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/aiModelMap.js +15 -0
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js +42 -0
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +90 -0
- package/lib/commonjs/getActionProcessor/core/ai/index.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/{config/getConfigGetGlobalActionProcessor.js → ai/index.js} +6 -13
- package/lib/commonjs/getActionProcessor/core/ai/logic/aiStreamPartMappers.d.ts +6 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/aiStreamPartMappers.js +57 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/index.d.ts +32 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/index.js +48 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamAbort.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamAbort.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamCustom.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamCustom.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamError.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamError.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFilePart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFilePart.js +12 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +11 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +11 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamPart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamPart.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamRaw.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamRaw.js +8 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.js +12 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.js +16 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStart.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStart.js +8 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStartStep.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStartStep.js +8 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextStart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextStart.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.js +12 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.js +13 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolCall.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolCall.js +11 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolError.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolError.js +13 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolResult.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolResult.js +12 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.d.ts +19 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +53 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamUsage.d.ts +6 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamUsage.js +9 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toErrorMessage.d.ts +1 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toErrorMessage.js +11 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js +82 -0
- package/lib/commonjs/getActionProcessor/core/ai/types/aiSdkStreamPart.d.ts +5 -0
- package/lib/commonjs/getActionProcessor/core/ai/types/aiSdkStreamPart.js +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/types/index.d.ts +1 -0
- package/lib/commonjs/getActionProcessor/core/ai/types/index.js +17 -0
- package/lib/commonjs/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.js +50 -0
- package/lib/commonjs/getActionProcessor/core/apiKeyValidation/index.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/apiKeyValidation/index.js +17 -0
- package/lib/commonjs/getActionProcessor/core/config/getConfigGetSecretActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/config/getConfigSetParameterActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/config/index.js +1 -2
- package/lib/commonjs/getActionProcessor/core/event/apiGatwayEvent/api/getEventAutoRespondActionProcessor.js +2 -34
- package/lib/commonjs/getActionProcessor/core/event/apiGatwayEvent/api/getEventGetStorySessionActionProcessor.js +2 -31
- package/lib/commonjs/getActionProcessor/core/event/apiGatwayEvent/websocket/getEventTransformResponseResultActionProcessor.js +2 -2
- package/lib/commonjs/getActionProcessor/core/eventBus/getEventBusSendMessagesActionProcessor.js +16 -6
- package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js +17 -9
- package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js +9 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +5 -0
- package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +5 -0
- package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +13 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +16 -7
- package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +105 -0
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/file/index.js +2 -1
- package/lib/commonjs/getActionProcessor/core/index.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/index.js +6 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +12 -3
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/queue/getQueueSendMessageActionProcessor.js +17 -7
- package/lib/commonjs/getActionProcessor/core/system/getSystemExecuteStoryActionProcessor.js +5 -4
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.js +28 -0
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryChangePasswordActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryConfirmEmailVerificationActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryConfirmForgotPasswordActionProcessor.js +12 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryCreateUserActionProcessor.js +12 -3
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryDecodeAccessTokenActionProcessor.js +1 -1
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryForgotPasswordActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUserAttributesByUserIdActionProcessor.js +9 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersByAttributeActionProcessor.js +10 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRefreshTokenActionProcessor.js +17 -3
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +11 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRespondToAuthChallengeActionProcessor.js +34 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetPasswordActionProcessor.js +12 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetUserAttributesActionProcessor.js +13 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/index.js +2 -1
- package/lib/commonjs/getActionProcessor/webserver/serviceFunction/getServiceFunctionExecuteActionProcessor.js +2 -2
- package/lib/commonjs/index.d.ts +1 -0
- package/lib/commonjs/index.js +3 -0
- package/lib/commonjs/lambdaExtensions/getLogExtensionLayerPath.d.ts +10 -0
- package/lib/commonjs/lambdaExtensions/getLogExtensionLayerPath.js +20 -0
- package/lib/commonjs/lambdaExtensions/logExtensionPort.d.ts +1 -0
- package/lib/commonjs/lambdaExtensions/logExtensionPort.js +7 -0
- package/lib/commonjs/lambdaHandlers/getApiGatewayEventHandler.js +4 -8
- package/lib/commonjs/lambdaHandlers/getApiGatewayEventHandler_redirect.js +0 -2
- package/lib/commonjs/lambdaHandlers/helpers/getQpqLambdaRuntimeForEvent.js +2 -2
- package/lib/commonjs/lambdaHandlers/helpers/logger.d.ts +4 -1
- package/lib/commonjs/lambdaHandlers/helpers/logger.js +94 -36
- package/lib/commonjs/logic/cognito/associateSoftwareToken.d.ts +2 -0
- package/lib/commonjs/logic/cognito/associateSoftwareToken.js +28 -0
- package/lib/commonjs/logic/cognito/decodeValidJwt.js +2 -1
- package/lib/commonjs/logic/cognito/getUserAttributesBySub.d.ts +4 -0
- package/lib/commonjs/logic/cognito/getUserAttributesBySub.js +12 -2
- package/lib/commonjs/logic/cognito/utils/transformCognitoResponse.js +2 -0
- package/lib/commonjs/logic/cognito/verifySoftwareToken.d.ts +1 -0
- package/lib/commonjs/logic/cognito/verifySoftwareToken.js +28 -0
- package/lib/commonjs/logic/dynamo/qpqDynamoOrm/getDynamoTableIndexByConfigAndQuery.js +8 -2
- package/lib/commonjs/logic/s3/generatePresignedUploadUrl.js +8 -1
- package/lib/commonjs/logic/s3/objectExists.js +9 -3
- package/lib/esm/awsNamingUtils.d.ts +1 -0
- package/lib/esm/awsNamingUtils.js +10 -0
- package/lib/esm/getActionProcessor/core/ai/aiModelMap.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/aiModelMap.js +12 -0
- package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js +33 -0
- package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +46 -0
- package/lib/esm/getActionProcessor/core/ai/index.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/index.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/aiStreamPartMappers.d.ts +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/aiStreamPartMappers.js +54 -0
- package/lib/esm/getActionProcessor/core/ai/logic/index.d.ts +32 -0
- package/lib/esm/getActionProcessor/core/ai/logic/index.js +32 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamAbort.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamAbort.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamCustom.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamCustom.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamError.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamError.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFilePart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFilePart.js +8 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +7 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +7 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamPart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamPart.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamRaw.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamRaw.js +4 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.js +8 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.js +12 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStart.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStart.js +4 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStartStep.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStartStep.js +4 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextStart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextStart.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.js +8 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.js +9 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolCall.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolCall.js +7 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolError.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolError.js +9 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolResult.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolResult.js +8 -0
- package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.d.ts +19 -0
- package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +40 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamUsage.d.ts +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamUsage.js +5 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toErrorMessage.d.ts +1 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toErrorMessage.js +7 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js +78 -0
- package/lib/esm/getActionProcessor/core/ai/types/aiSdkStreamPart.d.ts +5 -0
- package/lib/esm/getActionProcessor/core/ai/types/aiSdkStreamPart.js +1 -0
- package/lib/esm/getActionProcessor/core/ai/types/index.d.ts +1 -0
- package/lib/esm/getActionProcessor/core/ai/types/index.js +1 -0
- package/lib/esm/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.js +35 -0
- package/lib/esm/getActionProcessor/core/apiKeyValidation/index.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/apiKeyValidation/index.js +4 -0
- package/lib/esm/getActionProcessor/core/config/getConfigGetSecretActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/config/getConfigSetParameterActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/config/index.js +0 -2
- package/lib/esm/getActionProcessor/core/event/apiGatwayEvent/api/getEventAutoRespondActionProcessor.js +3 -32
- package/lib/esm/getActionProcessor/core/event/apiGatwayEvent/api/getEventGetStorySessionActionProcessor.js +3 -35
- package/lib/esm/getActionProcessor/core/event/apiGatwayEvent/websocket/getEventTransformResponseResultActionProcessor.js +2 -2
- package/lib/esm/getActionProcessor/core/eventBus/getEventBusSendMessagesActionProcessor.js +20 -13
- package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js +18 -10
- package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js +10 -2
- package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +6 -1
- package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +6 -1
- package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +14 -3
- package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +20 -11
- package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +55 -0
- package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/file/index.js +2 -0
- package/lib/esm/getActionProcessor/core/index.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/index.js +8 -0
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +12 -4
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/queue/getQueueSendMessageActionProcessor.js +21 -14
- package/lib/esm/getActionProcessor/core/system/getSystemExecuteStoryActionProcessor.js +1 -0
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.js +13 -0
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryChangePasswordActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryConfirmEmailVerificationActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryConfirmForgotPasswordActionProcessor.js +13 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryCreateUserActionProcessor.js +13 -4
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryDecodeAccessTokenActionProcessor.js +2 -2
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryForgotPasswordActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUserAttributesByUserIdActionProcessor.js +10 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersByAttributeActionProcessor.js +11 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRefreshTokenActionProcessor.js +18 -4
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +12 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRespondToAuthChallengeActionProcessor.js +35 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetPasswordActionProcessor.js +13 -3
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetUserAttributesActionProcessor.js +14 -3
- package/lib/esm/getActionProcessor/core/userDirectory/index.js +2 -0
- package/lib/esm/getActionProcessor/webserver/serviceFunction/getServiceFunctionExecuteActionProcessor.js +3 -6
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.js +3 -0
- package/lib/esm/lambdaExtensions/getLogExtensionLayerPath.d.ts +10 -0
- package/lib/esm/lambdaExtensions/getLogExtensionLayerPath.js +13 -0
- package/lib/esm/lambdaExtensions/logExtensionPort.d.ts +1 -0
- package/lib/esm/lambdaExtensions/logExtensionPort.js +4 -0
- package/lib/esm/lambdaHandlers/getApiGatewayEventHandler.js +4 -8
- package/lib/esm/lambdaHandlers/getApiGatewayEventHandler_redirect.js +0 -2
- package/lib/esm/lambdaHandlers/helpers/getQpqLambdaRuntimeForEvent.js +1 -1
- package/lib/esm/lambdaHandlers/helpers/logger.d.ts +4 -1
- package/lib/esm/lambdaHandlers/helpers/logger.js +94 -38
- package/lib/esm/logic/cognito/associateSoftwareToken.d.ts +2 -0
- package/lib/esm/logic/cognito/associateSoftwareToken.js +15 -0
- package/lib/esm/logic/cognito/decodeValidJwt.js +2 -1
- package/lib/esm/logic/cognito/getUserAttributesBySub.d.ts +4 -0
- package/lib/esm/logic/cognito/getUserAttributesBySub.js +10 -1
- package/lib/esm/logic/cognito/utils/transformCognitoResponse.js +2 -0
- package/lib/esm/logic/cognito/verifySoftwareToken.d.ts +1 -0
- package/lib/esm/logic/cognito/verifySoftwareToken.js +15 -0
- package/lib/esm/logic/dynamo/qpqDynamoOrm/getDynamoTableIndexByConfigAndQuery.js +7 -2
- package/lib/esm/logic/s3/generatePresignedUploadUrl.js +8 -1
- package/lib/esm/logic/s3/objectExists.js +8 -3
- package/lib/extension-layer/extensions/qpq-log-extension +2 -0
- package/lib/extension-layer/qpq-log-extension/index.js +58 -0
- package/package.json +11 -6
- package/lib/commonjs/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.d.ts +0 -2
- package/lib/commonjs/getActionProcessor/core/event/utils/isAuthValid.d.ts +0 -3
- package/lib/commonjs/getActionProcessor/core/event/utils/isAuthValid.js +0 -68
- package/lib/esm/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.d.ts +0 -2
- package/lib/esm/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.js +0 -10
- package/lib/esm/getActionProcessor/core/event/utils/isAuthValid.d.ts +0 -3
- package/lib/esm/getActionProcessor/core/event/utils/isAuthValid.js +0 -55
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const mapUserPart = (part) => {
|
|
2
|
+
if (part.type === 'text') {
|
|
3
|
+
return { type: 'text', text: part.text };
|
|
4
|
+
}
|
|
5
|
+
return {
|
|
6
|
+
type: 'file',
|
|
7
|
+
data: new URL(part.url),
|
|
8
|
+
mediaType: part.mediaType,
|
|
9
|
+
filename: part.filename,
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
const mapAssistantPart = (part) => {
|
|
13
|
+
switch (part.type) {
|
|
14
|
+
case 'text':
|
|
15
|
+
return { type: 'text', text: part.text };
|
|
16
|
+
case 'file':
|
|
17
|
+
return {
|
|
18
|
+
type: 'file',
|
|
19
|
+
data: new URL(part.url),
|
|
20
|
+
mediaType: part.mediaType,
|
|
21
|
+
filename: part.filename,
|
|
22
|
+
};
|
|
23
|
+
case 'tool-call':
|
|
24
|
+
return {
|
|
25
|
+
type: 'tool-call',
|
|
26
|
+
toolCallId: part.toolCallId,
|
|
27
|
+
toolName: part.toolName,
|
|
28
|
+
input: part.input,
|
|
29
|
+
};
|
|
30
|
+
case 'reasoning':
|
|
31
|
+
return {
|
|
32
|
+
type: 'reasoning',
|
|
33
|
+
text: part.text,
|
|
34
|
+
providerOptions: part.providerOptions,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const mapToolResult = (part) => {
|
|
39
|
+
const output = part.isError
|
|
40
|
+
? typeof part.output === 'string'
|
|
41
|
+
? { type: 'error-text', value: part.output }
|
|
42
|
+
: { type: 'error-json', value: part.output }
|
|
43
|
+
: typeof part.output === 'string'
|
|
44
|
+
? { type: 'text', value: part.output }
|
|
45
|
+
: { type: 'json', value: part.output };
|
|
46
|
+
return {
|
|
47
|
+
type: 'tool-result',
|
|
48
|
+
toolCallId: part.toolCallId,
|
|
49
|
+
toolName: part.toolName,
|
|
50
|
+
output,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const mapUserMessage = (message) => {
|
|
54
|
+
if (typeof message.content === 'string') {
|
|
55
|
+
return { role: 'user', content: message.content };
|
|
56
|
+
}
|
|
57
|
+
return { role: 'user', content: message.content.map(mapUserPart) };
|
|
58
|
+
};
|
|
59
|
+
const mapAssistantMessage = (message) => {
|
|
60
|
+
if (typeof message.content === 'string') {
|
|
61
|
+
return { role: 'assistant', content: message.content };
|
|
62
|
+
}
|
|
63
|
+
return { role: 'assistant', content: message.content.map(mapAssistantPart) };
|
|
64
|
+
};
|
|
65
|
+
const mapToolMessage = (message) => ({
|
|
66
|
+
role: 'tool',
|
|
67
|
+
content: message.content.map(mapToolResult),
|
|
68
|
+
});
|
|
69
|
+
export const toSdkMessages = (messages) => messages.map((message) => {
|
|
70
|
+
switch (message.role) {
|
|
71
|
+
case 'user':
|
|
72
|
+
return mapUserMessage(message);
|
|
73
|
+
case 'assistant':
|
|
74
|
+
return mapAssistantMessage(message);
|
|
75
|
+
case 'tool':
|
|
76
|
+
return mapToolMessage(message);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './aiSdkStreamPart';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './aiSdkStreamPart';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
+
import { actionResult, qpqCoreUtils, } from 'quidproquo-core';
|
|
3
|
+
import { ApiKeyValidationActionType } from 'quidproquo-webserver';
|
|
4
|
+
import { timingSafeEqual } from 'crypto';
|
|
5
|
+
import { getConfigRuntimeResourceName } from '../../../awsNamingUtils';
|
|
6
|
+
import { getApiKeys } from '../../../logic/apiGateway/getApiKeys';
|
|
7
|
+
// Constant-time string equality. `timingSafeEqual` throws on length mismatch,
|
|
8
|
+
// so guard the length check — the length itself isn't secret for API keys.
|
|
9
|
+
const safeEqual = (a, b) => {
|
|
10
|
+
if (!a || !b || a.length != b.length) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const aBuf = Buffer.from(a, 'utf8');
|
|
14
|
+
const bBuf = Buffer.from(b, 'utf8');
|
|
15
|
+
return timingSafeEqual(aBuf, bBuf);
|
|
16
|
+
};
|
|
17
|
+
const getProcessApiKeyValidationValidate = (qpqConfig) => {
|
|
18
|
+
const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
|
|
19
|
+
const application = qpqCoreUtils.getApplicationName(qpqConfig);
|
|
20
|
+
const service = qpqCoreUtils.getApplicationModuleName(qpqConfig);
|
|
21
|
+
const environment = qpqCoreUtils.getApplicationModuleEnvironment(qpqConfig);
|
|
22
|
+
const feature = qpqCoreUtils.getApplicationModuleFeature(qpqConfig);
|
|
23
|
+
return async ({ apiKeyValue, apiKeyReferences }) => {
|
|
24
|
+
const realApiKeys = await getApiKeys(region, ...apiKeyReferences.map((apiKey) => {
|
|
25
|
+
const apiKeyApplication = apiKey.applicationName || application;
|
|
26
|
+
const apiKeyService = apiKey.serviceName || service;
|
|
27
|
+
return getConfigRuntimeResourceName(apiKey.name, apiKeyApplication, apiKeyService, environment, feature);
|
|
28
|
+
}));
|
|
29
|
+
const matched = realApiKeys.some((apiKey) => safeEqual(apiKey.value, apiKeyValue));
|
|
30
|
+
return actionResult(matched);
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export const getApiKeyValidationValidateActionProcessor = async (qpqConfig) => ({
|
|
34
|
+
[ApiKeyValidationActionType.Validate]: getProcessApiKeyValidationValidate(qpqConfig),
|
|
35
|
+
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { getApiKeyValidationValidateActionProcessor } from './getApiKeyValidationValidateActionProcessor';
|
|
2
|
+
export const getApiKeyValidationActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
|
|
3
|
+
...(await getApiKeyValidationValidateActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
4
|
+
});
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, ConfigActionType, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, ConfigActionType, ConfigGetSecretErrorTypeEnum, } from 'quidproquo-core';
|
|
3
3
|
import { getSecret } from '../../../logic/secretsManager/getSecret';
|
|
4
4
|
import { resolveSecretResourceName } from './utils';
|
|
5
5
|
const getProcessConfigGetSecret = (qpqConfig) => {
|
|
6
6
|
return async ({ secretName }) => {
|
|
7
7
|
const awsSecretKey = resolveSecretResourceName(secretName, qpqConfig);
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
try {
|
|
9
|
+
const secretValue = await getSecret(awsSecretKey, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));
|
|
10
|
+
return actionResult(secretValue);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return actionResultErrorFromCaughtError(error, {
|
|
14
|
+
ResourceNotFoundException: () => actionResultError(ConfigGetSecretErrorTypeEnum.ResourceNotFound, `Secret not found: [${secretName}]`),
|
|
15
|
+
ThrottlingException: () => actionResultError(ConfigGetSecretErrorTypeEnum.Throttling, 'Throttling: Rate exceeded'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
10
18
|
};
|
|
11
19
|
};
|
|
12
20
|
export const getConfigGetSecretActionProcessor = async (qpqConfig) => ({
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, ConfigActionType, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, ConfigActionType, ConfigSetParameterErrorTypeEnum, } from 'quidproquo-core';
|
|
3
3
|
import { setParameter } from '../../../logic/parametersManager/setParameter';
|
|
4
4
|
import { resolveParameterKey } from '../../../runtimeConfig/qpqAwsLambdaRuntimeConfigUtils';
|
|
5
5
|
const getProcessConfigSetParameter = (qpqConfig) => {
|
|
6
6
|
return async ({ parameterName, parameterValue }) => {
|
|
7
7
|
const awsParameterKey = resolveParameterKey(parameterName, qpqConfig);
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
try {
|
|
9
|
+
await setParameter(awsParameterKey, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), parameterValue);
|
|
10
|
+
return actionResult(void 0);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return actionResultErrorFromCaughtError(error, {
|
|
14
|
+
ThrottlingException: () => actionResultError(ConfigSetParameterErrorTypeEnum.Throttling, 'Throttling: Rate exceeded'),
|
|
15
|
+
ParameterLimitExceeded: () => actionResultError(ConfigSetParameterErrorTypeEnum.QuotaExceeded, 'Parameter store limit exceeded'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
10
18
|
};
|
|
11
19
|
};
|
|
12
20
|
export const getConfigSetParameterActionProcessor = async (qpqConfig) => ({
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { getConfigGetGlobalActionProcessor } from './getConfigGetGlobalActionProcessor';
|
|
2
1
|
import { getConfigGetParameterActionProcessor } from './getConfigGetParameterActionProcessor';
|
|
3
2
|
import { getConfigGetParametersActionProcessor } from './getConfigGetParametersActionProcessor';
|
|
4
3
|
import { getConfigGetSecretActionProcessor } from './getConfigGetSecretActionProcessor';
|
|
5
4
|
import { getConfigListParametersActionProcessor } from './getConfigListParametersActionProcessor';
|
|
6
5
|
import { getConfigSetParameterActionProcessor } from './getConfigSetParameterActionProcessor';
|
|
7
6
|
export const getConfigActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
|
|
8
|
-
...(await getConfigGetGlobalActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
9
7
|
...(await getConfigGetParameterActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
10
8
|
...(await getConfigGetParametersActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
11
9
|
...(await getConfigGetSecretActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
@@ -1,33 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const getProcessAutoRespond = (qpqConfig) => {
|
|
5
|
-
return async ({ qpqEventRecord, matchResult }) => {
|
|
6
|
-
// Just auto respond for options requests
|
|
7
|
-
if (qpqEventRecord.method === 'OPTIONS') {
|
|
8
|
-
return actionResult({
|
|
9
|
-
status: 200,
|
|
10
|
-
isBase64Encoded: false,
|
|
11
|
-
body: '',
|
|
12
|
-
headers: qpqWebServerUtils.getCorsHeaders(qpqConfig, matchResult.config || {}, qpqEventRecord.headers),
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
// TODO: We can pull out the jwt from the session if thats a better way?
|
|
16
|
-
// Think about that when you dont have covid.
|
|
17
|
-
const authValid = await isAuthValid(qpqConfig, qpqWebServerUtils.getHeaderValue('Authorization', qpqEventRecord.headers), qpqWebServerUtils.getHeaderValue('x-api-key', qpqEventRecord.headers), matchResult.config?.routeAuthSettings);
|
|
18
|
-
if (!authValid) {
|
|
19
|
-
return actionResult({
|
|
20
|
-
status: 401,
|
|
21
|
-
isBase64Encoded: false,
|
|
22
|
-
body: JSON.stringify({
|
|
23
|
-
message: 'You are unauthorized to access this resource',
|
|
24
|
-
}),
|
|
25
|
-
headers: qpqWebServerUtils.getCorsHeaders(qpqConfig, matchResult.config || {}, qpqEventRecord.headers),
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
return actionResult(null);
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
export const getEventAutoRespondActionProcessor = async (qpqConfig) => ({
|
|
32
|
-
[EventActionType.AutoRespond]: getProcessAutoRespond(qpqConfig),
|
|
1
|
+
import { getHttpApiEventAutoRespondActionProcessor } from 'quidproquo-webserver';
|
|
2
|
+
export const getEventAutoRespondActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
|
|
3
|
+
...(await getHttpApiEventAutoRespondActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
33
4
|
});
|
|
@@ -1,36 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const getProcessGetStorySession = (qpqConfig) => {
|
|
5
|
-
return async ({ matchStoryResult, qpqEventRecord }, session) => {
|
|
6
|
-
const accessToken = qpqWebServerUtils.getAccessTokenFromHeaders(qpqEventRecord.headers);
|
|
7
|
-
if (!accessToken) {
|
|
8
|
-
return actionResult(void 0);
|
|
9
|
-
}
|
|
10
|
-
// if this endpoint has no auth settings, BUT we do have an access token
|
|
11
|
-
// then we want to just attempt to extract info for logs, but we will say that its
|
|
12
|
-
// wasValid = false
|
|
13
|
-
if (!matchStoryResult.config?.routeAuthSettings?.userDirectoryName) {
|
|
14
|
-
// If this endpoint is unauthenticated, then we will just decode it, and say it wasnt valid, for logs
|
|
15
|
-
const info = qpqWebServerUtils.decodeJWT(accessToken);
|
|
16
|
-
return actionResult({
|
|
17
|
-
...session,
|
|
18
|
-
decodedAccessToken: {
|
|
19
|
-
exp: info?.exp || 0,
|
|
20
|
-
userDirectory: '',
|
|
21
|
-
userId: info?.sub || info?.id || info?.userId || info?.username || '',
|
|
22
|
-
username: info?.username || info?.userId || info?.sub || info?.id || '',
|
|
23
|
-
wasValid: false,
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
const decodedAccessToken = await decodeAccessToken(matchStoryResult.config.routeAuthSettings.userDirectoryName, qpqConfig, accessToken, true);
|
|
28
|
-
return actionResult({
|
|
29
|
-
...session,
|
|
30
|
-
decodedAccessToken,
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
export const getEventGetStorySessionActionProcessor = async (qpqConfig) => ({
|
|
35
|
-
[EventActionType.GetStorySession]: getProcessGetStorySession(qpqConfig),
|
|
1
|
+
import { getHttpApiEventGetStorySessionActionProcessor } from 'quidproquo-webserver';
|
|
2
|
+
export const getEventGetStorySessionActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
|
|
3
|
+
...(await getHttpApiEventGetStorySessionActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
36
4
|
});
|
|
@@ -11,10 +11,10 @@ export function* askTransformResponseStory({ eventParams, qpqEventRecordResponse
|
|
|
11
11
|
const getProcessTransformResponseResult = (qpqConfig) => {
|
|
12
12
|
// Create a custom runtime for errored responses so we can log them out
|
|
13
13
|
const errorCustomImplementation = getProcessCustomImplementation(qpqConfig, askTransformResponseStory, 'Transform Errored Websocket Response', null, () => new Date().toISOString(), randomGuid);
|
|
14
|
-
return async (payload, session, actionProcessors, logger, updateSession, dynamicModuleLoader) => {
|
|
14
|
+
return async (payload, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
|
|
15
15
|
if (payload.qpqEventRecordResponses.some((r) => !r.success)) {
|
|
16
16
|
// We only wan't to run this for errors, because a custom imp is slower then a regular imp
|
|
17
|
-
return await errorCustomImplementation(payload, session, actionProcessors, logger, updateSession, dynamicModuleLoader);
|
|
17
|
+
return await errorCustomImplementation(payload, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry);
|
|
18
18
|
}
|
|
19
19
|
return actionResult({
|
|
20
20
|
statusCode: 200,
|
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, actionResultError, ErrorTypeEnum, EventBusActionType, qpqCoreUtils, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, ErrorTypeEnum, EventBusActionType, EventBusSendMessagesErrorTypeEnum, qpqCoreUtils, toCrossServiceSession, } from 'quidproquo-core';
|
|
3
3
|
import { getEventBusSnsTopicArn } from '../../../awsNamingUtils';
|
|
4
4
|
import { publishMessage } from '../../../logic/sns/publishMessage';
|
|
5
5
|
const getProcessEventBusSendMessage = (qpqConfig) => {
|
|
6
|
-
return async ({ eventBusName, eventBusMessages,
|
|
6
|
+
return async ({ eventBusName, eventBusMessages, }, session) => {
|
|
7
7
|
const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
|
|
8
8
|
const eventBusConfig = qpqCoreUtils.getEventBusConfigByName(eventBusName, qpqConfig);
|
|
9
9
|
if (!eventBusConfig) {
|
|
10
10
|
return actionResultError(ErrorTypeEnum.NotFound, `Event bus ${eventBusName} not found`);
|
|
11
11
|
}
|
|
12
12
|
const topicArn = getEventBusSnsTopicArn(eventBusConfig.owner?.resourceNameOverride || eventBusName, qpqConfig, eventBusConfig.owner?.module || qpqCoreUtils.getApplicationModuleName(qpqConfig), eventBusConfig.owner?.environment || qpqCoreUtils.getApplicationModuleEnvironment(qpqConfig), eventBusConfig.owner?.application || qpqCoreUtils.getApplicationName(qpqConfig), eventBusConfig.owner?.feature || qpqCoreUtils.getApplicationModuleFeature(qpqConfig));
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
return
|
|
22
|
-
}
|
|
23
|
-
|
|
13
|
+
try {
|
|
14
|
+
await publishMessage(topicArn, region, eventBusMessages.map((message) => {
|
|
15
|
+
const eventBusMessageWithSession = {
|
|
16
|
+
...message,
|
|
17
|
+
storySession: toCrossServiceSession(session),
|
|
18
|
+
};
|
|
19
|
+
return JSON.stringify(eventBusMessageWithSession);
|
|
20
|
+
}));
|
|
21
|
+
return actionResult(void 0);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return actionResultErrorFromCaughtError(error, {
|
|
25
|
+
AuthorizationErrorException: () => actionResultError(EventBusSendMessagesErrorTypeEnum.AccessDenied, 'Access denied publishing to event bus'),
|
|
26
|
+
NotFoundException: () => actionResultError(EventBusSendMessagesErrorTypeEnum.TopicNotFound, `Event bus topic not found: ${eventBusName}`),
|
|
27
|
+
InternalErrorException: () => actionResultError(EventBusSendMessagesErrorTypeEnum.ServiceUnavailable, 'Event bus service unavailable'),
|
|
28
|
+
ThrottledException: () => actionResultError(EventBusSendMessagesErrorTypeEnum.ServiceUnavailable, 'Event bus throttled'),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
24
31
|
};
|
|
25
32
|
};
|
|
26
33
|
export const getEventBusSendMessagesActionProcessor = async (qpqConfig) => ({
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, FileActionType } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileDeleteErrorTypeEnum } from 'quidproquo-core';
|
|
3
3
|
import { deleteFiles } from '../../../logic/s3/s3Utils';
|
|
4
4
|
import { resolveStorageDriveBucketName } from './utils';
|
|
5
5
|
const getProcessFileDelete = (qpqConfig) => {
|
|
6
6
|
return async ({ drive, filepaths }) => {
|
|
7
7
|
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
try {
|
|
9
|
+
const errored = await deleteFiles(s3BucketName, filepaths, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));
|
|
10
|
+
// errored deletes are a graceful success ~ Retry
|
|
11
|
+
// if (errored.length > 0) {
|
|
12
|
+
// return actionResultError(
|
|
13
|
+
// ErrorTypeEnum.GenericError,
|
|
14
|
+
// `Could not delete files ${errored.length}`,
|
|
15
|
+
// );
|
|
16
|
+
// }
|
|
17
|
+
return actionResult(errored);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return actionResultErrorFromCaughtError(error, {
|
|
21
|
+
AccessDenied: () => actionResultError(FileDeleteErrorTypeEnum.AccessDenied, 'Access denied deleting files'),
|
|
22
|
+
NoSuchBucket: () => actionResultError(FileDeleteErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
17
25
|
};
|
|
18
26
|
};
|
|
19
27
|
export const getFileDeleteActionProcessor = async (qpqConfig) => ({
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, FileActionType, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileExistsErrorTypeEnum, } from 'quidproquo-core';
|
|
3
3
|
import { objectExists } from '../../../logic/s3/s3Utils';
|
|
4
4
|
import { resolveStorageDriveBucketName } from './utils';
|
|
5
5
|
const getProcessFileExists = (qpqConfig) => {
|
|
6
6
|
return async ({ drive, filepath }) => {
|
|
7
7
|
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
8
|
-
|
|
8
|
+
try {
|
|
9
|
+
return actionResult(await objectExists(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
return actionResultErrorFromCaughtError(error, {
|
|
13
|
+
AccessDenied: () => actionResultError(FileExistsErrorTypeEnum.AccessDenied, 'Access denied checking file existence'),
|
|
14
|
+
Forbidden: () => actionResultError(FileExistsErrorTypeEnum.AccessDenied, 'Access denied checking file existence'),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
9
17
|
};
|
|
10
18
|
};
|
|
11
19
|
export const getFileExistsActionProcessor = async (qpqConfig) => ({
|
package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
2
|
import { actionResultError, ErrorTypeEnum } from 'quidproquo-core';
|
|
3
|
-
import { actionResult, FileActionType } from 'quidproquo-core';
|
|
3
|
+
import { actionResult, FileActionType, FileGenerateTemporarySecureUrlErrorTypeEnum } from 'quidproquo-core';
|
|
4
4
|
import { generatePresignedUrl } from '../../../logic/s3/generatePresignedUrl';
|
|
5
5
|
import { resolveStorageDriveBucketName } from './utils';
|
|
6
|
+
// SigV4 presigned URLs cannot expire more than 7 days in the future
|
|
7
|
+
const maxExpirationMs = 7 * 24 * 60 * 60 * 1000;
|
|
6
8
|
const getProcessFileGenerateTemporarySecureUrl = (qpqConfig) => {
|
|
7
9
|
return async ({ drive, filepath, expirationMs }) => {
|
|
10
|
+
if (expirationMs > maxExpirationMs) {
|
|
11
|
+
return actionResultError(FileGenerateTemporarySecureUrlErrorTypeEnum.ExpirationTooLong, 'Expiration exceeds the 7 day maximum for presigned URLs');
|
|
12
|
+
}
|
|
8
13
|
try {
|
|
9
14
|
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
10
15
|
const url = await generatePresignedUrl(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs);
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
2
|
import { actionResultError, ErrorTypeEnum } from 'quidproquo-core';
|
|
3
|
-
import { actionResult, FileActionType } from 'quidproquo-core';
|
|
3
|
+
import { actionResult, FileActionType, FileGenerateTemporaryUploadSecureUrlErrorTypeEnum } from 'quidproquo-core';
|
|
4
4
|
import { generatePresignedUploadUrl } from '../../../logic/s3/generatePresignedUploadUrl';
|
|
5
5
|
import { resolveStorageDriveBucketName } from './utils';
|
|
6
|
+
// SigV4 presigned URLs cannot expire more than 7 days in the future
|
|
7
|
+
const maxExpirationMs = 7 * 24 * 60 * 60 * 1000;
|
|
6
8
|
const getProcessFileGenerateTemporaryUploadSecureUrl = (qpqConfig) => {
|
|
7
9
|
return async ({ drive, filepath, expirationMs, contentType }, session) => {
|
|
10
|
+
if (expirationMs > maxExpirationMs) {
|
|
11
|
+
return actionResultError(FileGenerateTemporaryUploadSecureUrlErrorTypeEnum.ExpirationTooLong, 'Expiration exceeds the 7 day maximum for presigned URLs');
|
|
12
|
+
}
|
|
8
13
|
try {
|
|
9
14
|
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
10
15
|
const url = await generatePresignedUploadUrl(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), expirationMs, session.correlation, contentType);
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, FileActionType, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, 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
6
|
return async ({ drive, filepath }) => {
|
|
7
7
|
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
try {
|
|
9
|
+
const isColdStorage = (await getObjectStorageClass(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';
|
|
10
|
+
return actionResult(isColdStorage);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return actionResultErrorFromCaughtError(error, {
|
|
14
|
+
AccessDenied: () => actionResultError(FileIsColdStorageErrorTypeEnum.AccessDenied, 'Access denied reading file storage class'),
|
|
15
|
+
Forbidden: () => actionResultError(FileIsColdStorageErrorTypeEnum.AccessDenied, 'Access denied reading file storage class'),
|
|
16
|
+
NotFound: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
|
|
17
|
+
NoSuchKey: () => actionResultError(FileIsColdStorageErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
|
|
18
|
+
NoSuchBucket: () => actionResultError(FileIsColdStorageErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
10
21
|
};
|
|
11
22
|
};
|
|
12
23
|
export const getFileIsColdStorageActionProcessor = async (qpqConfig) => ({
|
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, FileActionType, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, FileActionType, FileListDirectoryErrorTypeEnum, } from 'quidproquo-core';
|
|
3
3
|
import { listFiles } from '../../../logic/s3/s3Utils';
|
|
4
4
|
import { resolveStorageDriveBucketName } from './utils';
|
|
5
5
|
const getProcessFileListDirectory = (qpqConfig) => {
|
|
6
6
|
return async ({ drive, folderPath, maxFiles, pageToken }) => {
|
|
7
7
|
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
try {
|
|
9
|
+
const s3FileList = await listFiles(s3BucketName, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), folderPath, maxFiles, pageToken);
|
|
10
|
+
// Add the drive onto the list
|
|
11
|
+
const fileInfos = s3FileList.fileInfos.map((s3fi) => ({
|
|
12
|
+
...s3fi,
|
|
13
|
+
drive,
|
|
14
|
+
}));
|
|
15
|
+
return actionResult({
|
|
16
|
+
fileInfos,
|
|
17
|
+
pageToken: s3FileList.pageToken,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return actionResultErrorFromCaughtError(error, {
|
|
22
|
+
AccessDenied: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),
|
|
23
|
+
Forbidden: () => actionResultError(FileListDirectoryErrorTypeEnum.AccessDenied, 'Access denied listing directory'),
|
|
24
|
+
NoSuchBucket: () => actionResultError(FileListDirectoryErrorTypeEnum.DriveNotFound, `Storage drive not found: ${drive}`),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
18
27
|
};
|
|
19
28
|
};
|
|
20
29
|
export const getFileListDirectoryActionProcessor = async (qpqConfig) => ({
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
-
import { actionResult, FileActionType, } from 'quidproquo-core';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, 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
6
|
return async ({ drive, filepath }) => {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
try {
|
|
8
|
+
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
9
|
+
return actionResult(await readBinaryFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
return actionResultErrorFromCaughtError(error, {
|
|
13
|
+
InvalidObjectState: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
|
|
14
|
+
NoSuchKey: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
|
|
15
|
+
NotFound: () => actionResultError(FileReadBinaryContentsErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
9
18
|
};
|
|
10
19
|
};
|
|
11
20
|
export const getFileReadBinaryContentsActionProcessor = async (qpqConfig) => ({
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
|
|
2
|
+
import { actionResult, actionResultError, actionResultErrorFromCaughtError, ErrorTypeEnum, FileActionType, FileStreamOpenErrorTypeEnum, } from 'quidproquo-core';
|
|
3
|
+
import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
|
4
|
+
import { randomGuid } from '../../../awsLambdaUtils';
|
|
5
|
+
import { createAwsClient } from '../../../logic/createAwsClient';
|
|
6
|
+
import { resolveStorageDriveBucketName } from './utils';
|
|
7
|
+
async function* chunkedReadableIterator(stream, chunkSize, transform) {
|
|
8
|
+
let buffer = Buffer.alloc(0);
|
|
9
|
+
for await (const chunk of stream) {
|
|
10
|
+
const incoming = typeof chunk === 'string' ? Buffer.from(chunk, 'utf8') : chunk;
|
|
11
|
+
buffer = Buffer.concat([buffer, incoming]);
|
|
12
|
+
while (buffer.length >= chunkSize) {
|
|
13
|
+
yield transform(buffer.subarray(0, chunkSize));
|
|
14
|
+
buffer = buffer.subarray(chunkSize);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (buffer.length > 0) {
|
|
18
|
+
yield transform(buffer);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const getProcessFileStreamOpen = (qpqConfig) => {
|
|
22
|
+
return async ({ drive, filepath, encoding, chunkSize }, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
|
|
23
|
+
try {
|
|
24
|
+
const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
|
|
25
|
+
const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
|
|
26
|
+
const s3Client = createAwsClient(S3Client, { region });
|
|
27
|
+
const response = await s3Client.send(new GetObjectCommand({
|
|
28
|
+
Key: filepath,
|
|
29
|
+
Bucket: s3BucketName,
|
|
30
|
+
}));
|
|
31
|
+
if (!response.Body) {
|
|
32
|
+
return actionResultError(ErrorTypeEnum.GenericError, `Empty response body for: ${filepath}`);
|
|
33
|
+
}
|
|
34
|
+
const streamId = `s3-${randomGuid()}`;
|
|
35
|
+
const isText = encoding === 'text';
|
|
36
|
+
const size = chunkSize ?? 65536;
|
|
37
|
+
const transform = isText
|
|
38
|
+
? (buf) => buf.toString('utf8')
|
|
39
|
+
: (buf) => buf.toString('base64');
|
|
40
|
+
const iterator = chunkedReadableIterator(response.Body, size, transform);
|
|
41
|
+
streamRegistry.register(streamId, iterator);
|
|
42
|
+
return actionResult({ id: streamId, encoding });
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return actionResultErrorFromCaughtError(error, {
|
|
46
|
+
InvalidObjectState: () => actionResultError(FileStreamOpenErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
|
|
47
|
+
NoSuchKey: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
|
|
48
|
+
NotFound: () => actionResultError(FileStreamOpenErrorTypeEnum.FileNotFound, `File not found: ${filepath}`),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export const getFileStreamOpenActionProcessor = async (qpqConfig) => ({
|
|
54
|
+
[FileActionType.StreamOpen]: getProcessFileStreamOpen(qpqConfig),
|
|
55
|
+
});
|