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
@@ -21,10 +21,24 @@ const getProcessRefreshToken = (qpqConfig) => {
21
21
  const userPoolId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolIdFromConfig)(userDirectoryName, qpqConfig), region);
22
22
  const userPoolClientId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolClientIdFromConfig)(userDirectoryName, qpqConfig), region);
23
23
  if (!session.decodedAccessToken || !session.decodedAccessToken.username) {
24
- return (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.ErrorTypeEnum.Unauthorized, 'Invalid accessToken');
24
+ return (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRefreshTokenErrorTypeEnum.Unauthorized, 'Invalid accessToken');
25
+ }
26
+ // NOTE: we intentionally do NOT gate on decodedAccessToken.wasValid here.
27
+ // Refresh must accept a signature-valid-but-expired access token (that's the
28
+ // point of refreshing), and wasValid folds in the expiry check. The trust
29
+ // anchor for this operation is the refreshToken itself: Cognito's
30
+ // REFRESH_TOKEN_AUTH validates it and the SECRET_HASH binds it to `username`,
31
+ // so a forged/unverified username cannot mint tokens for another user.
32
+ try {
33
+ const authResponse = yield (0, refreshToken_1.refreshToken)(userPoolId, userPoolClientId, quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), session.decodedAccessToken.username, refreshToken);
34
+ return (0, quidproquo_core_1.actionResult)(authResponse);
35
+ }
36
+ catch (error) {
37
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
38
+ NotAuthorizedException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRefreshTokenErrorTypeEnum.Unauthorized, 'Refresh token is invalid or has expired'),
39
+ TooManyRequestsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRefreshTokenErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
40
+ });
25
41
  }
26
- const authResponse = yield (0, refreshToken_1.refreshToken)(userPoolId, userPoolClientId, quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig), session.decodedAccessToken.username, refreshToken);
27
- return (0, quidproquo_core_1.actionResult)(authResponse);
28
42
  });
29
43
  };
30
44
  const getUserDirectoryRefreshTokenActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
@@ -16,8 +16,17 @@ const requestEmailVerificationCode_1 = require("../../../logic/cognito/requestEm
16
16
  const getProcessRequestEmailVerification = (qpqConfig) => {
17
17
  return (_a) => __awaiter(void 0, [_a], void 0, function* ({ userDirectoryName, accessToken }) {
18
18
  const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
19
- yield (0, requestEmailVerificationCode_1.requestEmailVerificationCode)(region, accessToken);
20
- return (0, quidproquo_core_1.actionResult)(void 0);
19
+ try {
20
+ yield (0, requestEmailVerificationCode_1.requestEmailVerificationCode)(region, accessToken);
21
+ return (0, quidproquo_core_1.actionResult)(void 0);
22
+ }
23
+ catch (error) {
24
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
25
+ NotAuthorizedException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRequestEmailVerificationErrorTypeEnum.Unauthorized, 'Access token is invalid or has expired'),
26
+ LimitExceededException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRequestEmailVerificationErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
27
+ CodeDeliveryFailureException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRequestEmailVerificationErrorTypeEnum.CodeDeliveryFailed, 'Could not deliver the verification code'),
28
+ });
29
+ }
21
30
  });
22
31
  };
23
32
  const getUserDirectoryRequestEmailVerificationActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
@@ -16,6 +16,7 @@ const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-iden
16
16
  const awsNamingUtils_1 = require("../../../awsNamingUtils");
17
17
  const getExportedValue_1 = require("../../../logic/cloudformation/getExportedValue");
18
18
  const respondToAuthChallengeChallenge_1 = require("../../../logic/cognito/respondToAuthChallengeChallenge");
19
+ const verifySoftwareToken_1 = require("../../../logic/cognito/verifySoftwareToken");
19
20
  const anyAuthChallengeToCognitoAttributes = (authChallenge) => {
20
21
  switch (authChallenge.challenge) {
21
22
  case quidproquo_core_1.AuthenticateUserChallenge.NEW_PASSWORD_REQUIRED:
@@ -26,6 +27,14 @@ const anyAuthChallengeToCognitoAttributes = (authChallenge) => {
26
27
  return {
27
28
  ANSWER: JSON.stringify(authChallenge.challengeAnswer),
28
29
  };
30
+ case quidproquo_core_1.AuthenticateUserChallenge.SOFTWARE_TOKEN_MFA:
31
+ return {
32
+ SOFTWARE_TOKEN_MFA_CODE: authChallenge.mfaCode,
33
+ };
34
+ // MFA_SETUP completes with just USERNAME/SESSION — the TOTP code is consumed
35
+ // by the preceding VerifySoftwareToken call, not by RespondToAuthChallenge.
36
+ case quidproquo_core_1.AuthenticateUserChallenge.MFA_SETUP:
37
+ return {};
29
38
  default:
30
39
  return {};
31
40
  }
@@ -36,6 +45,10 @@ const anyAuthChallengeToCognitoChallengeName = (authChallenge) => {
36
45
  return client_cognito_identity_provider_1.ChallengeNameType.NEW_PASSWORD_REQUIRED;
37
46
  case quidproquo_core_1.AuthenticateUserChallenge.CUSTOM_CHALLENGE:
38
47
  return client_cognito_identity_provider_1.ChallengeNameType.CUSTOM_CHALLENGE;
48
+ case quidproquo_core_1.AuthenticateUserChallenge.SOFTWARE_TOKEN_MFA:
49
+ return client_cognito_identity_provider_1.ChallengeNameType.SOFTWARE_TOKEN_MFA;
50
+ case quidproquo_core_1.AuthenticateUserChallenge.MFA_SETUP:
51
+ return client_cognito_identity_provider_1.ChallengeNameType.MFA_SETUP;
39
52
  default:
40
53
  throw new Error(`Unknown challenge`);
41
54
  }
@@ -45,8 +58,27 @@ const getProcessRespondToAuthChallenge = (qpqConfig) => {
45
58
  const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
46
59
  const userPoolId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolIdFromConfig)(userDirectoryName, qpqConfig), region);
47
60
  const userPoolClientId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolClientIdFromConfig)(userDirectoryName, qpqConfig), region);
