quidproquo-actionprocessor-awslambda 0.0.263 → 0.1.1

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 (308) 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.js +9 -9
  4. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js +8 -41
  5. package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +14 -50
  6. package/lib/commonjs/getActionProcessor/core/ai/logic/aiStreamPartMappers.d.ts +6 -0
  7. package/lib/commonjs/getActionProcessor/core/ai/logic/aiStreamPartMappers.js +57 -0
  8. package/lib/commonjs/getActionProcessor/core/ai/logic/index.d.ts +32 -0
  9. package/lib/commonjs/getActionProcessor/core/ai/logic/index.js +48 -0
  10. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamAbort.d.ts +3 -0
  11. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamAbort.js +9 -0
  12. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamCustom.d.ts +3 -0
  13. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamCustom.js +9 -0
  14. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamError.d.ts +3 -0
  15. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamError.js +10 -0
  16. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFilePart.d.ts +3 -0
  17. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFilePart.js +12 -0
  18. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.d.ts +3 -0
  19. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +11 -0
  20. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.d.ts +3 -0
  21. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +11 -0
  22. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamPart.d.ts +3 -0
  23. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamPart.js +9 -0
  24. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamRaw.d.ts +2 -0
  25. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamRaw.js +8 -0
  26. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.d.ts +3 -0
  27. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.js +10 -0
  28. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.d.ts +3 -0
  29. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.js +9 -0
  30. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.d.ts +3 -0
  31. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.js +12 -0
  32. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.d.ts +3 -0
  33. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.js +9 -0
  34. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.d.ts +3 -0
  35. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.js +16 -0
  36. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStart.d.ts +2 -0
  37. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStart.js +8 -0
  38. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStartStep.d.ts +2 -0
  39. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamStartStep.js +8 -0
  40. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.d.ts +3 -0
  41. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.js +10 -0
  42. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.d.ts +3 -0
  43. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.js +9 -0
  44. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextStart.d.ts +3 -0
  45. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamTextStart.js +9 -0
  46. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.d.ts +3 -0
  47. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.js +12 -0
  48. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.d.ts +3 -0
  49. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.js +13 -0
  50. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolCall.d.ts +3 -0
  51. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolCall.js +11 -0
  52. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolError.d.ts +3 -0
  53. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolError.js +13 -0
  54. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.d.ts +3 -0
  55. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.js +10 -0
  56. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.d.ts +3 -0
  57. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.js +9 -0
  58. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.d.ts +3 -0
  59. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.js +10 -0
  60. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.d.ts +3 -0
  61. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.js +10 -0
  62. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolResult.d.ts +3 -0
  63. package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamToolResult.js +12 -0
  64. package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.d.ts +19 -0
  65. package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +53 -0
  66. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamUsage.d.ts +6 -0
  67. package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamUsage.js +9 -0
  68. package/lib/commonjs/getActionProcessor/core/ai/logic/toErrorMessage.d.ts +1 -0
  69. package/lib/commonjs/getActionProcessor/core/ai/logic/toErrorMessage.js +11 -0
  70. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +3 -0
  71. package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js +82 -0
  72. package/lib/commonjs/getActionProcessor/core/ai/types/aiSdkStreamPart.d.ts +5 -0
  73. package/lib/commonjs/getActionProcessor/core/ai/types/aiSdkStreamPart.js +2 -0
  74. package/lib/commonjs/getActionProcessor/core/ai/types/index.d.ts +1 -0
  75. package/lib/commonjs/{logic/textract → getActionProcessor/core/ai/types}/index.js +1 -2
  76. package/lib/commonjs/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.js +13 -2
  77. package/lib/commonjs/getActionProcessor/core/config/getConfigGetSecretActionProcessor.js +10 -2
  78. package/lib/commonjs/getActionProcessor/core/config/getConfigSetParameterActionProcessor.js +10 -2
  79. package/lib/commonjs/getActionProcessor/core/config/index.js +1 -2
  80. package/lib/commonjs/getActionProcessor/core/eventBus/getEventBusSendMessagesActionProcessor.js +15 -5
  81. package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js +17 -9
  82. package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js +9 -1
  83. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +5 -0
  84. package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +5 -0
  85. package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +13 -2
  86. package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +16 -7
  87. package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +11 -2
  88. package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +7 -2
  89. package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +11 -2
  90. package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +11 -2
  91. package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +11 -2
  92. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +10 -2
  93. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +10 -2
  94. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +10 -2
  95. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +10 -2
  96. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +12 -3
  97. package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +10 -2
  98. package/lib/commonjs/getActionProcessor/core/queue/getQueueSendMessageActionProcessor.js +16 -6
  99. package/lib/commonjs/getActionProcessor/core/system/getSystemExecuteStoryActionProcessor.js +5 -4
  100. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.d.ts +2 -0
  101. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.js +28 -0
  102. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryChangePasswordActionProcessor.js +11 -2
  103. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryConfirmEmailVerificationActionProcessor.js +11 -2
  104. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryConfirmForgotPasswordActionProcessor.js +12 -2
  105. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryCreateUserActionProcessor.js +12 -3
  106. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryDecodeAccessTokenActionProcessor.js +1 -1
  107. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryForgotPasswordActionProcessor.js +10 -2
  108. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUserAttributesByUserIdActionProcessor.js +9 -2
  109. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersActionProcessor.js +10 -2
  110. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersByAttributeActionProcessor.js +10 -2
  111. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRefreshTokenActionProcessor.js +17 -3
  112. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +11 -2
  113. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRespondToAuthChallengeActionProcessor.js +34 -2
  114. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetPasswordActionProcessor.js +12 -2
  115. package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetUserAttributesActionProcessor.js +13 -2
  116. package/lib/commonjs/getActionProcessor/core/userDirectory/index.js +2 -1
  117. package/lib/commonjs/getActionProcessor/webserver/index.d.ts +0 -1
  118. package/lib/commonjs/getActionProcessor/webserver/index.js +1 -3
  119. package/lib/commonjs/getActionProcessor/webserver/serviceFunction/getServiceFunctionExecuteActionProcessor.js +1 -1
  120. package/lib/commonjs/index.d.ts +1 -0
  121. package/lib/commonjs/index.js +3 -0
  122. package/lib/commonjs/lambdaExtensions/getLogExtensionLayerPath.d.ts +10 -0
  123. package/lib/commonjs/lambdaExtensions/getLogExtensionLayerPath.js +20 -0
  124. package/lib/commonjs/lambdaExtensions/logExtensionPort.d.ts +1 -0
  125. package/lib/commonjs/lambdaExtensions/logExtensionPort.js +7 -0
  126. package/lib/commonjs/lambdaHandlers/getApiGatewayEventHandler.js +4 -8
  127. package/lib/commonjs/lambdaHandlers/getApiGatewayEventHandler_redirect.js +0 -2
  128. package/lib/commonjs/lambdaHandlers/helpers/getQpqLambdaRuntimeForEvent.js +2 -2
  129. package/lib/commonjs/lambdaHandlers/helpers/logger.d.ts +4 -1
  130. package/lib/commonjs/lambdaHandlers/helpers/logger.js +94 -36
  131. package/lib/commonjs/logic/cognito/associateSoftwareToken.d.ts +2 -0
  132. package/lib/commonjs/logic/cognito/associateSoftwareToken.js +28 -0
  133. package/lib/commonjs/logic/cognito/decodeValidJwt.js +2 -1
  134. package/lib/commonjs/logic/cognito/getUserAttributesBySub.d.ts +4 -0
  135. package/lib/commonjs/logic/cognito/getUserAttributesBySub.js +12 -2
  136. package/lib/commonjs/logic/cognito/utils/transformCognitoResponse.js +2 -0
  137. package/lib/commonjs/logic/cognito/verifySoftwareToken.d.ts +1 -0
  138. package/lib/commonjs/logic/cognito/verifySoftwareToken.js +28 -0
  139. package/lib/commonjs/logic/dynamo/qpqDynamoOrm/getDynamoTableIndexByConfigAndQuery.js +8 -2
  140. package/lib/commonjs/logic/s3/generatePresignedUploadUrl.js +8 -1
  141. package/lib/commonjs/logic/s3/objectExists.js +9 -3
  142. package/lib/esm/awsNamingUtils.d.ts +1 -0
  143. package/lib/esm/awsNamingUtils.js +10 -0
  144. package/lib/esm/getActionProcessor/core/ai/aiModelMap.js +9 -9
  145. package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js +12 -39
  146. package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +18 -47
  147. package/lib/esm/getActionProcessor/core/ai/logic/aiStreamPartMappers.d.ts +6 -0
  148. package/lib/esm/getActionProcessor/core/ai/logic/aiStreamPartMappers.js +54 -0
  149. package/lib/esm/getActionProcessor/core/ai/logic/index.d.ts +32 -0
  150. package/lib/esm/getActionProcessor/core/ai/logic/index.js +32 -0
  151. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamAbort.d.ts +3 -0
  152. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamAbort.js +5 -0
  153. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamCustom.d.ts +3 -0
  154. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamCustom.js +5 -0
  155. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamError.d.ts +3 -0
  156. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamError.js +6 -0
  157. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFilePart.d.ts +3 -0
  158. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFilePart.js +8 -0
  159. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.d.ts +3 -0
  160. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +7 -0
  161. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.d.ts +3 -0
  162. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +7 -0
  163. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamPart.d.ts +3 -0
  164. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamPart.js +5 -0
  165. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamRaw.d.ts +2 -0
  166. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamRaw.js +4 -0
  167. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.d.ts +3 -0
  168. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningDelta.js +6 -0
  169. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.d.ts +3 -0
  170. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningEnd.js +5 -0
  171. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.d.ts +3 -0
  172. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningFilePart.js +8 -0
  173. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.d.ts +3 -0
  174. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamReasoningStart.js +5 -0
  175. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.d.ts +3 -0
  176. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamSourcePart.js +12 -0
  177. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStart.d.ts +2 -0
  178. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStart.js +4 -0
  179. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStartStep.d.ts +2 -0
  180. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamStartStep.js +4 -0
  181. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.d.ts +3 -0
  182. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextDelta.js +6 -0
  183. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.d.ts +3 -0
  184. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextEnd.js +5 -0
  185. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextStart.d.ts +3 -0
  186. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamTextStart.js +5 -0
  187. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.d.ts +3 -0
  188. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalRequest.js +8 -0
  189. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.d.ts +3 -0
  190. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolApprovalResponse.js +9 -0
  191. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolCall.d.ts +3 -0
  192. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolCall.js +7 -0
  193. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolError.d.ts +3 -0
  194. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolError.js +9 -0
  195. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.d.ts +3 -0
  196. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputDelta.js +6 -0
  197. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.d.ts +3 -0
  198. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputEnd.js +5 -0
  199. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.d.ts +3 -0
  200. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolInputStart.js +6 -0
  201. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.d.ts +3 -0
  202. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolOutputDenied.js +6 -0
  203. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolResult.d.ts +3 -0
  204. package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamToolResult.js +8 -0
  205. package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.d.ts +19 -0
  206. package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +40 -0
  207. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamUsage.d.ts +6 -0
  208. package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamUsage.js +5 -0
  209. package/lib/esm/getActionProcessor/core/ai/logic/toErrorMessage.d.ts +1 -0
  210. package/lib/esm/getActionProcessor/core/ai/logic/toErrorMessage.js +7 -0
  211. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +3 -0
  212. package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js +78 -0
  213. package/lib/esm/getActionProcessor/core/ai/types/aiSdkStreamPart.d.ts +5 -0
  214. package/lib/esm/getActionProcessor/core/ai/types/aiSdkStreamPart.js +1 -0
  215. package/lib/esm/getActionProcessor/core/ai/types/index.d.ts +1 -0
  216. package/lib/esm/getActionProcessor/core/ai/types/index.js +1 -0
  217. package/lib/esm/getActionProcessor/core/apiKeyValidation/getApiKeyValidationValidateActionProcessor.js +13 -2
  218. package/lib/esm/getActionProcessor/core/config/getConfigGetSecretActionProcessor.js +11 -3
  219. package/lib/esm/getActionProcessor/core/config/getConfigSetParameterActionProcessor.js +11 -3
  220. package/lib/esm/getActionProcessor/core/config/index.js +0 -2
  221. package/lib/esm/getActionProcessor/core/eventBus/getEventBusSendMessagesActionProcessor.js +19 -9
  222. package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js +18 -10
  223. package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js +10 -2
  224. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +6 -1
  225. package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +6 -1
  226. package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +14 -3
  227. package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +20 -11
  228. package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +12 -3
  229. package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +8 -3
  230. package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +12 -3
  231. package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +12 -3
  232. package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +12 -3
  233. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +11 -3
  234. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +11 -3
  235. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +11 -3
  236. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +12 -4
  237. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +12 -3
  238. package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +11 -3
  239. package/lib/esm/getActionProcessor/core/queue/getQueueSendMessageActionProcessor.js +20 -10
  240. package/lib/esm/getActionProcessor/core/system/getSystemExecuteStoryActionProcessor.js +1 -0
  241. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.d.ts +2 -0
  242. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryAssociateSoftwareTokenActionProcessor.js +13 -0
  243. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryChangePasswordActionProcessor.js +12 -3
  244. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryConfirmEmailVerificationActionProcessor.js +12 -3
  245. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryConfirmForgotPasswordActionProcessor.js +13 -3
  246. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryCreateUserActionProcessor.js +13 -4
  247. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryDecodeAccessTokenActionProcessor.js +2 -2
  248. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryForgotPasswordActionProcessor.js +11 -3
  249. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUserAttributesByUserIdActionProcessor.js +10 -3
  250. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersActionProcessor.js +11 -3
  251. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryGetUsersByAttributeActionProcessor.js +11 -3
  252. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRefreshTokenActionProcessor.js +18 -4
  253. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +12 -3
  254. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRespondToAuthChallengeActionProcessor.js +35 -3
  255. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetPasswordActionProcessor.js +13 -3
  256. package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetUserAttributesActionProcessor.js +14 -3
  257. package/lib/esm/getActionProcessor/core/userDirectory/index.js +2 -0
  258. package/lib/esm/getActionProcessor/webserver/index.d.ts +0 -1
  259. package/lib/esm/getActionProcessor/webserver/index.js +0 -3
  260. package/lib/esm/getActionProcessor/webserver/serviceFunction/getServiceFunctionExecuteActionProcessor.js +2 -2
  261. package/lib/esm/index.d.ts +1 -0
  262. package/lib/esm/index.js +3 -0
  263. package/lib/esm/lambdaExtensions/getLogExtensionLayerPath.d.ts +10 -0
  264. package/lib/esm/lambdaExtensions/getLogExtensionLayerPath.js +13 -0
  265. package/lib/esm/lambdaExtensions/logExtensionPort.d.ts +1 -0
  266. package/lib/esm/lambdaExtensions/logExtensionPort.js +4 -0
  267. package/lib/esm/lambdaHandlers/getApiGatewayEventHandler.js +4 -8
  268. package/lib/esm/lambdaHandlers/getApiGatewayEventHandler_redirect.js +0 -2
  269. package/lib/esm/lambdaHandlers/helpers/getQpqLambdaRuntimeForEvent.js +1 -1
  270. package/lib/esm/lambdaHandlers/helpers/logger.d.ts +4 -1
  271. package/lib/esm/lambdaHandlers/helpers/logger.js +94 -38
  272. package/lib/esm/logic/cognito/associateSoftwareToken.d.ts +2 -0
  273. package/lib/esm/logic/cognito/associateSoftwareToken.js +15 -0
  274. package/lib/esm/logic/cognito/decodeValidJwt.js +2 -1
  275. package/lib/esm/logic/cognito/getUserAttributesBySub.d.ts +4 -0
  276. package/lib/esm/logic/cognito/getUserAttributesBySub.js +10 -1
  277. package/lib/esm/logic/cognito/utils/transformCognitoResponse.js +2 -0
  278. package/lib/esm/logic/cognito/verifySoftwareToken.d.ts +1 -0
  279. package/lib/esm/logic/cognito/verifySoftwareToken.js +15 -0
  280. package/lib/esm/logic/dynamo/qpqDynamoOrm/getDynamoTableIndexByConfigAndQuery.js +7 -2
  281. package/lib/esm/logic/s3/generatePresignedUploadUrl.js +8 -1
  282. package/lib/esm/logic/s3/objectExists.js +8 -3
  283. package/lib/extension-layer/extensions/qpq-log-extension +2 -0
  284. package/lib/extension-layer/qpq-log-extension/index.js +58 -0
  285. package/package.json +10 -8
  286. package/lib/commonjs/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.d.ts +0 -2
  287. package/lib/commonjs/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.js +0 -25
  288. package/lib/commonjs/getActionProcessor/webserver/extract/getExtractExpenseActionProcessor.d.ts +0 -2
  289. package/lib/commonjs/getActionProcessor/webserver/extract/getExtractExpenseActionProcessor.js +0 -56
  290. package/lib/commonjs/getActionProcessor/webserver/extract/index.d.ts +0 -2
  291. package/lib/commonjs/getActionProcessor/webserver/extract/index.js +0 -17
  292. package/lib/commonjs/logic/textract/analyzeExpense.d.ts +0 -51
  293. package/lib/commonjs/logic/textract/analyzeExpense.js +0 -31
  294. package/lib/commonjs/logic/textract/index.d.ts +0 -2
  295. package/lib/commonjs/logic/textract/transformExpenseResponse.d.ts +0 -29
  296. package/lib/commonjs/logic/textract/transformExpenseResponse.js +0 -180
  297. package/lib/esm/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.d.ts +0 -2
  298. package/lib/esm/getActionProcessor/core/config/getConfigGetGlobalActionProcessor.js +0 -10
  299. package/lib/esm/getActionProcessor/webserver/extract/getExtractExpenseActionProcessor.d.ts +0 -2
  300. package/lib/esm/getActionProcessor/webserver/extract/getExtractExpenseActionProcessor.js +0 -40
  301. package/lib/esm/getActionProcessor/webserver/extract/index.d.ts +0 -2
  302. package/lib/esm/getActionProcessor/webserver/extract/index.js +0 -4
  303. package/lib/esm/logic/textract/analyzeExpense.d.ts +0 -51
  304. package/lib/esm/logic/textract/analyzeExpense.js +0 -18
  305. package/lib/esm/logic/textract/index.d.ts +0 -2
  306. package/lib/esm/logic/textract/index.js +0 -2
  307. package/lib/esm/logic/textract/transformExpenseResponse.d.ts +0 -29
  308. package/lib/esm/logic/textract/transformExpenseResponse.js +0 -173
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quidproquo-actionprocessor-awslambda",
3
- "version": "0.0.263",
3
+ "version": "0.1.1",
4
4
  "description": "",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -12,10 +12,11 @@
