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,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getLogExtensionLayerPath = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
/**
|
|
9
|
+
* Absolute path to the built qpq-log-extension layer directory (contains the
|
|
10
|
+
* `extensions/` folder). Produced by scripts/buildLogExtensionLayer.mjs and
|
|
11
|
+
* shipped under lib/extension-layer. Used by the CDK layer construct as the
|
|
12
|
+
* LayerVersion asset source.
|
|
13
|
+
*
|
|
14
|
+
* Resolved relative to this compiled file: lib/<format>/lambdaExtensions/<this>
|
|
15
|
+
* -> ../../extension-layer.
|
|
16
|
+
*/
|
|
17
|
+
const getLogExtensionLayerPath = () => {
|
|
18
|
+
return path_1.default.resolve(__dirname, '..', '..', 'extension-layer');
|
|
19
|
+
};
|
|
20
|
+
exports.getLogExtensionLayerPath = getLogExtensionLayerPath;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LOG_EXTENSION_PORT = 9009;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOG_EXTENSION_PORT = void 0;
|
|
4
|
+
// Fixed localhost port the function handler uses to reach the qpq-log-extension.
|
|
5
|
+
// Hardcoded on both ends — the handler and the extension always ship together, so
|
|
6
|
+
// there's no need to pass it through an env var.
|
|
7
|
+
exports.LOG_EXTENSION_PORT = 9009;
|
|
@@ -4,12 +4,8 @@ exports.getApiGatewayEventHandler = void 0;
|
|
|
4
4
|
const quidproquo_core_1 = require("quidproquo-core");
|
|
5
5
|
const getActionProcessor_1 = require("../getActionProcessor");
|
|
6
6
|
const getQpqLambdaRuntimeForEvent_1 = require("./helpers/getQpqLambdaRuntimeForEvent");
|
|
7
|
-
const getApiGatewayEventHandler = (dynamicModuleLoader, qpqConfig) => (0, getQpqLambdaRuntimeForEvent_1.getQpqLambdaRuntimeForEvent)(quidproquo_core_1.QpqRuntimeType.API, (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
depth: 0,
|
|
12
|
-
context: {},
|
|
13
|
-
};
|
|
14
|
-
}, getActionProcessor_1.getApiGatewayApiEventEventProcessor, dynamicModuleLoader, qpqConfig);
|
|
7
|
+
const getApiGatewayEventHandler = (dynamicModuleLoader, qpqConfig) => (0, getQpqLambdaRuntimeForEvent_1.getQpqLambdaRuntimeForEvent)(quidproquo_core_1.QpqRuntimeType.API, () => ({
|
|
8
|
+
depth: 0,
|
|
9
|
+
context: {},
|
|
10
|
+
}), getActionProcessor_1.getApiGatewayApiEventEventProcessor, dynamicModuleLoader, qpqConfig);
|
|
15
11
|
exports.getApiGatewayEventHandler = getApiGatewayEventHandler;
|
|
@@ -11,8 +11,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.getApiGatewayEventHandler_redirect = void 0;
|
|
13
13
|
const apiGatewayEventHandler_redirect = (event, context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
-
console.log('event: ', JSON.stringify(event, null, 2));
|
|
15
|
-
console.log('process.env: ', JSON.stringify(process.env, null, 2));
|
|
16
14
|
const redirectConfig = JSON.parse(process.env.redirectConfig);
|
|
17
15
|
// For direct urls ~ Go straight to the url
|
|
18
16
|
let redirectUrl = redirectConfig.redirectUrl;
|
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.getQpqLambdaRuntimeForEvent = void 0;
|
|
13
|
-
const
|
|
13
|
+
const quidproquo_actionprocessor_js_1 = require("quidproquo-actionprocessor-js");
|
|
14
14
|
const quidproquo_core_1 = require("quidproquo-core");
|
|
15
15
|
const getActionProcessor_1 = require("../../getActionProcessor");
|
|
16
16
|
const dynamicModuleLoaderWarmer_1 = require("./dynamicModuleLoaderWarmer");
|
|
@@ -28,7 +28,7 @@ const getQpqLambdaRuntimeForEvent = (runtimeType, getStorySession, getActionProc
|
|
|
28
28
|
console.log('tick: ', JSON.stringify(event, null, 2));
|
|
29
29
|
const logger = (0, logger_1.getLogger)(qpqConfig);
|
|
30
30
|
const resolveStory = (0, quidproquo_core_1.createRuntime)(qpqConfig, getStorySession(event), () => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
-
return (Object.assign(Object.assign(Object.assign({}, (yield (0, getActionProcessor_1.getAwsActionProcessors)(qpqConfig, dynamicModuleLoader))), (yield getActionProcessorList(qpqConfig, dynamicModuleLoader))), (yield (0,
|
|
31
|
+
return (Object.assign(Object.assign(Object.assign({}, (yield (0, getActionProcessor_1.getAwsActionProcessors)(qpqConfig, dynamicModuleLoader))), (yield getActionProcessorList(qpqConfig, dynamicModuleLoader))), (yield (0, quidproquo_actionprocessor_js_1.getCustomActionActionProcessor)(qpqConfig, dynamicModuleLoader))));
|
|
32
32
|
}), () => new Date().toISOString(), logger, (0, getRuntimeCorrelation_1.getRuntimeCorrelation)(qpqConfig), runtimeType, dynamicModuleLoader);
|
|
33
33
|
const processEvent = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
34
34
|
const result = yield resolveStory(quidproquo_core_1.askProcessEvent, [event, context]);
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { QPQConfig, QpqLogger, StoryResult } from 'quidproquo-core';
|
|
2
|
-
|
|
2
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
3
|
+
export declare const storyLogger: (result: StoryResult<any>, bucketName: string, s3Client: S3Client) => Promise<void>;
|
|
3
4
|
export declare const storyLoggerFs: (result: StoryResult<any>) => Promise<void>;
|
|
4
5
|
export declare const moveLogsToPerminateStorage: (bucketName: string, region: string) => Promise<void>;
|
|
6
|
+
export declare const getS3Logger: (qpqConfig: QPQConfig) => QpqLogger;
|
|
7
|
+
export declare const getS3LoggerViaExtension: (qpqConfig: QPQConfig) => QpqLogger;
|
|
5
8
|
export declare const getLogger: (qpqConfig: QPQConfig) => QpqLogger;
|
|
@@ -12,18 +12,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getLogger = exports.moveLogsToPerminateStorage = exports.storyLoggerFs = exports.storyLogger = void 0;
|
|
15
|
+
exports.getLogger = exports.getS3LoggerViaExtension = exports.getS3Logger = exports.moveLogsToPerminateStorage = exports.storyLoggerFs = exports.storyLogger = void 0;
|
|
16
16
|
const quidproquo_core_1 = require("quidproquo-core");
|
|
17
17
|
const fs_1 = __importDefault(require("fs"));
|
|
18
18
|
const path_1 = __importDefault(require("path"));
|
|
19
19
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
20
20
|
const awsNamingUtils_1 = require("../../awsNamingUtils");
|
|
21
|
+
const logExtensionPort_1 = require("../../lambdaExtensions/logExtensionPort");
|
|
21
22
|
const tempDirectory = '/tmp/qpqlogs';
|
|
22
23
|
const quidproquo_config_aws_1 = require("quidproquo-config-aws");
|
|
23
24
|
const quidproquo_core_2 = require("quidproquo-core");
|
|
24
|
-
const storyLogger = (result, bucketName,
|
|
25
|
+
const storyLogger = (result, bucketName, s3Client) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
26
|
try {
|
|
26
|
-
const s3Client = new client_s3_1.S3Client({ region });
|
|
27
27
|
const commandParams = {
|
|
28
28
|
Key: `${result.correlation}.json`,
|
|
29
29
|
Bucket: bucketName,
|
|
@@ -54,11 +54,12 @@ const moveLogsToPerminateStorage = (bucketName, region) => __awaiter(void 0, voi
|
|
|
54
54
|
try {
|
|
55
55
|
yield fs_1.default.promises.mkdir(tempDirectory, { recursive: true });
|
|
56
56
|
const files = yield fs_1.default.promises.readdir(tempDirectory);
|
|
57
|
+
const s3Client = new client_s3_1.S3Client({ region });
|
|
57
58
|
for (const file of files) {
|
|
58
59
|
const filePath = path_1.default.join(tempDirectory, file);
|
|
59
60
|
const data = yield fs_1.default.promises.readFile(filePath, 'utf-8');
|
|
60
61
|
const result = JSON.parse(data);
|
|
61
|
-
yield (0, exports.storyLogger)(result, bucketName,
|
|
62
|
+
yield (0, exports.storyLogger)(result, bucketName, s3Client);
|
|
62
63
|
yield fs_1.default.promises.unlink(filePath);
|
|
63
64
|
console.log(`Moved log file [${file}] to S3 and deleted from temporary directory`);
|
|
64
65
|
}
|
|
@@ -69,50 +70,52 @@ const moveLogsToPerminateStorage = (bucketName, region) => __awaiter(void 0, voi
|
|
|
69
70
|
}
|
|
70
71
|
});
|
|
71
72
|
exports.moveLogsToPerminateStorage = moveLogsToPerminateStorage;
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
const service = awsSettings.logServiceName;
|
|
73
|
+
const noopLogger = {
|
|
74
|
+
enableLogs: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
75
|
+
log: () => { },
|
|
76
|
+
waitToFinishWriting: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
77
|
+
moveToPermanentStorage: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
78
|
+
};
|
|
79
|
+
// Resolves which S3 bucket (and its region) story logs go to for this config.
|
|
80
|
+
const resolveLogTarget = (qpqConfig) => {
|
|
81
|
+
const service = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoConfig)(qpqConfig).logServiceName;
|
|
84
82
|
const application = quidproquo_core_1.qpqCoreUtils.getApplicationName(qpqConfig);
|
|
85
83
|
const environment = quidproquo_core_1.qpqCoreUtils.getApplicationModuleEnvironment(qpqConfig);
|
|
86
84
|
const feature = quidproquo_core_1.qpqCoreUtils.getApplicationModuleFeature(qpqConfig);
|
|
87
|
-
|
|
88
|
-
const bucketName = (0, awsNamingUtils_1.getConfigRuntimeResourceName)('qpq-logs', application, service, environment, feature);
|
|
89
|
-
// Where is this bucket?
|
|
85
|
+
const bucketName = (0, awsNamingUtils_1.getConfigRuntimeResourceName)(quidproquo_core_1.QPQ_LOGS_STORAGE_DRIVE_NAME, application, service, environment, feature);
|
|
90
86
|
const regionForBucket = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoByDeploymentInfo)(qpqConfig, service, environment, feature, application).awsRegion;
|
|
87
|
+
return { bucketName, regionForBucket };
|
|
88
|
+
};
|
|
89
|
+
// Shared plumbing for both loggers: defers each log to a microtask, applies the
|
|
90
|
+
// disabled-correlation history filter, and tracks the promises so
|
|
91
|
+
// waitToFinishWriting can await them. Only `ship` (how a log reaches S3) differs.
|
|
92
|
+
const createBufferedLogger = (bucketName, regionForBucket, ship) => {
|
|
91
93
|
const logs = [];
|
|
92
94
|
let disabledLogCorrelations = [];
|
|
93
95
|
return {
|
|
94
96
|
enableLogs: (enable, reason, correlation) => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
|
-
|
|
96
|
-
disabledLogCorrelations
|
|
97
|
-
|
|
98
|
-
else {
|
|
99
|
-
disabledLogCorrelations = disabledLogCorrelations.filter((dlc) => dlc !== correlation);
|
|
100
|
-
}
|
|
97
|
+
disabledLogCorrelations = enable
|
|
98
|
+
? disabledLogCorrelations.filter((dlc) => dlc !== correlation)
|
|
99
|
+
: [...disabledLogCorrelations, correlation];
|
|
101
100
|
}),
|
|
102
|
-
log: (result) =>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
101
|
+
log: (result) => {
|
|
102
|
+
// Defer all work (including JSON.stringify) to a microtask so the caller is not blocked.
|
|
103
|
+
const promise = Promise.resolve()
|
|
104
|
+
.then(() => {
|
|
105
|
+
const modifyableResult = !disabledLogCorrelations.includes(result.correlation)
|
|
106
|
+
? result
|
|
107
|
+
: Object.assign(Object.assign({}, result), { history: (0, quidproquo_core_2.filterLogHistoryByActionTypes)(result.history, [
|
|
108
|
+
quidproquo_core_1.LogActionType.Create,
|
|
109
|
+
quidproquo_core_1.LogActionType.TemplateLiteral,
|
|
110
|
+
quidproquo_core_1.LogActionType.DisableEventHistory,
|
|
111
|
+
]) });
|
|
112
|
+
return ship(modifyableResult);
|
|
113
|
+
})
|
|
114
|
+
.catch((e) => {
|
|
112
115
|
console.log('Failed to log story result to S3', JSON.stringify(e, null, 2));
|
|
113
116
|
});
|
|
114
117
|
logs.push(promise);
|
|
115
|
-
}
|
|
118
|
+
},
|
|
116
119
|
waitToFinishWriting: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
117
120
|
yield Promise.all(logs);
|
|
118
121
|
}),
|
|
@@ -121,4 +124,59 @@ const getLogger = (qpqConfig) => {
|
|
|
121
124
|
}),
|
|
122
125
|
};
|
|
123
126
|
};
|
|
127
|
+
// Logs straight to S3: the handler awaits the PutObject itself. Simple and fully
|
|
128
|
+
// durable, but the invoke waits on S3. No extension required.
|
|
129
|
+
const getS3Logger = (qpqConfig) => {
|
|
130
|
+
const { bucketName, regionForBucket } = resolveLogTarget(qpqConfig);
|
|
131
|
+
const s3Client = new client_s3_1.S3Client({ region: regionForBucket });
|
|
132
|
+
return createBufferedLogger(bucketName, regionForBucket, (result) => (0, exports.storyLogger)(result, bucketName, s3Client));
|
|
133
|
+
};
|
|
134
|
+
exports.getS3Logger = getS3Logger;
|
|
135
|
+
// Logs via the qpq-log-extension: a fast local HTTP POST hands the log off so the
|
|
136
|
+
// response is not blocked on S3. Falls back to a direct S3 write if the extension
|
|
137
|
+
// is unreachable, so a log is never silently dropped.
|
|
138
|
+
const getS3LoggerViaExtension = (qpqConfig) => {
|
|
139
|
+
const { bucketName, regionForBucket } = resolveLogTarget(qpqConfig);
|
|
140
|
+
const s3Client = new client_s3_1.S3Client({ region: regionForBucket });
|
|
141
|
+
const sendToExtension = (result) => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
+
const res = yield fetch(`http://127.0.0.1:${logExtensionPort_1.LOG_EXTENSION_PORT}/log`, {
|
|
143
|
+
method: 'POST',
|
|
144
|
+
headers: { 'Content-Type': 'application/json' },
|
|
145
|
+
body: JSON.stringify({
|
|
146
|
+
bucketName,
|
|
147
|
+
region: regionForBucket,
|
|
148
|
+
key: `${result.correlation}.json`,
|
|
149
|
+
body: JSON.stringify(result),
|
|
150
|
+
storageClass: 'INTELLIGENT_TIERING',
|
|
151
|
+
}),
|
|
152
|
+
});
|
|
153
|
+
if (!res.ok) {
|
|
154
|
+
throw new Error(`extension responded ${res.status}`);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return createBufferedLogger(bucketName, regionForBucket, (result) => __awaiter(void 0, void 0, void 0, function* () {
|
|
158
|
+
try {
|
|
159
|
+
yield sendToExtension(result);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.log(`qpq-log-extension unreachable, writing [${result.correlation}] to S3 directly:`, error);
|
|
163
|
+
yield (0, exports.storyLogger)(result, bucketName, s3Client);
|
|
164
|
+
}
|
|
165
|
+
}));
|
|
166
|
+
};
|
|
167
|
+
exports.getS3LoggerViaExtension = getS3LoggerViaExtension;
|
|
168
|
+
const getLogger = (qpqConfig) => {
|
|
169
|
+
const awsSettings = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoConfig)(qpqConfig);
|
|
170
|
+
// If we have no log service, just return nothing.
|
|
171
|
+
if (!awsSettings.logServiceName || awsSettings.disableLogs || process.env.storageDriveName === quidproquo_core_1.QPQ_LOGS_STORAGE_DRIVE_NAME) {
|
|
172
|
+
return noopLogger;
|
|
173
|
+
}
|
|
174
|
+
// instantLogs forces the synchronous direct-to-S3 path, bypassing the extension.
|
|
175
|
+
if (awsSettings.instantLogs) {
|
|
176
|
+
return (0, exports.getS3Logger)(qpqConfig);
|
|
177
|
+
}
|
|
178
|
+
// Use the off-response-path extension when running inside a real Lambda (where it
|
|
179
|
+
// is always attached); otherwise log directly to S3.
|
|
180
|
+
return process.env.AWS_LAMBDA_RUNTIME_API ? (0, exports.getS3LoggerViaExtension)(qpqConfig) : (0, exports.getS3Logger)(qpqConfig);
|
|
181
|
+
};
|
|
124
182
|
exports.getLogger = getLogger;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.associateSoftwareToken = void 0;
|
|
13
|
+
const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
|
|
14
|
+
const createAwsClient_1 = require("../createAwsClient");
|
|
15
|
+
// Begins TOTP enrollment for the MFA_SETUP challenge. Cognito returns the
|
|
16
|
+
// shared secret to seed the authenticator app and a refreshed session that must
|
|
17
|
+
// be used for the subsequent VerifySoftwareToken / RespondToAuthChallenge calls.
|
|
18
|
+
const associateSoftwareToken = (region, session) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
|
|
20
|
+
region,
|
|
21
|
+
});
|
|
22
|
+
const response = yield cognitoClient.send(new client_cognito_identity_provider_1.AssociateSoftwareTokenCommand({ Session: session }));
|
|
23
|
+
return {
|
|
24
|
+
secretCode: response.SecretCode || '',
|
|
25
|
+
session: response.Session || '',
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
exports.associateSoftwareToken = associateSoftwareToken;
|
|
@@ -42,7 +42,8 @@ const decodeValidJwt = (userPoolId, region, ignoreExpiration, accessToken) => __
|
|
|
42
42
|
return decodedAccessToken;
|
|
43
43
|
}
|
|
44
44
|
catch (e) {
|
|
45
|
-
|
|
45
|
+
const summary = e instanceof Error ? `${e.name}: ${e.message}` : 'unknown error';
|
|
46
|
+
console.log('Failed to decode jwt token:', summary);
|
|
46
47
|
return null;
|
|
47
48
|
}
|
|
48
49
|
});
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { UserAttributes } from 'quidproquo-core';
|
|
2
|
+
export declare class UserNotFoundError extends Error {
|
|
3
|
+
readonly code = "USER_NOT_FOUND";
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
2
6
|
export declare const getUserAttributesBySub: (userPoolId: string, region: string, sub: string) => Promise<UserAttributes>;
|
|
@@ -9,10 +9,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.getUserAttributesBySub = void 0;
|
|
12
|
+
exports.getUserAttributesBySub = exports.UserNotFoundError = void 0;
|
|
13
13
|
const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
|
|
14
14
|
const createAwsClient_1 = require("../createAwsClient");
|
|
15
15
|
const cognitoAttributeMap_1 = require("./cognitoAttributeMap");
|
|
16
|
+
// ListUsers returns an empty list rather than throwing for no match, so we throw
|
|
17
|
+
// our own error with a discriminable `code` for the processor's catch to map.
|
|
18
|
+
class UserNotFoundError extends Error {
|
|
19
|
+
constructor() {
|
|
20
|
+
super('User not found');
|
|
21
|
+
this.code = 'USER_NOT_FOUND';
|
|
22
|
+
this.name = 'UserNotFoundError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.UserNotFoundError = UserNotFoundError;
|
|
16
26
|
const getUserAttributesBySub = (userPoolId, region, sub) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
27
|
const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
|
|
18
28
|
region,
|
|
@@ -23,7 +33,7 @@ const getUserAttributesBySub = (userPoolId, region, sub) => __awaiter(void 0, vo
|
|
|
23
33
|
}));
|
|
24
34
|
const [user] = (response === null || response === void 0 ? void 0 : response.Users) || [];
|
|
25
35
|
if (!user) {
|
|
26
|
-
throw new
|
|
36
|
+
throw new UserNotFoundError();
|
|
27
37
|
}
|
|
28
38
|
const validAttributes = (user.Attributes || []).filter((attr) => attr.Name && attr.Value);
|
|
29
39
|
return (0, cognitoAttributeMap_1.getQpqAttributesFromCognitoUserAttributes)(validAttributes);
|
|
@@ -25,6 +25,8 @@ const cognitoChallengeNameTypeToQpqAuthenticateUserChallenge = (cognitoChallenge
|
|
|
25
25
|
const map = {
|
|
26
26
|
[client_cognito_identity_provider_1.ChallengeNameType.NEW_PASSWORD_REQUIRED]: quidproquo_core_1.AuthenticateUserChallenge.NEW_PASSWORD_REQUIRED,
|
|
27
27
|
[client_cognito_identity_provider_1.ChallengeNameType.CUSTOM_CHALLENGE]: quidproquo_core_1.AuthenticateUserChallenge.CUSTOM_CHALLENGE,
|
|
28
|
+
[client_cognito_identity_provider_1.ChallengeNameType.SOFTWARE_TOKEN_MFA]: quidproquo_core_1.AuthenticateUserChallenge.SOFTWARE_TOKEN_MFA,
|
|
29
|
+
[client_cognito_identity_provider_1.ChallengeNameType.MFA_SETUP]: quidproquo_core_1.AuthenticateUserChallenge.MFA_SETUP,
|
|
28
30
|
};
|
|
29
31
|
// TODO: handle the NOT-IMP cases
|
|
30
32
|
const challenge = map[cognitoChallengeName] || `QPQ-NOT-IMP-${cognitoChallengeName}`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const verifySoftwareToken: (region: string, session: string, userCode: string) => Promise<string>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.verifySoftwareToken = void 0;
|
|
13
|
+
const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
|
|
14
|
+
const createAwsClient_1 = require("../createAwsClient");
|
|
15
|
+
// Verifies the first TOTP code during MFA_SETUP. On success Cognito returns a
|
|
16
|
+
// fresh session that must be passed to RespondToAuthChallenge to complete login.
|
|
17
|
+
// A bad code throws (e.g. CodeMismatchException / EnableSoftwareTokenMFAException).
|
|
18
|
+
const verifySoftwareToken = (region, session, userCode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
|
|
20
|
+
region,
|
|
21
|
+
});
|
|
22
|
+
const response = yield cognitoClient.send(new client_cognito_identity_provider_1.VerifySoftwareTokenCommand({
|
|
23
|
+
Session: session,
|
|
24
|
+
UserCode: userCode,
|
|
25
|
+
}));
|
|
26
|
+
return response.Session || '';
|
|
27
|
+
});
|
|
28
|
+
exports.verifySoftwareToken = verifySoftwareToken;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getDynamoTableIndexByConfigAndQuery = void 0;
|
|
4
4
|
const buildDynamoQuery_1 = require("./buildDynamoQuery");
|
|
5
5
|
const getDynamoTableIndexByConfigAndQuery = (setting, query) => {
|
|
6
|
+
var _a;
|
|
6
7
|
// Function to extract keys from a query
|
|
7
8
|
const extractKeysFromQuery = (query) => {
|
|
8
9
|
if ((0, buildDynamoQuery_1.isKvsQueryCondition)(query)) {
|
|
@@ -14,13 +15,18 @@ const getDynamoTableIndexByConfigAndQuery = (setting, query) => {
|
|
|
14
15
|
return [];
|
|
15
16
|
};
|
|
16
17
|
const queriedKeys = extractKeysFromQuery(query);
|
|
17
|
-
//
|
|
18
|
+
// If the query includes the primary sort key, the primary table is a direct match —
|
|
19
|
+
// prefer it over any GSI so we never land on a GSI with a non-SK condition.
|
|
20
|
+
const primarySortKey = (_a = setting.sortKeys[0]) === null || _a === void 0 ? void 0 : _a.key;
|
|
21
|
+
if (primarySortKey && queriedKeys.includes(primarySortKey)) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
// Find a GSI whose partition key is in the query.
|
|
18
25
|
for (const index of setting.indexes) {
|
|
19
26
|
if (queriedKeys.includes(index.partitionKey.key)) {
|
|
20
27
|
return index.partitionKey.key;
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
|
-
// No matching index found
|
|
24
30
|
return undefined;
|
|
25
31
|
};
|
|
26
32
|
exports.getDynamoTableIndexByConfigAndQuery = getDynamoTableIndexByConfigAndQuery;
|
|
@@ -44,7 +44,14 @@ const createAwsClient_1 = require("../createAwsClient");
|
|
|
44
44
|
// };
|
|
45
45
|
// };
|
|
46
46
|
const generatePresignedUploadUrl = (bucketName, objectKey, region, expirationMs, correlationId, contentType) => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
-
|
|
47
|
+
// WHEN_REQUIRED disables the SDK v3 default request checksum (CRC32). Otherwise the
|
|
48
|
+
// presigner bakes an empty-body checksum (x-amz-checksum-crc32=AAAAAA==) into the signed
|
|
49
|
+
// URL, which never matches the real body the browser PUTs — S3 then rejects the upload and
|
|
50
|
+
// the failure surfaces in the browser as a CORS error (the error response has no ACAO header).
|
|
51
|
+
const s3Client = (0, createAwsClient_1.createAwsClient)(client_s3_1.S3Client, {
|
|
52
|
+
region,
|
|
53
|
+
requestChecksumCalculation: 'WHEN_REQUIRED',
|
|
54
|
+
});
|
|
48
55
|
const putObjectCommand = new client_s3_1.PutObjectCommand({
|
|
49
56
|
Bucket: bucketName,
|
|
50
57
|
Key: objectKey,
|
|
@@ -14,16 +14,22 @@ const client_s3_1 = require("@aws-sdk/client-s3");
|
|
|
14
14
|
const client_s3_2 = require("@aws-sdk/client-s3");
|
|
15
15
|
const createAwsClient_1 = require("../createAwsClient");
|
|
16
16
|
const objectExists = (bucketName, key, region) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
var _a;
|
|
18
|
+
const s3Client = (0, createAwsClient_1.createAwsClient)(client_s3_1.S3Client, { region });
|
|
17
19
|
try {
|
|
18
|
-
const s3Client = (0, createAwsClient_1.createAwsClient)(client_s3_1.S3Client, { region });
|
|
19
20
|
yield s3Client.send(new client_s3_2.HeadObjectCommand({
|
|
20
21
|
Key: key,
|
|
21
22
|
Bucket: bucketName,
|
|
22
23
|
}));
|
|
23
24
|
return true;
|
|
24
25
|
}
|
|
25
|
-
catch (
|
|
26
|
-
|
|
26
|
+
catch (error) {
|
|
27
|
+
// A 404 is a definitive "does not exist"; anything else (access denied,
|
|
28
|
+
// throttling, ...) must surface rather than masquerade as a missing file.
|
|
29
|
+
if ((error === null || error === void 0 ? void 0 : error.name) === 'NotFound' || ((_a = error === null || error === void 0 ? void 0 : error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) === 404) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
27
33
|
}
|
|
28
34
|
});
|
|
29
35
|
exports.objectExists = objectExists;
|
|
@@ -23,3 +23,4 @@ export declare const getInfStackName: (qpqConfig: QPQConfig) => string;
|
|
|
23
23
|
export declare const getWebStackName: (qpqConfig: QPQConfig) => string;
|
|
24
24
|
export declare const getApiStackName: (qpqConfig: QPQConfig) => string;
|
|
25
25
|
export declare const getBootstrapStackName: (qpqConfig: QPQConfig) => string;
|
|
26
|
+
export declare const getDomainStackName: (qpqConfig: QPQConfig) => string;
|
|
@@ -168,3 +168,13 @@ export const getBootstrapStackName = (qpqConfig) => {
|
|
|
168
168
|
}
|
|
169
169
|
return `${baseName}-bs`;
|
|
170
170
|
};
|
|
171
|
+
export const getDomainStackName = (qpqConfig) => {
|
|
172
|
+
const appName = qpqCoreUtils.getApplicationName(qpqConfig);
|
|
173
|
+
const environment = qpqCoreUtils.getApplicationModuleEnvironment(qpqConfig);
|
|
174
|
+
const feature = qpqCoreUtils.getApplicationModuleFeature(qpqConfig);
|
|
175
|
+
const baseName = `${appName}-${environment}`;
|
|
176
|
+
if (feature) {
|
|
177
|
+
return `${baseName}-${feature}-domain`;
|
|
178
|
+
}
|
|
179
|
+
return `${baseName}-domain`;
|
|
180
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AiModel } from 'quidproquo-core';
|
|
2
|
+
export const bedrockModelMap = {
|
|
3
|
+
[AiModel.ClaudeHaiku35]: 'au.anthropic.claude-3-5-haiku-20241022-v1:0',
|
|
4
|
+
[AiModel.ClaudeSonnet35]: 'au.anthropic.claude-3-5-sonnet-20241022-v2:0',
|
|
5
|
+
[AiModel.ClaudeSonnet4]: 'au.anthropic.claude-sonnet-4-20250514-v1:0',
|
|
6
|
+
[AiModel.ClaudeOpus4]: 'au.anthropic.claude-opus-4-20250514-v1:0',
|
|
7
|
+
[AiModel.ClaudeHaiku45]: 'au.anthropic.claude-haiku-4-5-20251001-v1:0',
|
|
8
|
+
[AiModel.ClaudeSonnet45]: 'au.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
9
|
+
[AiModel.ClaudeOpus45]: 'au.anthropic.claude-opus-4-5-20251101-v1:0',
|
|
10
|
+
[AiModel.ClaudeSonnet46]: 'au.anthropic.claude-sonnet-4-6',
|
|
11
|
+
[AiModel.ClaudeOpus46]: 'au.anthropic.claude-opus-4-6-v1',
|
|
12
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { actionResult, actionResultError, AiActionType, ErrorTypeEnum, } from 'quidproquo-core';
|
|
2
|
+
import { generateText, stepCountIs } from 'ai';
|
|
3
|
+
import { prepareAiPromptCall, toSdkMessages } from './logic';
|
|
4
|
+
const getProcessAiPrompt = (qpqConfig) => {
|
|
5
|
+
return async (payload, session, actionProcessorList, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
|
|
6
|
+
const prepared = prepareAiPromptCall(qpqConfig, payload, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);
|
|
7
|
+
if ('error' in prepared) {
|
|
8
|
+
return actionResultError(prepared.error.type, prepared.error.message);
|
|
9
|
+
}
|
|
10
|
+
const promptOrMessages = payload.messages
|
|
11
|
+
? { messages: toSdkMessages(payload.messages) }
|
|
12
|
+
: { prompt: payload.prompt };
|
|
13
|
+
try {
|
|
14
|
+
const result = await generateText({
|
|
15
|
+
model: prepared.model,
|
|
16
|
+
system: payload.system,
|
|
17
|
+
...promptOrMessages,
|
|
18
|
+
tools: prepared.tools,
|
|
19
|
+
stopWhen: stepCountIs(10),
|
|
20
|
+
});
|
|
21
|
+
return actionResult({ text: result.text });
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (error instanceof Error) {
|
|
25
|
+
return actionResultError(ErrorTypeEnum.GenericError, error.message);
|
|
26
|
+
}
|
|
27
|
+
return actionResultError(ErrorTypeEnum.GenericError, 'An error occurred during AI prompt execution.');
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export const getAiPromptActionProcessor = async (qpqConfig) => ({
|
|
32
|
+
[AiActionType.Prompt]: getProcessAiPrompt(qpqConfig),
|
|
33
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { actionResult, actionResultError, AiActionType, ErrorTypeEnum, } from 'quidproquo-core';
|
|
2
|
+
import { stepCountIs, streamText } from 'ai';
|
|
3
|
+
import { randomGuid } from '../../../awsLambdaUtils';
|
|
4
|
+
import { mapAiStreamPart, prepareAiPromptCall, toSdkMessages } from './logic';
|
|
5
|
+
const getProcessAiPromptStream = (qpqConfig) => {
|
|
6
|
+
return async (payload, session, actionProcessorList, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
|
|
7
|
+
const prepared = prepareAiPromptCall(qpqConfig, payload, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);
|
|
8
|
+
if ('error' in prepared) {
|
|
9
|
+
return actionResultError(prepared.error.type, prepared.error.message);
|
|
10
|
+
}
|
|
11
|
+
const promptOrMessages = payload.messages
|
|
12
|
+
? { messages: toSdkMessages(payload.messages) }
|
|
13
|
+
: { prompt: payload.prompt };
|
|
14
|
+
try {
|
|
15
|
+
const { fullStream } = streamText({
|
|
16
|
+
model: prepared.model,
|
|
17
|
+
system: payload.system,
|
|
18
|
+
...promptOrMessages,
|
|
19
|
+
tools: prepared.tools,
|
|
20
|
+
stopWhen: stepCountIs(10),
|
|
21
|
+
// streamText swallows errors by default to keep the server alive — surface them to CloudWatch.
|
|
22
|
+
onError: ({ error }) => {
|
|
23
|
+
// todo yeild this out
|
|
24
|
+
console.error('AI prompt stream error:', error);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const streamId = `ai-prompt-${Date.now()}-${randomGuid()}`;
|
|
28
|
+
async function* aiStreamIterator() {
|
|
29
|
+
for await (const part of fullStream) {
|
|
30
|
+
yield JSON.stringify(mapAiStreamPart(part));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
streamRegistry.register(streamId, aiStreamIterator());
|
|
34
|
+
return actionResult({ id: streamId, encoding: 'json' });
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof Error) {
|
|
38
|
+
return actionResultError(ErrorTypeEnum.GenericError, error.message);
|
|
39
|
+
}
|
|
40
|
+
return actionResultError(ErrorTypeEnum.GenericError, 'An error occurred during AI prompt stream.');
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export const getAiPromptStreamActionProcessor = async (qpqConfig) => ({
|
|
45
|
+
[AiActionType.PromptStream]: getProcessAiPromptStream(qpqConfig),
|
|
46
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { getAiPromptActionProcessor } from './getAiPromptActionProcessor';
|
|
2
|
+
import { getAiPromptStreamActionProcessor } from './getAiPromptStreamActionProcessor';
|
|
3
|
+
export const getAiActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
|
|
4
|
+
...(await getAiPromptActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
5
|
+
...(await getAiPromptStreamActionProcessor(qpqConfig, dynamicModuleLoader)),
|
|
6
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AiStreamPart } from 'quidproquo-core';
|
|
2
|
+
import { AiSdkStreamPart, AiSdkStreamPartOfType } from '../types';
|
|
3
|
+
export type AiStreamPartMappers = {
|
|
4
|
+
[K in AiSdkStreamPart['type']]: (part: AiSdkStreamPartOfType<K>) => AiStreamPart;
|
|
5
|
+
};
|
|
6
|
+
export declare const aiStreamPartMappers: AiStreamPartMappers;
|