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.
Files changed (318) hide show
  1. package/lib/commonjs/awsNamingUtils.d.ts +1 -0
  2. package/lib/commonjs/awsNamingUtils.js +12 -1
  3. package/lib/commonjs/getActionProcessor/core/ai/aiModelMap.d.ts +2 -0
  4. package/lib/commonjs/getActionProcessor/core/ai/aiModelMap.js +15 -0
  5. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.d.ts +2 -0
  6. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js +42 -0
  7. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.d.ts +2 -0
  8. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +90 -0
  9. package/lib/commonjs/getActionProcessor/core/ai/index.d.ts +2 -0
  10. package/lib/commonjs/getActionProcessor/core/{config/getConfigGetGlobalActionProcessor.js → ai/index.js} +6 -13
  11. package/lib/commonjs/getActionProcessor/core/ai/logic/aiStreamPartMappers.d.ts +6 -0
  12. package/lib/commonjs/getActionProcessor/core/ai/logic/aiStreamPartMappers.js +57 -0
  13. package/lib/commonjs/getActionProcessor/core/ai/logic/index.d.ts +32 -0
  14. package/lib/commonjs/getActionProcessor/core/ai/logic/index.js +48 -0
  15. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamAbort.d.ts +3 -0
  16. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamAbort.js +9 -0
  17. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamCustom.d.ts +3 -0
  18. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamCustom.js +9 -0
  19. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamError.d.ts +3 -0
  20. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamError.js +10 -0
  21. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFilePart.d.ts +3 -0
  22. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFilePart.js +12 -0
  23. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.d.ts +3 -0
  24. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +11 -0
  25. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.d.ts +3 -0
  26. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +11 -0
  27. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamPart.d.ts +3 -0
  28. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamPart.js +9 -0
  29. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamRaw.d.ts +2 -0
  30. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamRaw.js +8 -0
  31. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.d.ts +3 -0
  32. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.js +10 -0
  33. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.d.ts +3 -0
  34. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.js +9 -0
  35. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.d.ts +3 -0
  36. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.js +12 -0
  37. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.d.ts +3 -0
  38. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.js +9 -0
  39. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.d.ts +3 -0
  40. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.js +16 -0
  41. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStart.d.ts +2 -0
  42. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStart.js +8 -0
  43. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStartStep.d.ts +2 -0
  44. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStartStep.js +8 -0
  45. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.d.ts +3 -0
  46. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.js +10 -0
  47. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.d.ts +3 -0
  48. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.js +9 -0
  49. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextStart.d.ts +3 -0
  50. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextStart.js +9 -0
  51. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.d.ts +3 -0
  52. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.js +12 -0
  53. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.d.ts +3 -0
  54. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.js +13 -0
  55. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolCall.d.ts +3 -0
  56. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolCall.js +11 -0
  57. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolError.d.ts +3 -0
  58. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolError.js +13 -0
  59. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.d.ts +3 -0
  60. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.js +10 -0
  61. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.d.ts +3 -0
  62. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.js +9 -0
  63. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.d.ts +3 -0
  64. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.js +10 -0
  65. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.d.ts +3 -0
  66. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.js +10 -0
  67. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolResult.d.ts +3 -0
  68. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolResult.js +12 -0
  69. package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.d.ts +19 -0
  70. package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +53 -0
  71. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamUsage.d.ts +6 -0
  72. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamUsage.js +9 -0
  73. package/lib/commonjs/getActionProcessor/core/ai/logic/toErrorMessage.d.ts +1 -0
  74. package/lib/commonjs/getActionProcessor/core/ai/logic/toErrorMessage.js +11 -0
  75. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +3 -0
  76. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js +82 -0
  77. package/lib/commonjs/getActionProcessor/core/ai/types/aiSdkStreamPart.d.ts +5 -0
  78. package/lib/commonjs/getActionProcessor/core/ai/types/aiSdkStreamPart.js +2 -0
  79. package/lib/commonjs/getActionProcessor/core/ai/types/index.d.ts +1 -0
  80. package/lib/commonjs/getActionProcessor/core/ai/types/index.js +17 -0
  81. package/lib/commonjs/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.d.ts +2 -0
  82. package/lib/commonjs/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.js +50 -0
  83. package/lib/commonjs/getActionProcessor/core/apiKeyValidation/index.d.ts +2 -0
  84. package/lib/commonjs/getActionProcessor/core/apiKeyValidation/index.js +17 -0
  85. package/lib/commonjs/getActionProcessor/core/config/getConfigGetSecretActionProcessor.js +10 -2
  86. package/lib/commonjs/getActionProcessor/core/config/getConfigSetParameterActionProcessor.js +10 -2
  87. package/lib/commonjs/getActionProcessor/core/config/index.js +1 -2
  88. package/lib/commonjs/getActionProcessor/core/event/apiGatwayEvent/api/getEventAutoRespondActionProcessor.js +2 -34
  89. package/lib/commonjs/getActionProcessor/core/event/apiGatwayEvent/api/getEventGetStorySessionActionProcessor.js +2 -31
  90. package/lib/commonjs/getActionProcessor/core/event/apiGatwayEvent/websocket/getEventTransformResponseResultActionProcessor.js +2 -2
  91. package/lib/commonjs/getActionProcessor/core/eventBus/getEventBusSendMessagesActionProcessor.js +16 -6
  92. package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js +17 -9
  93. package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js +9 -1
  94. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +5 -0
  95. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +5 -0
  96. package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +13 -2
  97. package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +16 -7
  98. package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +11 -2
  99. package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.d.ts +2 -0
  100. package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +105 -0
  101. package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +11 -2
  102. package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +11 -2
  103. package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +11 -2
  104. package/lib/commonjs/getActionProcessor/core/file/index.js +2 -1
  105. package/lib/commonjs/getActionProcessor/core/index.d.ts +2 -0
  106. package/lib/commonjs/getActionProcessor/core/index.js +6 -1
  107. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +10 -2
  108. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +10 -2
  109. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +10 -2
  110. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +10 -2
  111. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +12 -3
  112. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +10 -2
  113. package/lib/commonjs/getActionProcessor/core/queue/getQueueSendMessageActionProcessor.js +17 -7
  114. package/lib/commonjs/getActionProcessor/core/system/getSystemExecuteStoryActionProcessor.js +5 -4
  115. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.d.ts +2 -0
  116. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.js +28 -0
  117. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryChangePasswordActionProcessor.js +11 -2
  118. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryConfirmEmailVerificationActionProcessor.js +11 -2
  119. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryConfirmForgotPasswordActionProcessor.js +12 -2
  120. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryCreateUserActionProcessor.js +12 -3
  121. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryDecodeAccessTokenActionProcessor.js +1 -1
  122. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryForgotPasswordActionProcessor.js +10 -2
  123. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUserAttributesByUserIdActionProcessor.js +9 -2
  124. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersActionProcessor.js +10 -2
  125. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersByAttributeActionProcessor.js +10 -2
  126. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRefreshTokenActionProcessor.js +17 -3
  127. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +11 -2
  128. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRespondToAuthChallengeActionProcessor.js +34 -2
  129. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetPasswordActionProcessor.js +12 -2
  130. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetUserAttributesActionProcessor.js +13 -2
  131. package/lib/commonjs/getActionProcessor/core/userDirectory/index.js +2 -1
  132. package/lib/commonjs/getActionProcessor/webserver/serviceFunction/getServiceFunctionExecuteActionProcessor.js +2 -2
  133. package/lib/commonjs/index.d.ts +1 -0
  134. package/lib/commonjs/index.js +3 -0
  135. package/lib/commonjs/lambdaExtensions/getLogExtensionLayerPath.d.ts +10 -0
  136. package/lib/commonjs/lambdaExtensions/getLogExtensionLayerPath.js +20 -0
  137. package/lib/commonjs/lambdaExtensions/logExtensionPort.d.ts +1 -0
  138. package/lib/commonjs/lambdaExtensions/logExtensionPort.js +7 -0
  139. package/lib/commonjs/lambdaHandlers/getApiGatewayEventHandler.js +4 -8
  140. package/lib/commonjs/lambdaHandlers/getApiGatewayEventHandler_redirect.js +0 -2
  141. package/lib/commonjs/lambdaHandlers/helpers/getQpqLambdaRuntimeForEvent.js +2 -2
  142. package/lib/commonjs/lambdaHandlers/helpers/logger.d.ts +4 -1
  143. package/lib/commonjs/lambdaHandlers/helpers/logger.js +94 -36
  144. package/lib/commonjs/logic/cognito/associateSoftwareToken.d.ts +2 -0
  145. package/lib/commonjs/logic/cognito/associateSoftwareToken.js +28 -0
  146. package/lib/commonjs/logic/cognito/decodeValidJwt.js +2 -1
  147. package/lib/commonjs/logic/cognito/getUserAttributesBySub.d.ts +4 -0
  148. package/lib/commonjs/logic/cognito/getUserAttributesBySub.js +12 -2
  149. package/lib/commonjs/logic/cognito/utils/transformCognitoResponse.js +2 -0
  150. package/lib/commonjs/logic/cognito/verifySoftwareToken.d.ts +1 -0
  151. package/lib/commonjs/logic/cognito/verifySoftwareToken.js +28 -0
  152. package/lib/commonjs/logic/dynamo/qpqDynamoOrm/getDynamoTableIndexByConfigAndQuery.js +8 -2
  153. package/lib/commonjs/logic/s3/generatePresignedUploadUrl.js +8 -1
  154. package/lib/commonjs/logic/s3/objectExists.js +9 -3
  155. package/lib/esm/awsNamingUtils.d.ts +1 -0
  156. package/lib/esm/awsNamingUtils.js +10 -0
  157. package/lib/esm/getActionProcessor/core/ai/aiModelMap.d.ts +2 -0
  158. package/lib/esm/getActionProcessor/core/ai/aiModelMap.js +12 -0
  159. package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.d.ts +2 -0
  160. package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js +33 -0
  161. package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.d.ts +2 -0
  162. package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +46 -0
  163. package/lib/esm/getActionProcessor/core/ai/index.d.ts +2 -0
  164. package/lib/esm/getActionProcessor/core/ai/index.js +6 -0
  165. package/lib/esm/getActionProcessor/core/ai/logic/aiStreamPartMappers.d.ts +6 -0
  166. package/lib/esm/getActionProcessor/core/ai/logic/aiStreamPartMappers.js +54 -0
  167. package/lib/esm/getActionProcessor/core/ai/logic/index.d.ts +32 -0
  168. package/lib/esm/getActionProcessor/core/ai/logic/index.js +32 -0
  169. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamAbort.d.ts +3 -0
  170. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamAbort.js +5 -0
  171. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamCustom.d.ts +3 -0
  172. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamCustom.js +5 -0
  173. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamError.d.ts +3 -0
  174. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamError.js +6 -0
  175. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFilePart.d.ts +3 -0
  176. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFilePart.js +8 -0
  177. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.d.ts +3 -0
  178. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +7 -0
  179. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.d.ts +3 -0
  180. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +7 -0
  181. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamPart.d.ts +3 -0
  182. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamPart.js +5 -0
  183. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamRaw.d.ts +2 -0
  184. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamRaw.js +4 -0
  185. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.d.ts +3 -0
  186. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.js +6 -0
  187. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.d.ts +3 -0
  188. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.js +5 -0
  189. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.d.ts +3 -0
  190. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.js +8 -0
  191. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.d.ts +3 -0
  192. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.js +5 -0
  193. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.d.ts +3 -0
  194. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.js +12 -0
  195. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStart.d.ts +2 -0
  196. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStart.js +4 -0
  197. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStartStep.d.ts +2 -0
  198. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStartStep.js +4 -0
  199. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.d.ts +3 -0
  200. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.js +6 -0
  201. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.d.ts +3 -0
  202. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.js +5 -0
  203. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextStart.d.ts +3 -0
  204. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextStart.js +5 -0
  205. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.d.ts +3 -0
  206. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.js +8 -0
  207. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.d.ts +3 -0
  208. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.js +9 -0
  209. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolCall.d.ts +3 -0
  210. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolCall.js +7 -0
  211. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolError.d.ts +3 -0
  212. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolError.js +9 -0
  213. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.d.ts +3 -0
  214. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.js +6 -0
  215. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.d.ts +3 -0
  216. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.js +5 -0
  217. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.d.ts +3 -0
  218. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.js +6 -0
  219. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.d.ts +3 -0
  220. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.js +6 -0
  221. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolResult.d.ts +3 -0
  222. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolResult.js +8 -0
  223. package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.d.ts +19 -0
  224. package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +40 -0
  225. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamUsage.d.ts +6 -0
  226. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamUsage.js +5 -0
  227. package/lib/esm/getActionProcessor/core/ai/logic/toErrorMessage.d.ts +1 -0
  228. package/lib/esm/getActionProcessor/core/ai/logic/toErrorMessage.js +7 -0
  229. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +3 -0
  230. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js +78 -0
  231. package/lib/esm/getActionProcessor/core/ai/types/aiSdkStreamPart.d.ts +5 -0
  232. package/lib/esm/getActionProcessor/core/ai/types/aiSdkStreamPart.js +1 -0
  233. package/lib/esm/getActionProcessor/core/ai/types/index.d.ts +1 -0
  234. package/lib/esm/getActionProcessor/core/ai/types/index.js +1 -0
  235. package/lib/esm/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.d.ts +2 -0
  236. package/lib/esm/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.js +35 -0
  237. package/lib/esm/getActionProcessor/core/apiKeyValidation/index.d.ts +2 -0
  238. package/lib/esm/getActionProcessor/core/apiKeyValidation/index.js +4 -0
  239. package/lib/esm/getActionProcessor/core/config/getConfigGetSecretActionProcessor.js +11 -3
  240. package/lib/esm/getActionProcessor/core/config/getConfigSetParameterActionProcessor.js +11 -3
  241. package/lib/esm/getActionProcessor/core/config/index.js +0 -2
  242. package/lib/esm/getActionProcessor/core/event/apiGatwayEvent/api/getEventAutoRespondActionProcessor.js +3 -32
  243. package/lib/esm/getActionProcessor/core/event/apiGatwayEvent/api/getEventGetStorySessionActionProcessor.js +3 -35
  244. package/lib/esm/getActionProcessor/core/event/apiGatwayEvent/websocket/getEventTransformResponseResultActionProcessor.js +2 -2
  245. package/lib/esm/getActionProcessor/core/eventBus/getEventBusSendMessagesActionProcessor.js +20 -13
  246. package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js +18 -10
  247. package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js +10 -2
  248. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +6 -1
  249. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +6 -1
  250. package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +14 -3
  251. package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +20 -11
  252. package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +12 -3
  253. package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.d.ts +2 -0
  254. package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +55 -0
  255. package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +12 -3
  256. package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +12 -3
  257. package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +12 -3
  258. package/lib/esm/getActionProcessor/core/file/index.js +2 -0
  259. package/lib/esm/getActionProcessor/core/index.d.ts +2 -0
  260. package/lib/esm/getActionProcessor/core/index.js +8 -0
  261. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +11 -3
  262. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +11 -3
  263. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +11 -3
  264. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +12 -4
  265. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +12 -3
  266. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +11 -3
  267. package/lib/esm/getActionProcessor/core/queue/getQueueSendMessageActionProcessor.js +21 -14
  268. package/lib/esm/getActionProcessor/core/system/getSystemExecuteStoryActionProcessor.js +1 -0
  269. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.d.ts +2 -0
  270. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.js +13 -0
  271. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryChangePasswordActionProcessor.js +12 -3
  272. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryConfirmEmailVerificationActionProcessor.js +12 -3
  273. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryConfirmForgotPasswordActionProcessor.js +13 -3
  274. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryCreateUserActionProcessor.js +13 -4
  275. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryDecodeAccessTokenActionProcessor.js +2 -2
  276. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryForgotPasswordActionProcessor.js +11 -3
  277. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUserAttributesByUserIdActionProcessor.js +10 -3
  278. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersActionProcessor.js +11 -3
  279. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersByAttributeActionProcessor.js +11 -3
  280. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRefreshTokenActionProcessor.js +18 -4
  281. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +12 -3
  282. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRespondToAuthChallengeActionProcessor.js +35 -3
  283. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetPasswordActionProcessor.js +13 -3
  284. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetUserAttributesActionProcessor.js +14 -3
  285. package/lib/esm/getActionProcessor/core/userDirectory/index.js +2 -0
  286. package/lib/esm/getActionProcessor/webserver/serviceFunction/getServiceFunctionExecuteActionProcessor.js +3 -6
  287. package/lib/esm/index.d.ts +1 -0
  288. package/lib/esm/index.js +3 -0
  289. package/lib/esm/lambdaExtensions/getLogExtensionLayerPath.d.ts +10 -0
  290. package/lib/esm/lambdaExtensions/getLogExtensionLayerPath.js +13 -0
  291. package/lib/esm/lambdaExtensions/logExtensionPort.d.ts +1 -0
  292. package/lib/esm/lambdaExtensions/logExtensionPort.js +4 -0
  293. package/lib/esm/lambdaHandlers/getApiGatewayEventHandler.js +4 -8
  294. package/lib/esm/lambdaHandlers/getApiGatewayEventHandler_redirect.js +0 -2
  295. package/lib/esm/lambdaHandlers/helpers/getQpqLambdaRuntimeForEvent.js +1 -1
  296. package/lib/esm/lambdaHandlers/helpers/logger.d.ts +4 -1
  297. package/lib/esm/lambdaHandlers/helpers/logger.js +94 -38
  298. package/lib/esm/logic/cognito/associateSoftwareToken.d.ts +2 -0
  299. package/lib/esm/logic/cognito/associateSoftwareToken.js +15 -0
  300. package/lib/esm/logic/cognito/decodeValidJwt.js +2 -1
  301. package/lib/esm/logic/cognito/getUserAttributesBySub.d.ts +4 -0
  302. package/lib/esm/logic/cognito/getUserAttributesBySub.js +10 -1
  303. package/lib/esm/logic/cognito/utils/transformCognitoResponse.js +2 -0
  304. package/lib/esm/logic/cognito/verifySoftwareToken.d.ts +1 -0
  305. package/lib/esm/logic/cognito/verifySoftwareToken.js +15 -0
  306. package/lib/esm/logic/dynamo/qpqDynamoOrm/getDynamoTableIndexByConfigAndQuery.js +7 -2
  307. package/lib/esm/logic/s3/generatePresignedUploadUrl.js +8 -1
  308. package/lib/esm/logic/s3/objectExists.js +8 -3
  309. package/lib/extension-layer/extensions/qpq-log-extension +2 -0
  310. package/lib/extension-layer/qpq-log-extension/index.js +58 -0
  311. package/package.json +11 -6
  312. package/lib/commonjs/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.d.ts +0 -2
  313. package/lib/commonjs/getActionProcessor/core/event/utils/isAuthValid.d.ts +0 -3
  314. package/lib/commonjs/getActionProcessor/core/event/utils/isAuthValid.js +0 -68
  315. package/lib/esm/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.d.ts +0 -2
  316. package/lib/esm/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.js +0 -10
  317. package/lib/esm/getActionProcessor/core/event/utils/isAuthValid.d.ts +0 -3
  318. 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,5 @@