48
- const response = yield (0, respondToAuthChallengeChallenge_1.respondToAuthChallengeChallenge)(userPoolId, userPoolClientId, region, authChallenge.username, authChallenge.session, anyAuthChallengeToCognitoChallengeName(authChallenge), anyAuthChallengeToCognitoAttributes(authChallenge));
49
- return (0, quidproquo_core_1.actionResult)(response);
61
+ // MFA_SETUP must verify the TOTP code first; Cognito returns a fresh session
62
+ // that is then used to complete the challenge and issue tokens.
63
+ let session = authChallenge.session;
64
+ try {
65
+ if (authChallenge.challenge === quidproquo_core_1.AuthenticateUserChallenge.MFA_SETUP) {
66
+ session = yield (0, verifySoftwareToken_1.verifySoftwareToken)(region, session, authChallenge.mfaCode);
67
+ }
68
+ const response = yield (0, respondToAuthChallengeChallenge_1.respondToAuthChallengeChallenge)(userPoolId, userPoolClientId, region, authChallenge.username, session, anyAuthChallengeToCognitoChallengeName(authChallenge), anyAuthChallengeToCognitoAttributes(authChallenge));
69
+ return (0, quidproquo_core_1.actionResult)(response);
70
+ }
71
+ catch (error) {
72
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
73
+ CodeMismatchException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.InvalidCode, 'The supplied code is incorrect'),
74
+ EnableSoftwareTokenMFAException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.InvalidCode, 'The supplied code is incorrect'),
75
+ ExpiredCodeException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.ExpiredCode, 'The supplied code has expired'),
76
+ InvalidPasswordException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.InvalidNewPassword, 'New password does not meet the password policy'),
77
+ NotAuthorizedException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.Unauthorized, 'The challenge session is invalid or has expired'),
78
+ LimitExceededException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
79
+ TooManyRequestsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectoryRespondToAuthChallengeErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
80
+ });
81
+ }
50
82
  });
51
83
  };
52
84
  const getUserDirectoryRespondToAuthChallengeActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
@@ -21,8 +21,18 @@ const getProcessSetPassword = (qpqConfig) => {
21
21
  const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
22
22
  const userPoolId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolIdFromConfig)(userDirectoryName, qpqConfig), region);
23
23
  const resolvedUsername = yield (0, resolveUsernameByPreferredUsername_1.resolveUsernameByPreferredUsername)(userPoolId, region, username);
24
- yield (0, setUserPassword_1.setUserPassword)(region, userPoolId, resolvedUsername, newPassword);
25
- return (0, quidproquo_core_1.actionResult)(void 0);
24
+ try {
25
+ yield (0, setUserPassword_1.setUserPassword)(region, userPoolId, resolvedUsername, newPassword);
26
+ return (0, quidproquo_core_1.actionResult)(void 0);
27
+ }
28
+ catch (error) {
29
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
30
+ UserNotFoundException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetPasswordErrorTypeEnum.UserNotFound, 'No account found for this user'),
31
+ InvalidPasswordException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetPasswordErrorTypeEnum.InvalidNewPassword, 'Password does not meet the password policy'),
32
+ LimitExceededException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetPasswordErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
33
+ TooManyRequestsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetPasswordErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
34
+ });
35
+ }
26
36
  });
27
37
  };
28
38
  const getUserDirectorySetPasswordActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
@@ -21,8 +21,19 @@ const getProcessSetUserAttributes = (qpqConfig) => {
21
21
  const region = quidproquo_config_aws_1.qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);
22
22
  const userPoolId = yield (0, getExportedValue_1.getExportedValue)((0, awsNamingUtils_1.getCFExportNameUserPoolIdFromConfig)(userDirectoryName, qpqConfig), region);
23
23
  const resolvedUsername = yield (0, resolveUsernameByPreferredUsername_1.resolveUsernameByPreferredUsername)(userPoolId, region, username);