12
12
  "scripts": {
13
13
  "test": "echo \"Error: no test specified\" && exit 1",
14
14
  "clean": "npx rimraf lib && npx rimraf node_modules",
15
- "build": "npm run clean && npm run build:esm && npm run build:cjs",
15
+ "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:extension",
16
16
  "watch": "tsc -p tsconfig.esm.json -w",
17
17
  "build:cjs": "tsc -p tsconfig.commonjs.json",
18
18
  "build:esm": "tsc -p tsconfig.esm.json",
19
+ "build:extension": "node scripts/buildLogExtensionLayer.mjs",
19
20
  "lint": "npx eslint .",
20
21
  "lint:fix": "npx eslint . --fix",
21
22
  "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,scss,md}\""
@@ -47,11 +48,10 @@
47
48
  "@aws-sdk/client-sns": "^3.744.0",
48
49
  "@aws-sdk/client-sqs": "^3.744.0",
49
50
  "@aws-sdk/client-ssm": "^3.744.0",
50
- "@aws-sdk/client-textract": "^3.883.0",
51
51
  "@aws-sdk/s3-presigned-post": "^3.744.0",
52
52
  "@aws-sdk/s3-request-presigner": "^3.744.0",
53
53
  "@types/aws-lambda": "^8.10.109",
54
- "ai": "^6.0.141",
54
+ "ai": "^7.0.4",
55
55
  "aws-jwt-verify": "^3.4.0",
56
56
  "busboy": "^1.6.0",
57
57
  "jsonwebtoken": "^9.0.0",
@@ -59,16 +59,18 @@
59
59
  "lodash": "^4.17.21",
60
60
  "node-cache": "^5.1.2",
61
61
  "node-match-path": "^0.6.3",
62
- "quidproquo-config-aws": "0.0.263",
63
- "quidproquo-core": "0.0.263",
64
- "quidproquo-webserver": "0.0.263"
62
+ "quidproquo-actionprocessor-js": "0.1.1",
63
+ "quidproquo-config-aws": "0.1.1",
64
+ "quidproquo-core": "0.1.1",
65
+ "quidproquo-webserver": "0.1.1"
65
66
  },