1
+ import { TextStreamPart, ToolSet } from 'ai';
2
+ export type AiSdkStreamPart = TextStreamPart<ToolSet>;
3
+ export type AiSdkStreamPartOfType<K extends AiSdkStreamPart['type']> = Extract<AiSdkStreamPart, {
4
+ type: K;
5
+ }>;
@@ -0,0 +1 @@
1
+ export * from './aiSdkStreamPart';
@@ -0,0 +1 @@
1
+ export * from './aiSdkStreamPart';
@@ -0,0 +1,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getApiKeyValidationValidateActionProcessor: ActionProcessorListResolver;
@@ -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,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getApiKeyValidationActionProcessor: ActionProcessorListResolver;
@@ -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
- const secretValue = await getSecret(awsSecretKey, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));
9
- return actionResult(secretValue);
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
- await setParameter(awsParameterKey, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), parameterValue);
9
- return actionResult(void 0);
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 { actionResult, EventActionType, } from 'quidproquo-core';
2
- import { qpqWebServerUtils } from 'quidproquo-webserver';
3
- import { isAuthValid } from '../../utils/isAuthValid';
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 { actionResult, EventActionType, } from 'quidproquo-core';
2
- import { qpqWebServerUtils } from 'quidproquo-webserver';
3
- import { decodeAccessToken } from '../../../../../logic/cognito';
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, context, }, session) => {
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
- await publishMessage(topicArn, region, eventBusMessages.map((message) => {
14
- const eventBusMessageWithSession = {
15
- ...message,
16
- storySession: {
17
- ...session,
18
- context,
19
- },
20
- };
21
- return JSON.stringify(eventBusMessageWithSession);
22
- }));
23
- return actionResult(void 0);
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
- const errored = await deleteFiles(s3BucketName, filepaths, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig));
9
- // errored deletes are a graceful success ~ Retry
10
- // if (errored.length > 0) {
11
- // return actionResultError(
12
- // ErrorTypeEnum.GenericError,
13
- // `Could not delete files ${errored.length}`,
14
- // );
15
- // }
16
- return actionResult(errored);
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
- return actionResult(await objectExists(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
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) => ({
@@ -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
- const isColdStorage = (await getObjectStorageClass(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig))) === 'cold_storage';
9
- return actionResult(isColdStorage);
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
- const s3FileList = await listFiles(s3BucketName, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), folderPath, maxFiles, pageToken);
9
- // Add the drive onto the list
10
- const fileInfos = s3FileList.fileInfos.map((s3fi) => ({
11
- ...s3fi,
12
- drive,
13
- }));
14
- return actionResult({
15
- fileInfos,
16
- pageToken: s3FileList.pageToken,
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
- const s3BucketName = resolveStorageDriveBucketName(drive, qpqConfig);
8
- return actionResult(await readBinaryFile(s3BucketName, filepath, qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig)));
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,2 @@
1
+ import { ActionProcessorListResolver } from 'quidproquo-core';
2
+ export declare const getFileStreamOpenActionProcessor: ActionProcessorListResolver;
@@ -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
+ });