24
- yield (0, setUserAttributes_1.setUserAttributes)(userPoolId, region, resolvedUsername, userAttributes);
25
- return (0, quidproquo_core_1.actionResult)(void 0);
24
+ try {
25
+ yield (0, setUserAttributes_1.setUserAttributes)(userPoolId, region, resolvedUsername, userAttributes);
26
+ return (0, quidproquo_core_1.actionResult)(void 0);
27
+ }
28
+ catch (error) {
29
+ return (0, quidproquo_core_1.actionResultErrorFromCaughtError)(error, {
30
+ UserNotFoundException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetUserAttributesErrorTypeEnum.UserNotFound, 'No account found for this user'),
31
+ InvalidParameterException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetUserAttributesErrorTypeEnum.InvalidAttributes, 'One or more attributes are invalid'),
32
+ AliasExistsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetUserAttributesErrorTypeEnum.AliasExists, 'That email or phone number is already in use'),
33
+ LimitExceededException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetUserAttributesErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
34
+ TooManyRequestsException: () => (0, quidproquo_core_1.actionResultError)(quidproquo_core_1.UserDirectorySetUserAttributesErrorTypeEnum.LimitExceeded, 'Too many attempts, please try again later'),
35
+ });
36
+ }
26
37
  });
27
38
  };
28
39
  const getUserDirectorySetUserAttributesActionProcessor = (qpqConfig) => __awaiter(void 0, void 0, void 0, function* () {
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.getUserDirectoryActionProcessor = void 0;
13
+ const getUserDirectoryAssociateSoftwareTokenActionProcessor_1 = require("./getUserDirectoryAssociateSoftwareTokenActionProcessor");
13
14
  const getUserDirectoryAuthenticateUserActionProcessor_1 = require("./getUserDirectoryAuthenticateUserActionProcessor");
14
15
  const getUserDirectoryChangePasswordActionProcessor_1 = require("./getUserDirectoryChangePasswordActionProcessor");
15
16
  const getUserDirectoryConfirmEmailVerificationActionProcessor_1 = require("./getUserDirectoryConfirmEmailVerificationActionProcessor");
@@ -29,6 +30,6 @@ const getUserDirectorySetAccessTokenActionProcessor_1 = require("./getUserDirect
29
30
  const getUserDirectorySetPasswordActionProcessor_1 = require("./getUserDirectorySetPasswordActionProcessor");
30
31
  const getUserDirectorySetUserAttributesActionProcessor_1 = require("./getUserDirectorySetUserAttributesActionProcessor");
31
32
  const getUserDirectoryActionProcessor = (qpqConfig, dynamicModuleLoader) => __awaiter(void 0, void 0, void 0, function* () {
32
- return (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, getUserDirectoryAuthenticateUserActionProcessor_1.getUserDirectoryAuthenticateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryChangePasswordActionProcessor_1.getUserDirectoryChangePasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmEmailVerificationActionProcessor_1.getUserDirectoryConfirmEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmForgotPasswordActionProcessor_1.getUserDirectoryConfirmForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryCreateUserActionProcessor_1.getUserDirectoryCreateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryDecodeAccessTokenActionProcessor_1.getUserDirectoryDecodeAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryForgotPasswordActionProcessor_1.getUserDirectoryForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesActionProcessor_1.getUserDirectoryGetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesByUserIdActionProcessor_1.getUserDirectoryGetUserAttributesByUserIdActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersActionProcessor_1.getUserDirectoryGetUsersActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersByAttributeActionProcessor_1.getUserDirectoryGetUsersByAttributeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryReadAccessTokenActionProcessor_1.getUserDirectoryReadAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRefreshTokenActionProcessor_1.getUserDirectoryRefreshTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRequestEmailVerificationActionProcessor_1.getUserDirectoryRequestEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRespondToAuthChallengeActionProcessor_1.getUserDirectoryRespondToAuthChallengeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetAccessTokenActionProcessor_1.getUserDirectorySetAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetPasswordActionProcessor_1.getUserDirectorySetPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetUserAttributesActionProcessor_1.getUserDirectorySetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))));
33
+ return (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, getUserDirectoryAssociateSoftwareTokenActionProcessor_1.getUserDirectoryAssociateSoftwareTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryAuthenticateUserActionProcessor_1.getUserDirectoryAuthenticateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryChangePasswordActionProcessor_1.getUserDirectoryChangePasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmEmailVerificationActionProcessor_1.getUserDirectoryConfirmEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryConfirmForgotPasswordActionProcessor_1.getUserDirectoryConfirmForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryCreateUserActionProcessor_1.getUserDirectoryCreateUserActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryDecodeAccessTokenActionProcessor_1.getUserDirectoryDecodeAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryForgotPasswordActionProcessor_1.getUserDirectoryForgotPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesActionProcessor_1.getUserDirectoryGetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUserAttributesByUserIdActionProcessor_1.getUserDirectoryGetUserAttributesByUserIdActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersActionProcessor_1.getUserDirectoryGetUsersActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryGetUsersByAttributeActionProcessor_1.getUserDirectoryGetUsersByAttributeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryReadAccessTokenActionProcessor_1.getUserDirectoryReadAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRefreshTokenActionProcessor_1.getUserDirectoryRefreshTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRequestEmailVerificationActionProcessor_1.getUserDirectoryRequestEmailVerificationActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectoryRespondToAuthChallengeActionProcessor_1.getUserDirectoryRespondToAuthChallengeActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetAccessTokenActionProcessor_1.getUserDirectorySetAccessTokenActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetPasswordActionProcessor_1.getUserDirectorySetPasswordActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserDirectorySetUserAttributesActionProcessor_1.getUserDirectorySetUserAttributesActionProcessor)(qpqConfig, dynamicModuleLoader))));
33
34
  });