66
67
  "devDependencies": {
67
68
  "@types/busboy": "^1.5.0",
68
69
  "@types/jsonwebtoken": "^9.0.2",
69
70
  "@types/lodash": "^4.14.194",
70
71
  "@types/node": "^22.13.13",
71
- "quidproquo-tsconfig": "0.0.263",
72
+ "esbuild": "^0.25.8",
73
+ "quidproquo-tsconfig": "0.1.1",
72
74
  "typescript": "^5.8.2"
73
75
  }
74
76
  }
@@ -1,2 +0,0 @@
1
- import { ActionProcessorListResolver } from 'quidproquo-core';
2
- export declare const getConfigGetGlobalActionProcessor: ActionProcessorListResolver;
@@ -1,25 +0,0 @@
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.getConfigGetGlobalActionProcessor = void 0;
13
- const quidproquo_core_1 = require("quidproquo-core");
14
- const getProcessConfigGetGlobal = (qpqConfig) => {
15
- return (_a) => __awaiter(void 0, [_a], void 0, function* ({ globalName }) {
16
- const globalValue = quidproquo_core_1.qpqCoreUtils.getGlobalConfigValue(qpqConfig, globalName);
17
- return (0, quidproquo_core_1.actionResult)(globalValue);
18
- });
19
- };
20
- const getConfigGetGlobalActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
21
- return ({
22
- [quidproquo_core_1.ConfigActionType.GetGlobal]: getProcessConfigGetGlobal(qpqConfig),
23
- });
24
- });
25
- exports.getConfigGetGlobalActionProcessor = getConfigGetGlobalActionProcessor;
@@ -1,2 +0,0 @@
1
- import { ActionProcessorListResolver } from 'quidproquo-core';
2
- export declare const getExtractExpenseActionProcessor: ActionProcessorListResolver;
@@ -1,56 +0,0 @@
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.getExtractExpenseActionProcessor = void 0;
13
- const quidproquo_config_aws_1 = require("quidproquo-config-aws");
14
- const quidproquo_core_1 = require("quidproquo-core");
15
- const quidproquo_webserver_1 = require("quidproquo-webserver");
16
- const awsNamingUtils_1 = require("../../../awsNamingUtils");
17
- const textract_1 = require("../../../logic/textract");
18
- const resolveStorageDriveBucketName = (drive, qpqConfig) => {
19
- var _a, _b;
20
- const storageDriveConfig = quidproquo_core_1.qpqCoreUtils.getStorageDriveByName(drive, qpqConfig);
21
- if (!storageDriveConfig) {
22
- throw new Error(`Could not find storage drive config for [${drive}]`);
23
- }
24
- return (0, awsNamingUtils_1.getConfigRuntimeResourceNameFromConfigWithServiceOverride)(((_a = storageDriveConfig.owner) === null || _a === void 0 ? void 0 : _a.resourceNameOverride) || drive, qpqConfig, (_b = storageDriveConfig.owner) === null || _b === void 0 ? void 0 : _b.module);
25
- };
26
- const getProcessExtractExpense = (qpqConfig) => {
27
- return (_a) => __awaiter(void 0, [_a], void 0, function* ({ storageDriveName, filePath }) {
28
- try {
29
- const bucketName = resolveStorageDriveBucketName(storageDriveName, qpqConfig);
30
- const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
31
- // Call Textract to analyze the expense document
32
- const textractResponse = yield (0, textract_1.analyzeExpenseDocument)(bucketName, filePath, region);
33
- // Transform the response to our format
34
- const extractedDocument = (0, textract_1.transformTextractExpenseResponse)(textractResponse, storageDriveName, filePath, true);
35
- return (0, quidproquo_core_1.actionResult)(extractedDocument);
36
- }
37
- catch (error) {
38
- // Handle specific AWS errors with proper error mapping
39
- return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
40
- InvalidS3ObjectException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.FileNotFound, 'The specified file could not be found or accessed'),
41
- NoSuchKey: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.FileNotFound, 'The specified file does not exist'),
42
- UnsupportedDocumentException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.UnsupportedFormat, 'The document format is not supported for expense analysis'),
43
- InvalidParameterException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.InvalidParameter, 'Invalid parameters provided to the extraction service'),
44
- ThrottlingException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.RateLimited, 'Too many requests, please try again later'),
45
- InvalidObjectState: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
46
- AccessDenied: () => (0, quidproquo_core_1.actionResultError)(quidproquo_webserver_1.ExtractExpenseErrorTypeEnum.AccessDenied, 'Access denied to the specified file'),
47
- });
48
- }
49
- });
50
- };
51
- const getExtractExpenseActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
52
- return ({
53
- [quidproquo_webserver_1.ExtractActionType.Expense]: getProcessExtractExpense(qpqConfig),
54
- });
55
- });
56
- exports.getExtractExpenseActionProcessor = getExtractExpenseActionProcessor;
@@ -1,2 +0,0 @@
1
- import { ActionProcessorListResolver } from 'quidproquo-core';
2
- export declare const getExtractActionProcessor: ActionProcessorListResolver;
@@ -1,17 +0,0 @@
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.getExtractActionProcessor = void 0;
13
- const getExtractExpenseActionProcessor_1 = require("./getExtractExpenseActionProcessor");
14
- const getExtractActionProcessor = (qpqConfig, dynamicModuleLoader) => __awaiter(void 0, void 0, void 0, function* () {
15
- return (Object.assign({}, (yield (0, getExtractExpenseActionProcessor_1.getExtractExpenseActionProcessor)(qpqConfig, dynamicModuleLoader))));
16
- });
17
- exports.getExtractActionProcessor = getExtractActionProcessor;
@@ -1,51 +0,0 @@
1
- export interface TextractExpenseAnalysis {
2
- DocumentMetadata?: {
3
- Pages?: number;
4
- };
5
- ExpenseDocuments?: Array<{
6
- ExpenseIndex?: number;
7
- SummaryFields?: Array<{
8
- Type?: {
9
- Text?: string;
10
- Confidence?: number;
11
- };
12
- ValueDetection?: {
13
- Text?: string;
14
- Confidence?: number;
15
- };
16
- LabelDetection?: {
17
- Text?: string;
18
- Confidence?: number;
19
- };
20
- PageNumber?: number;
21
- }>;
22
- LineItemGroups?: Array<{
23
- LineItemGroupIndex?: number;
24
- LineItems?: Array<{
25
- LineItemExpenseFields?: Array<{
26
- Type?: {
27
- Text?: string;
28
- Confidence?: number;
29
- };
30
- ValueDetection?: {
31
- Text?: string;
32
- Confidence?: number;
33
- };
34
- LabelDetection?: {
35
- Text?: string;
36
- Confidence?: number;
37
- };
38
- PageNumber?: number;
39
- }>;
40
- }>;
41
- }>;
42
- Blocks?: Array<{
43
- BlockType?: string;
44
- Text?: string;
45
- Confidence?: number;
46
- Page?: number;
47
- Id?: string;
48
- }>;
49
- }>;
50
- }
51
- export declare const analyzeExpenseDocument: (bucketName: string, documentKey: string, region: string) => Promise<TextractExpenseAnalysis>;
@@ -1,31 +0,0 @@
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.analyzeExpenseDocument = void 0;
13
- const client_textract_1 = require("@aws-sdk/client-textract");
14
- const createAwsClient_1 = require("../createAwsClient");
15
- const analyzeExpenseDocument = (bucketName, documentKey, region) => __awaiter(void 0, void 0, void 0, function* () {
16
- const textractClient = (0, createAwsClient_1.createAwsClient)(client_textract_1.TextractClient, { region });
17
- const command = new client_textract_1.AnalyzeExpenseCommand({
18
- Document: {
19
- S3Object: {
20
- Bucket: bucketName,
21
- Name: documentKey,
22
- },
23
- },
24
- });
25
- const response = yield textractClient.send(command);
26
- return {
27
- DocumentMetadata: response.DocumentMetadata,
28
- ExpenseDocuments: response.ExpenseDocuments,
29
- };
30
- });
31
- exports.analyzeExpenseDocument = analyzeExpenseDocument;
@@ -1,2 +0,0 @@
1
- export * from './analyzeExpense';
2
- export * from './transformExpenseResponse';
@@ -1,29 +0,0 @@
1
- import { TextractExpenseAnalysis } from './analyzeExpense';
2
- export interface ExtractedExpenseDocument {
3
- metadata: {
4
- merchantName?: string;
5
- merchantAddress?: string;
6
- date?: string;
7
- currency?: string;
8
- paymentMethod?: string;
9
- subtotal?: number;
10
- tax?: number;
11
- total?: number;
12
- [key: string]: any;
13
- };
14
- lineItems?: Array<{
15
- description: string;
16
- quantity?: number;
17
- unitPrice?: number;
18
- total?: number;
19
- [key: string]: any;
20
- }>;
21
- rawText?: string;
22
- source: {
23
- storageDrive: string;
24
- filePath: string;
25
- textractJobId?: string;
26
- };
27
- _raw?: any;
28
- }
29
- export declare function transformTextractExpenseResponse(textractResponse: TextractExpenseAnalysis, storageDrive: string, filePath: string, includeRaw?: boolean): ExtractedExpenseDocument;
@@ -1,180 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformTextractExpenseResponse = transformTextractExpenseResponse;
4
- const FIELD_TYPE_MAPPINGS = {
5
- 'VENDOR_NAME': 'merchantName',
6
- 'NAME': 'merchantName',
7
- 'MERCHANT_NAME': 'merchantName',
8
- 'VENDOR_ADDRESS': 'merchantAddress',
9
- 'ADDRESS': 'merchantAddress',
10
- 'MERCHANT_ADDRESS': 'merchantAddress',
11
- 'INVOICE_RECEIPT_DATE': 'date',
12
- 'DATE': 'date',
13
- 'CURRENCY_CODE': 'currency',
14
- 'PAYMENT_METHOD': 'paymentMethod',
15
- 'SUBTOTAL': 'subtotal',
16
- 'TAX': 'tax',
17
- 'TOTAL': 'total',
18
- 'AMOUNT_DUE': 'total',
19
- 'AMOUNT_PAID': 'amountPaid',
20
- 'INVOICE_RECEIPT_ID': 'receiptNumber',
21
- 'INVOICE_ID': 'invoiceNumber',
22
- 'RECEIPT_ID': 'receiptNumber',
23
- 'TAX_PAYER_ID': 'taxId',
24
- 'VENDOR_ABN_NUMBER': 'vendorAbn',
25
- 'VENDOR_PHONE': 'vendorPhone',
26
- 'VENDOR_URL': 'vendorUrl',
27
- };
28
- const LINE_ITEM_FIELD_MAPPINGS = {
29
- 'ITEM': 'description',
30
- 'DESCRIPTION': 'description',
31
- 'PRODUCT_NAME': 'description',
32
- 'QUANTITY': 'quantity',
33
- 'UNIT_PRICE': 'unitPrice',
34
- 'PRICE': 'total',
35
- 'AMOUNT': 'total',
36
- };
37
- function extractFieldValue(field, forceString = false) {
38
- var _a, _b;
39
- const text = ((_a = field === null || field === void 0 ? void 0 : field.ValueDetection) === null || _a === void 0 ? void 0 : _a.Text) || ((_b = field === null || field === void 0 ? void 0 : field.Type) === null || _b === void 0 ? void 0 : _b.Text);
40
- if (!text)
41
- return undefined;
42
- // For certain fields, always return as string (dates, IDs, etc.)
43
- if (forceString)
44
- return text;
45
- // Only try to parse as number if it looks like a price/amount (has $ or is purely numeric)
46
- const cleanedText = text.replace(/[$,]/g, '').trim();
47
- // Check if it's a pure number or price
48
- if (/^\d+\.?\d*$/.test(cleanedText) && !text.includes('/') && !text.includes('-')) {
49
- const numericValue = parseFloat(cleanedText);
50
- if (!isNaN(numericValue))
51
- return numericValue;
52
- }
53
- return text;
54
- }
55
- function extractSummaryFields(summaryFields) {
56
- var _a, _b, _c;
57
- const metadata = {};
58
- if (!summaryFields)
59
- return metadata;
60
- // Fields that should always be strings
61
- const stringFields = new Set([
62
- 'DATE', 'INVOICE_RECEIPT_DATE', 'CURRENCY_CODE', 'PAYMENT_METHOD',
63
- 'INVOICE_RECEIPT_ID', 'INVOICE_ID', 'RECEIPT_ID', 'TAX_PAYER_ID',
64
- 'VENDOR_ABN_NUMBER', 'VENDOR_PHONE', 'VENDOR_URL'
65
- ]);
66
- // Track confidence scores for duplicate fields
67
- const fieldConfidence = {};
68
- for (const field of summaryFields) {
69
- const fieldType = (_b = (_a = field === null || field === void 0 ? void 0 : field.Type) === null || _a === void 0 ? void 0 : _a.Text) === null || _b === void 0 ? void 0 : _b.toUpperCase();
70
- if (!fieldType)
71
- continue;
72
- const confidence = ((_c = field === null || field === void 0 ? void 0 : field.Type) === null || _c === void 0 ? void 0 : _c.Confidence) || 0;
73
- const forceString = stringFields.has(fieldType) || fieldType.includes('DATE') || fieldType.includes('ID') || fieldType.includes('NUMBER') || fieldType.includes('PHONE') || fieldType.includes('URL');
74
- if (FIELD_TYPE_MAPPINGS[fieldType]) {
75
- const mappedKey = FIELD_TYPE_MAPPINGS[fieldType];
76
- const value = extractFieldValue(field, forceString);
77
- // Only update if value exists and has higher confidence than existing
78
- if (value !== undefined) {
79
- const existingConfidence = fieldConfidence[mappedKey] || 0;
80
- if (confidence > existingConfidence) {
81
- metadata[mappedKey] = value;
82
- fieldConfidence[mappedKey] = confidence;
83
- }
84
- }
85
- }
86
- else {
87
- // Skip fields that are clearly not useful
88
- const fieldKey = fieldType.toLowerCase().replace(/_/g, '');
89
- // Skip certain field types that aren't useful in our structure
90
- if (['street', 'city', 'addressblock', 'expenserow', 'other'].includes(fieldKey)) {
91
- continue;
92
- }
93
- // Store other unmapped fields for extensibility
94
- const value = extractFieldValue(field, forceString);
95
- if (value !== undefined && !fieldKey.startsWith('vendor_') && !fieldKey.startsWith('amount_')) {
96
- // Use more readable field names
97
- const cleanKey = fieldType.toLowerCase().replace(/_/g, '');
98
- metadata[cleanKey] = value;
99
- }
100
- }
101
- }
102
- // Clean up merchant name - take the first line if multiline
103
- if (metadata.merchantName && metadata.merchantName.includes('\n')) {
104
- metadata.merchantName = metadata.merchantName.split('\n')[0].trim();
105
- }
106
- return metadata;
107
- }
108
- function extractLineItems(lineItemGroups) {
109
- var _a, _b;
110
- if (!lineItemGroups || lineItemGroups.length === 0)
111
- return undefined;
112
- const items = [];
113
- for (const group of lineItemGroups) {
114
- if (!group.LineItems)
115
- continue;
116
- for (const lineItem of group.LineItems) {
117
- if (!lineItem.LineItemExpenseFields)
118
- continue;
119
- const item = { description: '' };
120
- for (const field of lineItem.LineItemExpenseFields) {
121
- const fieldType = (_b = (_a = field === null || field === void 0 ? void 0 : field.Type) === null || _a === void 0 ? void 0 : _a.Text) === null || _b === void 0 ? void 0 : _b.toUpperCase();
122
- if (!fieldType)
123
- continue;
124
- // Determine if this field should be a string
125
- const forceString = fieldType === 'ITEM' || fieldType === 'DESCRIPTION' || fieldType === 'PRODUCT_NAME';
126
- if (LINE_ITEM_FIELD_MAPPINGS[fieldType]) {
127
- const mappedKey = LINE_ITEM_FIELD_MAPPINGS[fieldType];
128
- const value = extractFieldValue(field, forceString);
129
- if (value !== undefined) {
130
- item[mappedKey] = value;
131
- }
132
- }
133
- else if (fieldType !== 'EXPENSE_ROW') {
134
- // Store unmapped fields except expense_row which is just raw text
135
- const value = extractFieldValue(field, forceString);
136
- if (value !== undefined) {
137
- const cleanKey = fieldType.toLowerCase().replace(/_/g, '');
138
- item[cleanKey] = value;
139
- }
140
- }
141
- }
142
- // Only add if we have at least a description or some meaningful data
143
- if (item.description || (Object.keys(item).length > 1 && (item.total || item.quantity))) {
144
- items.push(item);
145
- }
146
- }
147
- }
148
- return items.length > 0 ? items : undefined;
149
- }
150
- function extractRawText(blocks) {
151
- if (!blocks)
152
- return undefined;
153
- const textBlocks = blocks
154
- .filter(block => block.BlockType === 'LINE' && block.Text)
155
- .map(block => block.Text)
156
- .join('\n');
157
- return textBlocks || undefined;
158
- }
159
- function transformTextractExpenseResponse(textractResponse, storageDrive, filePath, includeRaw = true) {
160
- var _a;
161
- // Process the first expense document (most receipts/invoices have just one)
162
- const expenseDoc = (_a = textractResponse.ExpenseDocuments) === null || _a === void 0 ? void 0 : _a[0];
163
- const metadata = extractSummaryFields(expenseDoc === null || expenseDoc === void 0 ? void 0 : expenseDoc.SummaryFields);
164
- const lineItems = extractLineItems(expenseDoc === null || expenseDoc === void 0 ? void 0 : expenseDoc.LineItemGroups);
165
- const rawText = extractRawText(expenseDoc === null || expenseDoc === void 0 ? void 0 : expenseDoc.Blocks);
166
- const result = {
167
- metadata,
168
- lineItems,
169
- rawText,
170
- source: {
171
- storageDrive: storageDrive,
172
- filePath: filePath,
173
- },
174
- };
175
- // Include raw response for debugging (can be disabled in production)
176
- if (includeRaw) {
177
- result._raw = textractResponse;
178
- }
179
- return result;
180
- }
@@ -1,2 +0,0 @@
1
- import { ActionProcessorListResolver } from 'quidproquo-core';
2
- export declare const getConfigGetGlobalActionProcessor: ActionProcessorListResolver;
@@ -1,10 +0,0 @@
1
- import { actionResult, ConfigActionType, qpqCoreUtils, } from 'quidproquo-core';
2
- const getProcessConfigGetGlobal = (qpqConfig) => {
3
- return async ({ globalName }) => {
4
- const globalValue = qpqCoreUtils.getGlobalConfigValue(qpqConfig, globalName);
5
- return actionResult(globalValue);
6
- };
7
- };
8
- export const getConfigGetGlobalActionProcessor = async (qpqConfig) => ({
9
- [ConfigActionType.GetGlobal]: getProcessConfigGetGlobal(qpqConfig),
10
- });
@@ -1,2 +0,0 @@
1
- import { ActionProcessorListResolver } from 'quidproquo-core';
2
- export declare const getExtractExpenseActionProcessor: ActionProcessorListResolver;
@@ -1,40 +0,0 @@
1
- import { qpqConfigAwsUtils } from 'quidproquo-config-aws';
2
- import { actionResult, actionResultError, actionResultErrorFromCaughtError, qpqCoreUtils, } from 'quidproquo-core';
3
- import { ExtractActionType, ExtractExpenseErrorTypeEnum } from 'quidproquo-webserver';
4
- import { getConfigRuntimeResourceNameFromConfigWithServiceOverride } from '../../../awsNamingUtils';
5
- import { analyzeExpenseDocument, transformTextractExpenseResponse } from '../../../logic/textract';
6
- const resolveStorageDriveBucketName = (drive, qpqConfig) => {
7
- const storageDriveConfig = qpqCoreUtils.getStorageDriveByName(drive, qpqConfig);
8
- if (!storageDriveConfig) {
9
- throw new Error(`Could not find storage drive config for [${drive}]`);
10
- }
11
- return getConfigRuntimeResourceNameFromConfigWithServiceOverride(storageDriveConfig.owner?.resourceNameOverride || drive, qpqConfig, storageDriveConfig.owner?.module);
12
- };
13
- const getProcessExtractExpense = (qpqConfig) => {
14
- return async ({ storageDriveName, filePath }) => {
15
- try {
16
- const bucketName = resolveStorageDriveBucketName(storageDriveName, qpqConfig);
17
- const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
18
- // Call Textract to analyze the expense document
19
- const textractResponse = await analyzeExpenseDocument(bucketName, filePath, region);
20
- // Transform the response to our format
21
- const extractedDocument = transformTextractExpenseResponse(textractResponse, storageDriveName, filePath, true);
22
- return actionResult(extractedDocument);
23
- }
24
- catch (error) {
25
- // Handle specific AWS errors with proper error mapping
26
- return actionResultErrorFromCaughtError(error, {
27
- InvalidS3ObjectException: () => actionResultError(ExtractExpenseErrorTypeEnum.FileNotFound, 'The specified file could not be found or accessed'),
28
- NoSuchKey: () => actionResultError(ExtractExpenseErrorTypeEnum.FileNotFound, 'The specified file does not exist'),
29
- UnsupportedDocumentException: () => actionResultError(ExtractExpenseErrorTypeEnum.UnsupportedFormat, 'The document format is not supported for expense analysis'),
30
- InvalidParameterException: () => actionResultError(ExtractExpenseErrorTypeEnum.InvalidParameter, 'Invalid parameters provided to the extraction service'),
31
- ThrottlingException: () => actionResultError(ExtractExpenseErrorTypeEnum.RateLimited, 'Too many requests, please try again later'),
32
- InvalidObjectState: () => actionResultError(ExtractExpenseErrorTypeEnum.InvalidStorageClass, 'File is in the wrong storage class'),
33
- AccessDenied: () => actionResultError(ExtractExpenseErrorTypeEnum.AccessDenied, 'Access denied to the specified file'),
34
- });
35
- }
36
- };
37
- };
38
- export const getExtractExpenseActionProcessor = async (qpqConfig) => ({
39
- [ExtractActionType.Expense]: getProcessExtractExpense(qpqConfig),
40
- });
@@ -1,2 +0,0 @@
1
- import { ActionProcessorListResolver } from 'quidproquo-core';
2
- export declare const getExtractActionProcessor: ActionProcessorListResolver;
@@ -1,4 +0,0 @@
1
- import { getExtractExpenseActionProcessor } from './getExtractExpenseActionProcessor';
2
- export const getExtractActionProcessor = async (qpqConfig, dynamicModuleLoader) => ({
3
- ...(await getExtractExpenseActionProcessor(qpqConfig, dynamicModuleLoader)),
4
- });
@@ -1,51 +0,0 @@
1
- export interface TextractExpenseAnalysis {
2
- DocumentMetadata?: {
3
- Pages?: number;
4
- };
5
- ExpenseDocuments?: Array<{
6
- ExpenseIndex?: number;
7
- SummaryFields?: Array<{
8
- Type?: {
9
- Text?: string;
10
- Confidence?: number;
11
- };
12
- ValueDetection?: {
13
- Text?: string;
14
- Confidence?: number;
15
- };
16
- LabelDetection?: {
17
- Text?: string;
18
- Confidence?: number;
19
- };
20
- PageNumber?: number;
21
- }>;
22
- LineItemGroups?: Array<{
23
- LineItemGroupIndex?: number;
24
- LineItems?: Array<{
25
- LineItemExpenseFields?: Array<{
26
- Type?: {
27
- Text?: string;
28
- Confidence?: number;
29
- };
30
- ValueDetection?: {
31
- Text?: string;
32
- Confidence?: number;
33
- };
34
- LabelDetection?: {
35
- Text?: string;
36
- Confidence?: number;
37
- };
38
- PageNumber?: number;
39
- }>;
40
- }>;
41
- }>;
42
- Blocks?: Array<{
43
- BlockType?: string;
44
- Text?: string;
45
- Confidence?: number;
46
- Page?: number;
47
- Id?: string;
48
- }>;
49
- }>;
50
- }
51
- export declare const analyzeExpenseDocument: (bucketName: string, documentKey: string, region: string) => Promise<TextractExpenseAnalysis>;
@@ -1,18 +0,0 @@
1
- import { AnalyzeExpenseCommand, TextractClient } from '@aws-sdk/client-textract';
2
- import { createAwsClient } from '../createAwsClient';
3
- export const analyzeExpenseDocument = async (bucketName, documentKey, region) => {
4
- const textractClient = createAwsClient(TextractClient, { region });
5
- const command = new AnalyzeExpenseCommand({
6
- Document: {
7
- S3Object: {
8
- Bucket: bucketName,
9
- Name: documentKey,
10
- },
11
- },
12
- });
13
- const response = await textractClient.send(command);
14
- return {
15
- DocumentMetadata: response.DocumentMetadata,
16
- ExpenseDocuments: response.ExpenseDocuments,
17
- };
18
- };
@@ -1,2 +0,0 @@
1
- export * from './analyzeExpense';
2
- export * from './transformExpenseResponse';
@@ -1,2 +0,0 @@
1
- export * from './analyzeExpense';
2
- export * from './transformExpenseResponse';
@@ -1,29 +0,0 @@
1
- import { TextractExpenseAnalysis } from './analyzeExpense';
2
- export interface ExtractedExpenseDocument {
3
- metadata: {
4
- merchantName?: string;
5
- merchantAddress?: string;
6
- date?: string;
7
- currency?: string;
8
- paymentMethod?: string;
9
- subtotal?: number;
10
- tax?: number;
11
- total?: number;
12
- [key: string]: any;
13
- };
14
- lineItems?: Array<{
15
- description: string;
16
- quantity?: number;
17
- unitPrice?: number;
18
- total?: number;
19
- [key: string]: any;
20
- }>;
21
- rawText?: string;
22
- source: {
23
- storageDrive: string;
24
- filePath: string;
25
- textractJobId?: string;
26
- };
27
- _raw?: any;
28
- }
29
- export declare function transformTextractExpenseResponse(textractResponse: TextractExpenseAnalysis, storageDrive: string, filePath: string, includeRaw?: boolean): ExtractedExpenseDocument;