34
35
  exports.getUserDirectoryActionProcessor = getUserDirectoryActionProcessor;
@@ -1,4 +1,3 @@
1
- export * from './extract';
2
1
  export * from './serviceFunction';
3
2
  export * from './webEntry';
4
3
  export * from './websocket';
@@ -24,15 +24,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.getWebserverActionProcessor = void 0;
27
- const extract_1 = require("./extract");
28
27
  const serviceFunction_1 = require("./serviceFunction");
29
28
  const webEntry_1 = require("./webEntry");
30
29
  const websocket_1 = require("./websocket");
31
- __exportStar(require("./extract"), exports);
32
30
  __exportStar(require("./serviceFunction"), exports);
33
31
  __exportStar(require("./webEntry"), exports);
34
32
  __exportStar(require("./websocket"), exports);
35
33
  const getWebserverActionProcessor = (qpqConfig, dynamicModuleLoader) => __awaiter(void 0, void 0, void 0, function* () {
36
- return (Object.assign(Object.assign(Object.assign(Object.assign({}, (yield (0, extract_1.getExtractActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, webEntry_1.getWebEntryActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, serviceFunction_1.getServiceFunctionActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, websocket_1.getWebsocketActionProcessor)(qpqConfig, dynamicModuleLoader))));
34
+ return (Object.assign(Object.assign(Object.assign({}, (yield (0, webEntry_1.getWebEntryActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, serviceFunction_1.getServiceFunctionActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, websocket_1.getWebsocketActionProcessor)(qpqConfig, dynamicModuleLoader))));
37
35
  });
38
36
  exports.getWebserverActionProcessor = getWebserverActionProcessor;
@@ -25,7 +25,7 @@ const getProcessExecute = (qpqConfig) => {
25
25
  const serviceFunctionEvent = {
26
26
  functionName: functionName,
27
27
  payload: payload,
28
- storySession: session,
28
+ storySession: (0, quidproquo_core_1.toCrossServiceSession)(session),
29
29
  };
30
30
  const result = yield (0, executeLambdaByName_1.executeLambdaByName)(awsFunctionName, region, serviceFunctionEvent, isAsync);
31
31
  if (!result) {
@@ -8,3 +8,4 @@ export * from './logic';
8
8
  export * from './logic/cache/memoFunc';
9
9
  export * from './logic/parametersManager/getParameter';
10
10
  export * from './logic/parametersManager/getParameters';
11
+ export * from './lambdaExtensions/getLogExtensionLayerPath';
@@ -48,3 +48,6 @@ __exportStar(require("./logic"), exports);
48
48
  __exportStar(require("./logic/cache/memoFunc"), exports);
49
49
  __exportStar(require("./logic/parametersManager/getParameter"), exports);
50
50
  __exportStar(require("./logic/parametersManager/getParameters"), exports);
51
+ // Log extension layer path + handler port. NOTE: never export the extension
52
+ // entry (./lambdaExtensions/qpqLogExtension) -- it self-executes on import.
53
+ __exportStar(require("./lambdaExtensions/getLogExtensionLayerPath"), exports);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Absolute path to the built qpq-log-extension layer directory (contains the
3
+ * `extensions/` folder). Produced by scripts/buildLogExtensionLayer.mjs and
4
+ * shipped under lib/extension-layer. Used by the CDK layer construct as the
5
+ * LayerVersion asset source.
6
+ *
7
+ * Resolved relative to this compiled file: lib/<format>/lambdaExtensions/<this>
8
+ * -> ../../extension-layer.
9
+ */
10
+ export declare const getLogExtensionLayerPath: () => string;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getLogExtensionLayerPath = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ /**
9
+ * Absolute path to the built qpq-log-extension layer directory (contains the
10
+ * `extensions/` folder). Produced by scripts/buildLogExtensionLayer.mjs and
11
+ * shipped under lib/extension-layer. Used by the CDK layer construct as the
12
+ * LayerVersion asset source.
13
+ *
14
+ * Resolved relative to this compiled file: lib/<format>/lambdaExtensions/<this>
15
+ * -> ../../extension-layer.
16
+ */
17
+ const getLogExtensionLayerPath = () => {
18
+ return path_1.default.resolve(__dirname, '..', '..', 'extension-layer');
19
+ };
20
+ exports.getLogExtensionLayerPath = getLogExtensionLayerPath;
@@ -0,0 +1 @@
1
+ export declare const LOG_EXTENSION_PORT = 9009;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LOG_EXTENSION_PORT = void 0;
4
+ // Fixed localhost port the function handler uses to reach the qpq-log-extension.
5
+ // Hardcoded on both ends — the handler and the extension always ship together, so
6
+ // there's no need to pass it through an env var.
7
+ exports.LOG_EXTENSION_PORT = 9009;
@@ -4,12 +4,8 @@ exports.getApiGatewayEventHandler = void 0;
4
4
  const quidproquo_core_1 = require("quidproquo-core");
5
5
  const getActionProcessor_1 = require("../getActionProcessor");
6
6
  const getQpqLambdaRuntimeForEvent_1 = require("./helpers/getQpqLambdaRuntimeForEvent");
7
- const getApiGatewayEventHandler = (dynamicModuleLoader, qpqConfig) => (0, getQpqLambdaRuntimeForEvent_1.getQpqLambdaRuntimeForEvent)(quidproquo_core_1.QpqRuntimeType.API, (event) => {
8
- console.log('event', JSON.stringify(event, null, 2));
9
- console.log(event);
10
- return {
11
- depth: 0,
12
- context: {},
13
- };
14
- }, getActionProcessor_1.getApiGatewayApiEventEventProcessor, dynamicModuleLoader, qpqConfig);
7
+ const getApiGatewayEventHandler = (dynamicModuleLoader, qpqConfig) => (0, getQpqLambdaRuntimeForEvent_1.getQpqLambdaRuntimeForEvent)(quidproquo_core_1.QpqRuntimeType.API, () => ({
8
+ depth: 0,
9
+ context: {},
10
+ }), getActionProcessor_1.getApiGatewayApiEventEventProcessor, dynamicModuleLoader, qpqConfig);
15
11
  exports.getApiGatewayEventHandler = getApiGatewayEventHandler;
@@ -11,8 +11,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.getApiGatewayEventHandler_redirect = void 0;
13
13
  const apiGatewayEventHandler_redirect = (event, context) => __awaiter(void 0, void 0, void 0, function* () {
14
- console.log('event: ', JSON.stringify(event, null, 2));
15
- console.log('process.env: ', JSON.stringify(process.env, null, 2));
16
14
  const redirectConfig = JSON.parse(process.env.redirectConfig);
17
15
  // For direct urls ~ Go straight to the url
18
16
  let redirectUrl = redirectConfig.redirectUrl;
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.getQpqLambdaRuntimeForEvent = void 0;
13
- const quidproquo_actionprocessor_node_1 = require("quidproquo-actionprocessor-node");
13
+ const quidproquo_actionprocessor_js_1 = require("quidproquo-actionprocessor-js");
14
14
  const quidproquo_core_1 = require("quidproquo-core");
15
15
  const getActionProcessor_1 = require("../../getActionProcessor");
16
16
  const dynamicModuleLoaderWarmer_1 = require("./dynamicModuleLoaderWarmer");
@@ -28,7 +28,7 @@ const getQpqLambdaRuntimeForEvent = (runtimeType, getStorySession, getActionProc
28
28
  console.log('tick: ', JSON.stringify(event, null, 2));
29
29
  const logger = (0, logger_1.getLogger)(qpqConfig);
30
30
  const resolveStory = (0, quidproquo_core_1.createRuntime)(qpqConfig, getStorySession(event), () => __awaiter(void 0, void 0, void 0, function* () {
31
- return (Object.assign(Object.assign(Object.assign({}, (yield (0, getActionProcessor_1.getAwsActionProcessors)(qpqConfig, dynamicModuleLoader))), (yield getActionProcessorList(qpqConfig, dynamicModuleLoader))), (yield (0, quidproquo_actionprocessor_node_1.getCustomActionActionProcessor)(qpqConfig, dynamicModuleLoader))));
31
+ return (Object.assign(Object.assign(Object.assign({}, (yield (0, getActionProcessor_1.getAwsActionProcessors)(qpqConfig, dynamicModuleLoader))), (yield getActionProcessorList(qpqConfig, dynamicModuleLoader))), (yield (0, quidproquo_actionprocessor_js_1.getCustomActionActionProcessor)(qpqConfig, dynamicModuleLoader))));
32
32
  }), () => new Date().toISOString(), logger, (0, getRuntimeCorrelation_1.getRuntimeCorrelation)(qpqConfig), runtimeType, dynamicModuleLoader);
33
33
  const processEvent = () => __awaiter(void 0, void 0, void 0, function* () {
34
34
  const result = yield resolveStory(quidproquo_core_1.askProcessEvent, [event, context]);
@@ -1,5 +1,8 @@
1
1
  import { QPQConfig, QpqLogger, StoryResult } from 'quidproquo-core';
2
- export declare const storyLogger: (result: StoryResult<any>, bucketName: string, region: string) => Promise<void>;
2
+ import { S3Client } from '@aws-sdk/client-s3';
3
+ export declare const storyLogger: (result: StoryResult<any>, bucketName: string, s3Client: S3Client) => Promise<void>;
3
4
  export declare const storyLoggerFs: (result: StoryResult<any>) => Promise<void>;
4
5
  export declare const moveLogsToPerminateStorage: (bucketName: string, region: string) => Promise<void>;
6
+ export declare const getS3Logger: (qpqConfig: QPQConfig) => QpqLogger;
7
+ export declare const getS3LoggerViaExtension: (qpqConfig: QPQConfig) => QpqLogger;
5
8
  export declare const getLogger: (qpqConfig: QPQConfig) => QpqLogger;
@@ -12,18 +12,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getLogger = exports.moveLogsToPerminateStorage = exports.storyLoggerFs = exports.storyLogger = void 0;
15
+ exports.getLogger = exports.getS3LoggerViaExtension = exports.getS3Logger = exports.moveLogsToPerminateStorage = exports.storyLoggerFs = exports.storyLogger = void 0;
16
16
  const quidproquo_core_1 = require("quidproquo-core");
17
17
  const fs_1 = __importDefault(require("fs"));
18
18
  const path_1 = __importDefault(require("path"));
19
19
  const client_s3_1 = require("@aws-sdk/client-s3");
20
20
  const awsNamingUtils_1 = require("../../awsNamingUtils");
21
+ const logExtensionPort_1 = require("../../lambdaExtensions/logExtensionPort");
21
22
  const tempDirectory = '/tmp/qpqlogs';
22
23
  const quidproquo_config_aws_1 = require("quidproquo-config-aws");
23
24
  const quidproquo_core_2 = require("quidproquo-core");
24
- const storyLogger = (result, bucketName, region) => __awaiter(void 0, void 0, void 0, function* () {
25
+ const storyLogger = (result, bucketName, s3Client) => __awaiter(void 0, void 0, void 0, function* () {
25
26
  try {
26
- const s3Client = new client_s3_1.S3Client({ region });
27
27
  const commandParams = {
28
28
  Key: `${result.correlation}.json`,
29
29
  Bucket: bucketName,
@@ -54,11 +54,12 @@ const moveLogsToPerminateStorage = (bucketName, region) => __awaiter(void 0, voi
54
54
  try {
55
55
  yield fs_1.default.promises.mkdir(tempDirectory, { recursive: true });
56
56
  const files = yield fs_1.default.promises.readdir(tempDirectory);
57
+ const s3Client = new client_s3_1.S3Client({ region });
57
58
  for (const file of files) {
58
59
  const filePath = path_1.default.join(tempDirectory, file);
59
60
  const data = yield fs_1.default.promises.readFile(filePath, 'utf-8');
60
61
  const result = JSON.parse(data);
61
- yield (0, exports.storyLogger)(result, bucketName, region);
62
+ yield (0, exports.storyLogger)(result, bucketName, s3Client);
62
63
  yield fs_1.default.promises.unlink(filePath);
63
64
  console.log(`Moved log file [${file}] to S3 and deleted from temporary directory`);
64
65
  }
@@ -69,50 +70,52 @@ const moveLogsToPerminateStorage = (bucketName, region) => __awaiter(void 0, voi
69
70
  }
70
71
  });
71
72
  exports.moveLogsToPerminateStorage = moveLogsToPerminateStorage;
72
- const getLogger = (qpqConfig) => {
73
- const awsSettings = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoConfig)(qpqConfig);
74
- // If we have no log service, just return nothing.
75
- if (!awsSettings.logServiceName || awsSettings.disableLogs || process.env.storageDriveName === 'qpq-logs') {
76
- return {
77
- enableLogs: () => __awaiter(void 0, void 0, void 0, function* () { }),
78
- log: () => __awaiter(void 0, void 0, void 0, function* () { }),
79
- waitToFinishWriting: () => __awaiter(void 0, void 0, void 0, function* () { }),
80
- moveToPermanentStorage: () => __awaiter(void 0, void 0, void 0, function* () { }),
81
- };
82
- }
83
- const service = awsSettings.logServiceName;
73
+ const noopLogger = {
74
+ enableLogs: () => __awaiter(void 0, void 0, void 0, function* () { }),
75
+ log: () => { },
76
+ waitToFinishWriting: () => __awaiter(void 0, void 0, void 0, function* () { }),
77
+ moveToPermanentStorage: () => __awaiter(void 0, void 0, void 0, function* () { }),
78
+ };
79
+ // Resolves which S3 bucket (and its region) story logs go to for this config.
80
+ const resolveLogTarget = (qpqConfig) => {
81
+ const service = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoConfig)(qpqConfig).logServiceName;
84
82
  const application = quidproquo_core_1.qpqCoreUtils.getApplicationName(qpqConfig);
85
83
  const environment = quidproquo_core_1.qpqCoreUtils.getApplicationModuleEnvironment(qpqConfig);
86
84
  const feature = quidproquo_core_1.qpqCoreUtils.getApplicationModuleFeature(qpqConfig);
87
- // Workout the bucket name.
88
- const bucketName = (0, awsNamingUtils_1.getConfigRuntimeResourceName)('qpq-logs', application, service, environment, feature);
89
- // Where is this bucket?
85
+ const bucketName = (0, awsNamingUtils_1.getConfigRuntimeResourceName)(quidproquo_core_1.QPQ_LOGS_STORAGE_DRIVE_NAME, application, service, environment, feature);
90
86
  const regionForBucket = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoByDeploymentInfo)(qpqConfig, service, environment, feature, application).awsRegion;
87
+ return { bucketName, regionForBucket };
88
+ };
89
+ // Shared plumbing for both loggers: defers each log to a microtask, applies the
90
+ // disabled-correlation history filter, and tracks the promises so
91
+ // waitToFinishWriting can await them. Only `ship` (how a log reaches S3) differs.
92
+ const createBufferedLogger = (bucketName, regionForBucket, ship) => {
91
93
  const logs = [];
92
94
  let disabledLogCorrelations = [];
93
95
  return {
94
96
  enableLogs: (enable, reason, correlation) => __awaiter(void 0, void 0, void 0, function* () {
95
- if (!enable) {
96
- disabledLogCorrelations = [...disabledLogCorrelations, correlation];
97
- }
98
- else {
99
- disabledLogCorrelations = disabledLogCorrelations.filter((dlc) => dlc !== correlation);
100
- }
97
+ disabledLogCorrelations = enable
98
+ ? disabledLogCorrelations.filter((dlc) => dlc !== correlation)
99
+ : [...disabledLogCorrelations, correlation];
101
100
  }),
102
- log: (result) => __awaiter(void 0, void 0, void 0, function* () {
103
- let modifyableResult = !disabledLogCorrelations.includes(result.correlation)
104
- ? result
105
- : Object.assign(Object.assign({}, result), { history: (0, quidproquo_core_2.filterLogHistoryByActionTypes)(result.history, [
106
- quidproquo_core_1.LogActionType.Create,
107
- quidproquo_core_1.LogActionType.TemplateLiteral,
108
- quidproquo_core_1.LogActionType.DisableEventHistory,
109
- ]) });
110
- // TODO: Filter and flatten histories log histories
111
- const promise = (0, exports.storyLogger)(modifyableResult, bucketName, regionForBucket).catch((e) => {
101
+ log: (result) => {
102
+ // Defer all work (including JSON.stringify) to a microtask so the caller is not blocked.
103
+ const promise = Promise.resolve()
104
+ .then(() => {
105
+ const modifyableResult = !disabledLogCorrelations.includes(result.correlation)
106
+ ? result
107
+ : Object.assign(Object.assign({}, result), { history: (0, quidproquo_core_2.filterLogHistoryByActionTypes)(result.history, [
108
+ quidproquo_core_1.LogActionType.Create,
109
+ quidproquo_core_1.LogActionType.TemplateLiteral,
110
+ quidproquo_core_1.LogActionType.DisableEventHistory,
111
+ ]) });
112
+ return ship(modifyableResult);
113
+ })
114
+ .catch((e) => {
112
115
  console.log('Failed to log story result to S3', JSON.stringify(e, null, 2));
113
116
  });
114
117
  logs.push(promise);
115
- }),
118
+ },
116
119
  waitToFinishWriting: () => __awaiter(void 0, void 0, void 0, function* () {
117
120
  yield Promise.all(logs);
118
121
  }),
@@ -121,4 +124,59 @@ const getLogger = (qpqConfig) => {
121
124
  }),
122
125
  };
123
126
  };
127
+ // Logs straight to S3: the handler awaits the PutObject itself. Simple and fully
128
+ // durable, but the invoke waits on S3. No extension required.
129
+ const getS3Logger = (qpqConfig) => {
130
+ const { bucketName, regionForBucket } = resolveLogTarget(qpqConfig);
131
+ const s3Client = new client_s3_1.S3Client({ region: regionForBucket });
132
+ return createBufferedLogger(bucketName, regionForBucket, (result) => (0, exports.storyLogger)(result, bucketName, s3Client));
133
+ };
134
+ exports.getS3Logger = getS3Logger;
135
+ // Logs via the qpq-log-extension: a fast local HTTP POST hands the log off so the
136
+ // response is not blocked on S3. Falls back to a direct S3 write if the extension
137
+ // is unreachable, so a log is never silently dropped.
138
+ const getS3LoggerViaExtension = (qpqConfig) => {
139
+ const { bucketName, regionForBucket } = resolveLogTarget(qpqConfig);
140
+ const s3Client = new client_s3_1.S3Client({ region: regionForBucket });
141
+ const sendToExtension = (result) => __awaiter(void 0, void 0, void 0, function* () {
142
+ const res = yield fetch(`http://127.0.0.1:${logExtensionPort_1.LOG_EXTENSION_PORT}/log`, {
143
+ method: 'POST',
144
+ headers: { 'Content-Type': 'application/json' },
145
+ body: JSON.stringify({
146
+ bucketName,
147
+ region: regionForBucket,
148
+ key: `${result.correlation}.json`,
149
+ body: JSON.stringify(result),
150
+ storageClass: 'INTELLIGENT_TIERING',
151
+ }),
152
+ });
153
+ if (!res.ok) {
154
+ throw new Error(`extension responded ${res.status}`);
155
+ }
156
+ });
157
+ return createBufferedLogger(bucketName, regionForBucket, (result) => __awaiter(void 0, void 0, void 0, function* () {
158
+ try {
159
+ yield sendToExtension(result);
160
+ }
161
+ catch (error) {
162
+ console.log(`qpq-log-extension unreachable, writing [${result.correlation}] to S3 directly:`, error);
163
+ yield (0, exports.storyLogger)(result, bucketName, s3Client);
164
+ }
165
+ }));
166
+ };
167
+ exports.getS3LoggerViaExtension = getS3LoggerViaExtension;
168
+ const getLogger = (qpqConfig) => {
169
+ const awsSettings = (0, quidproquo_config_aws_1.getAwsServiceAccountInfoConfig)(qpqConfig);
170
+ // If we have no log service, just return nothing.
171
+ if (!awsSettings.logServiceName || awsSettings.disableLogs || process.env.storageDriveName === quidproquo_core_1.QPQ_LOGS_STORAGE_DRIVE_NAME) {
172
+ return noopLogger;
173
+ }
174
+ // instantLogs forces the synchronous direct-to-S3 path, bypassing the extension.
175
+ if (awsSettings.instantLogs) {
176
+ return (0, exports.getS3Logger)(qpqConfig);
177
+ }
178
+ // Use the off-response-path extension when running inside a real Lambda (where it
179
+ // is always attached); otherwise log directly to S3.
180
+ return process.env.AWS_LAMBDA_RUNTIME_API ? (0, exports.getS3LoggerViaExtension)(qpqConfig) : (0, exports.getS3Logger)(qpqConfig);
181
+ };
124
182
  exports.getLogger = getLogger;
@@ -0,0 +1,2 @@
1
+ import { AssociateSoftwareTokenResult } from 'quidproquo-core';
2
+ export declare const associateSoftwareToken: (region: string, session: string) => Promise<AssociateSoftwareTokenResult>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.associateSoftwareToken = void 0;
13
+ const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
14
+ const createAwsClient_1 = require("../createAwsClient");
15
+ // Begins TOTP enrollment for the MFA_SETUP challenge. Cognito returns the
16
+ // shared secret to seed the authenticator app and a refreshed session that must
17
+ // be used for the subsequent VerifySoftwareToken / RespondToAuthChallenge calls.
18
+ const associateSoftwareToken = (region, session) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
20
+ region,
21
+ });
22
+ const response = yield cognitoClient.send(new client_cognito_identity_provider_1.AssociateSoftwareTokenCommand({ Session: session }));
23
+ return {
24
+ secretCode: response.SecretCode || '',
25
+ session: response.Session || '',
26
+ };
27
+ });
28
+ exports.associateSoftwareToken = associateSoftwareToken;
@@ -42,7 +42,8 @@ const decodeValidJwt = (userPoolId, region, ignoreExpiration, accessToken) => __
42
42
  return decodedAccessToken;
43
43
  }
44
44
  catch (e) {
45
- console.log('Failed to decode jwt token', e);
45
+ const summary = e instanceof Error ? `${e.name}: ${e.message}` : 'unknown error';
46
+ console.log('Failed to decode jwt token:', summary);
46
47
  return null;
47
48
  }
48
49
  });
@@ -1,2 +1,6 @@
1
1
  import { UserAttributes } from 'quidproquo-core';
2
+ export declare class UserNotFoundError extends Error {
3
+ readonly code = "USER_NOT_FOUND";
4
+ constructor();
5
+ }
2
6
  export declare const getUserAttributesBySub: (userPoolId: string, region: string, sub: string) => Promise<UserAttributes>;
@@ -9,10 +9,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getUserAttributesBySub = void 0;
12
+ exports.getUserAttributesBySub = exports.UserNotFoundError = void 0;
13
13
  const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
14
14
  const createAwsClient_1 = require("../createAwsClient");
15
15
  const cognitoAttributeMap_1 = require("./cognitoAttributeMap");
16
+ // ListUsers returns an empty list rather than throwing for no match, so we throw
17
+ // our own error with a discriminable `code` for the processor's catch to map.
18
+ class UserNotFoundError extends Error {
19
+ constructor() {
20
+ super('User not found');
21
+ this.code = 'USER_NOT_FOUND';
22
+ this.name = 'UserNotFoundError';
23
+ }
24
+ }
25
+ exports.UserNotFoundError = UserNotFoundError;
16
26
  const getUserAttributesBySub = (userPoolId, region, sub) => __awaiter(void 0, void 0, void 0, function* () {
17
27
  const cognitoClient = (0, createAwsClient_1.createAwsClient)(client_cognito_identity_provider_1.CognitoIdentityProviderClient, {
18
28
  region,
@@ -23,7 +33,7 @@ const getUserAttributesBySub = (userPoolId, region, sub) => __awaiter(void 0, vo
23
33
  }));
24
34
  const [user] = (response === null || response === void 0 ? void 0 : response.Users) || [];
25
35
  if (!user) {
26
- throw new Error('User not found');
36
+ throw new UserNotFoundError();
27
37
  }
28
38
  const validAttributes = (user.Attributes || []).filter((attr) => attr.Name && attr.Value);
29
39
  return (0, cognitoAttributeMap_1.getQpqAttributesFromCognitoUserAttributes)(validAttributes);