@aws-amplify/graphql-api-construct 1.15.1-ai-streaming.0 → 1.16.0-gen2-migration-1015.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. package/.jsii +142 -69
  2. package/API.md +11 -1
  3. package/CHANGELOG.md +9 -2
  4. package/lib/amplify-dynamodb-table-wrapper.js +1 -1
  5. package/lib/amplify-graphql-api.js +1 -1
  6. package/lib/amplify-graphql-definition.js +1 -1
  7. package/lib/model-datasource-strategy-types.d.ts +19 -1
  8. package/lib/model-datasource-strategy-types.js +1 -1
  9. package/lib/sql-model-datasource-strategy.js +1 -1
  10. package/lib/types.d.ts +1 -1
  11. package/lib/types.js +1 -1
  12. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.d.ts +1 -12
  13. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.js +2 -19
  14. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/index.d.ts +2 -2
  15. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/index.js +1 -1
  16. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.d.ts +1 -11
  17. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.js +42 -176
  18. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_message_history_retriever.js +2 -2
  19. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_executor.d.ts +5 -3
  20. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_executor.js +7 -10
  21. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_response_sender.d.ts +1 -3
  22. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_response_sender.js +7 -6
  23. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/default_handler.d.ts +1 -1
  24. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/event-tools-provider/event_tools_provider.js +2 -2
  25. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/event-tools-provider/graphql_tool.d.ts +7 -7
  26. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/event-tools-provider/graphql_tool.js +2 -3
  27. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/graphql_request_executor.d.ts +1 -2
  28. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/graphql_request_executor.js +2 -4
  29. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/index.d.ts +2 -3
  30. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/index.js +2 -4
  31. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/types.d.ts +10 -11
  32. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/types.js +1 -1
  33. package/node_modules/@aws-amplify/ai-constructs/package.json +2 -9
  34. package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +4 -0
  35. package/node_modules/@aws-amplify/graphql-auth-transformer/LICENSE +201 -0
  36. package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +15 -14
  37. package/node_modules/@aws-amplify/graphql-conversation-transformer/CHANGELOG.md +1 -1
  38. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/graphql-types/message-model.d.ts +0 -2
  39. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/graphql-types/message-model.d.ts.map +1 -1
  40. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/graphql-types/message-model.js +3 -34
  41. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/graphql-types/message-model.js.map +1 -1
  42. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/invoke-lambda-resolver-fn.template.js +1 -14
  43. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/invoke-lambda-resolver.d.ts.map +1 -1
  44. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/invoke-lambda-resolver.js +0 -6
  45. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/invoke-lambda-resolver.js.map +1 -1
  46. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-prepare-handler.d.ts.map +1 -1
  47. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-prepare-handler.js +2 -3
  48. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-prepare-handler.js.map +1 -1
  49. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.d.ts +0 -1
  50. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.d.ts.map +1 -1
  51. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.js +0 -16
  52. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.js.map +1 -1
  53. package/node_modules/@aws-amplify/graphql-conversation-transformer/package.json +12 -12
  54. package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +4 -0
  55. package/node_modules/@aws-amplify/graphql-default-value-transformer/LICENSE +201 -0
  56. package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +10 -9
  57. package/node_modules/@aws-amplify/graphql-directives/CHANGELOG.md +6 -0
  58. package/node_modules/@aws-amplify/graphql-directives/LICENSE +201 -0
  59. package/node_modules/@aws-amplify/graphql-directives/lib/directives/belongs-to.d.ts.map +1 -1
  60. package/node_modules/@aws-amplify/graphql-directives/lib/directives/belongs-to.js +1 -1
  61. package/node_modules/@aws-amplify/graphql-directives/lib/directives/belongs-to.js.map +1 -1
  62. package/node_modules/@aws-amplify/graphql-directives/package.json +3 -2
  63. package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +4 -0
  64. package/node_modules/@aws-amplify/graphql-function-transformer/LICENSE +201 -0
  65. package/node_modules/@aws-amplify/graphql-function-transformer/package.json +9 -8
  66. package/node_modules/@aws-amplify/graphql-generation-transformer/CHANGELOG.md +4 -0
  67. package/node_modules/@aws-amplify/graphql-generation-transformer/LICENSE +201 -0
  68. package/node_modules/@aws-amplify/graphql-generation-transformer/package.json +9 -8
  69. package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +4 -0
  70. package/node_modules/@aws-amplify/graphql-http-transformer/LICENSE +201 -0
  71. package/node_modules/@aws-amplify/graphql-http-transformer/package.json +9 -8
  72. package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +4 -0
  73. package/node_modules/@aws-amplify/graphql-index-transformer/LICENSE +201 -0
  74. package/node_modules/@aws-amplify/graphql-index-transformer/package.json +10 -9
  75. package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +4 -0
  76. package/node_modules/@aws-amplify/graphql-maps-to-transformer/LICENSE +201 -0
  77. package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
  78. package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +13 -12
  79. package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +17 -0
  80. package/node_modules/@aws-amplify/graphql-model-transformer/LICENSE +201 -0
  81. package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.d.ts.map +1 -1
  82. package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.js +7 -2
  83. package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.js.map +1 -1
  84. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
  85. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
  86. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
  87. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.d.ts.map +1 -1
  88. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.js +12 -3
  89. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.js.map +1 -1
  90. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamodb-table-construct/index.d.ts +2 -0
  91. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamodb-table-construct/index.d.ts.map +1 -1
  92. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamodb-table-construct/index.js +4 -2
  93. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamodb-table-construct/index.js.map +1 -1
  94. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/amplify-table-manager-handler.d.ts.map +1 -1
  95. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/amplify-table-manager-handler.js +6 -1
  96. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/amplify-table-manager-handler.js.map +1 -1
  97. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.d.ts +7 -0
  98. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.d.ts.map +1 -0
  99. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.js +205 -0
  100. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.js.map +1 -0
  101. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/node_modules/.package-lock.json +13 -0
  102. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/node_modules/lodash.isequal/LICENSE +47 -0
  103. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/node_modules/lodash.isequal/README.md +18 -0
  104. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/node_modules/lodash.isequal/index.js +1848 -0
  105. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/node_modules/lodash.isequal/package.json +16 -0
  106. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/package-lock.json +21 -0
  107. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/package.json +11 -0
  108. package/node_modules/@aws-amplify/graphql-model-transformer/package.json +14 -10
  109. package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +4 -0
  110. package/node_modules/@aws-amplify/graphql-predictions-transformer/LICENSE +201 -0
  111. package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
  112. package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +9 -8
  113. package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +6 -0
  114. package/node_modules/@aws-amplify/graphql-relational-transformer/LICENSE +201 -0
  115. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-belongs-to-transformer.js +3 -0
  116. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-belongs-to-transformer.js.map +1 -1
  117. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-ddb-references-transformer.d.ts.map +1 -1
  118. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-ddb-references-transformer.js +7 -1
  119. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-ddb-references-transformer.js.map +1 -1
  120. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-ddb-references-transformer.d.ts.map +1 -1
  121. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-ddb-references-transformer.js +7 -1
  122. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-ddb-references-transformer.js.map +1 -1
  123. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/types.d.ts +1 -0
  124. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/types.d.ts.map +1 -1
  125. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.d.ts +1 -0
  126. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.d.ts.map +1 -1
  127. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.js +9 -1
  128. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.js.map +1 -1
  129. package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +11 -10
  130. package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +4 -0
  131. package/node_modules/@aws-amplify/graphql-searchable-transformer/LICENSE +201 -0
  132. package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
  133. package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +10 -9
  134. package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +4 -0
  135. package/node_modules/@aws-amplify/graphql-sql-transformer/LICENSE +201 -0
  136. package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +10 -9
  137. package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +1 -1
  138. package/node_modules/@aws-amplify/graphql-transformer/package.json +18 -18
  139. package/node_modules/@aws-amplify/graphql-transformer-core/API.md +4 -0
  140. package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +11 -0
  141. package/node_modules/@aws-amplify/graphql-transformer-core/LICENSE +201 -0
  142. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.d.ts +1 -1
  143. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.d.ts.map +1 -1
  144. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.js +3 -2
  145. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.js.map +1 -1
  146. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.d.ts +2 -1
  147. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.d.ts.map +1 -1
  148. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.js +9 -1
  149. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.js.map +1 -1
  150. package/node_modules/@aws-amplify/graphql-transformer-core/package.json +7 -6
  151. package/node_modules/@aws-amplify/graphql-transformer-interfaces/API.md +11 -1
  152. package/node_modules/@aws-amplify/graphql-transformer-interfaces/CHANGELOG.md +11 -0
  153. package/node_modules/@aws-amplify/graphql-transformer-interfaces/LICENSE +201 -0
  154. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.d.ts +6 -1
  155. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.d.ts.map +1 -1
  156. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.js.map +1 -1
  157. package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +3 -2
  158. package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/model-datasource/types.ts +10 -0
  159. package/node_modules/@aws-amplify/graphql-transformer-interfaces/tsconfig.tsbuildinfo +1 -1
  160. package/node_modules/graphql-mapping-template/CHANGELOG.md +4 -0
  161. package/node_modules/graphql-mapping-template/LICENSE +201 -0
  162. package/node_modules/graphql-mapping-template/package.json +3 -2
  163. package/node_modules/graphql-transformer-common/CHANGELOG.md +10 -0
  164. package/node_modules/graphql-transformer-common/LICENSE +201 -0
  165. package/node_modules/graphql-transformer-common/package.json +4 -3
  166. package/package.json +23 -23
  167. package/src/model-datasource-strategy-types.ts +21 -0
  168. package/src/types.ts +1 -1
  169. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_streaming_response_sender.d.ts +0 -33
  170. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_streaming_response_sender.js +0 -38
  171. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/executable_tool_factory.d.ts +0 -7
  172. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/executable_tool_factory.js +0 -16
  173. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/README.md +0 -4
  174. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/ai/conversation/index.d.ts +0 -23
  175. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/ai/conversation/index.js +0 -10
  176. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/ai/conversation/v1.d.ts +0 -22
  177. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/ai/conversation/v1.js +0 -11
  178. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/auth/index.d.ts +0 -113
  179. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/auth/index.js +0 -10
  180. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/auth/v1.d.ts +0 -112
  181. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/auth/v1.js +0 -30
  182. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/custom/index.d.ts +0 -23
  183. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/custom/index.js +0 -10
  184. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/custom/v1.d.ts +0 -22
  185. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/custom/v1.js +0 -11
  186. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/function/index.d.ts +0 -23
  187. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/function/index.js +0 -10
  188. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/function/v1.d.ts +0 -22
  189. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/function/v1.js +0 -11
  190. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/graphql/index.d.ts +0 -59
  191. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/graphql/index.js +0 -12
  192. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/graphql/v1.d.ts +0 -59
  193. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/graphql/v1.js +0 -25
  194. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/index.d.ts +0 -508
  195. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/index.js +0 -112
  196. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/platform/index.d.ts +0 -2
  197. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/platform/index.js +0 -18
  198. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/platform/stack_metadata_schemas.d.ts +0 -42
  199. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/platform/stack_metadata_schemas.js +0 -22
  200. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/stack/index.d.ts +0 -28
  201. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/stack/index.js +0 -10
  202. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/stack/v1.d.ts +0 -27
  203. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/stack/v1.js +0 -12
  204. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/storage/index.d.ts +0 -33
  205. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/storage/index.js +0 -10
  206. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/storage/v1.d.ts +0 -32
  207. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/lib/storage/v1.js +0 -33
  208. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas/package.json +0 -27
  209. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-reduce-chunks-resolver-fn.template.js +0 -101
  210. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-reduce-chunks-resolver.d.ts +0 -4
  211. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-reduce-chunks-resolver.d.ts.map +0 -1
  212. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-reduce-chunks-resolver.js +0 -25
  213. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-reduce-chunks-resolver.js.map +0 -1
  214. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-resolver-fn.template.js +0 -121
  215. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-resolver.d.ts +0 -4
  216. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-resolver.d.ts.map +0 -1
  217. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-resolver.js +0 -25
  218. package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/resolvers/assistant-streaming-mutation-resolver.js.map +0 -1
@@ -4,7 +4,6 @@ exports.BedrockConverseAdapter = void 0;
4
4
  const client_bedrock_runtime_1 = require("@aws-sdk/client-bedrock-runtime");
5
5
  const event_tools_provider_1 = require("./event-tools-provider");
6
6
  const conversation_message_history_retriever_1 = require("./conversation_message_history_retriever");
7
- const conversation_turn_streaming_response_sender_1 = require("./conversation_turn_streaming_response_sender");
8
7
  /**
9
8
  * This class is responsible for interacting with Bedrock Converse API
10
9
  * in order to produce final response that can be sent back to caller.
@@ -13,26 +12,18 @@ class BedrockConverseAdapter {
13
12
  /**
14
13
  * Creates Bedrock Converse Adapter.
15
14
  */
16
- constructor(event, additionalTools, bedrockClient = new client_bedrock_runtime_1.BedrockRuntimeClient({ region: event.modelConfiguration.region }), eventToolsProvider = new event_tools_provider_1.ConversationTurnEventToolsProvider(event), messageHistoryRetriever = new conversation_message_history_retriever_1.ConversationMessageHistoryRetriever(event), streamingResponseSender = new conversation_turn_streaming_response_sender_1.ConversationTurnStreamingResponseSender(event), logger = console) {
15
+ constructor(event, additionalTools, bedrockClient = new client_bedrock_runtime_1.BedrockRuntimeClient({ region: event.modelConfiguration.region }), eventToolsProvider = new event_tools_provider_1.ConversationTurnEventToolsProvider(event), messageHistoryRetriever = new conversation_message_history_retriever_1.ConversationMessageHistoryRetriever(event)) {
17
16
  var _a, _b;
18
17
  this.event = event;
19
18
  this.bedrockClient = bedrockClient;
20
19
  this.messageHistoryRetriever = messageHistoryRetriever;
21
- this.streamingResponseSender = streamingResponseSender;
22
- this.logger = logger;
23
20
  this.executableToolByName = new Map();
24
21
  this.clientToolByName = new Map();
25
22
  this.askBedrock = async () => {
26
- var _a, _b;
23
+ var _a, _b, _c, _d, _e, _f, _g, _h;
27
24
  const { modelId, systemPrompt, inferenceConfiguration } = this.event.modelConfiguration;
28
25
  const messages = await this.getEventMessagesAsBedrockMessages();
29
26
  let bedrockResponse;
30
- let assistantMessage;
31
- let stopReason;
32
- const chunkIndexTracker = {
33
- blockIndex: 0,
34
- lastBlockIndex: 0,
35
- };
36
27
  do {
37
28
  const toolConfig = this.createToolConfiguration();
38
29
  const converseCommandInput = {
@@ -42,22 +33,12 @@ class BedrockConverseAdapter {
42
33
  inferenceConfig: inferenceConfiguration,
43
34
  toolConfig,
44
35
  };
45
- this.logger.info('Sending Bedrock Converse request');
46
- this.logger.debug('Bedrock Converse request:', converseCommandInput);
47
- bedrockResponse = await this.bedrockClient.send(new client_bedrock_runtime_1.ConverseStreamCommand(converseCommandInput));
48
- this.logger.info(`Received Bedrock Converse response, requestId=${bedrockResponse.$metadata.requestId}`);
49
- this.logger.debug('Bedrock Converse response metadata:', bedrockResponse.$metadata);
50
- if (!bedrockResponse.stream) {
51
- throw new Error('Bedrock response is missing stream');
36
+ bedrockResponse = await this.bedrockClient.send(new client_bedrock_runtime_1.ConverseCommand(converseCommandInput));
37
+ if ((_a = bedrockResponse.output) === null || _a === void 0 ? void 0 : _a.message) {
38
+ messages.push((_b = bedrockResponse.output) === null || _b === void 0 ? void 0 : _b.message);
52
39
  }
53
- const streamingResult = await this.streamAssistantMessage(bedrockResponse.stream, chunkIndexTracker);
54
- assistantMessage = streamingResult.assistantMessage;
55
- stopReason = streamingResult.stopReason;
56
- this.logger.info(`Bedrock Converse response stopReason=${stopReason}`);
57
- this.logger.debug('Bedrock Converse assistant message:', assistantMessage);
58
- messages.push(assistantMessage);
59
- if (stopReason === 'tool_use') {
60
- const responseContentBlocks = (_a = assistantMessage.content) !== null && _a !== void 0 ? _a : [];
40
+ if (bedrockResponse.stopReason === 'tool_use') {
41
+ const responseContentBlocks = (_e = (_d = (_c = bedrockResponse.output) === null || _c === void 0 ? void 0 : _c.message) === null || _d === void 0 ? void 0 : _d.content) !== null && _e !== void 0 ? _e : [];
61
42
  const toolUseBlocks = responseContentBlocks.filter((block) => 'toolUse' in block);
62
43
  const clientToolUseBlocks = responseContentBlocks.filter((block) => {
63
44
  var _a, _b;
@@ -67,128 +48,16 @@ class BedrockConverseAdapter {
67
48
  if (clientToolUseBlocks.length > 0) {
68
49
  // For now if any of client tools is used we ignore executable tools
69
50
  // and propagate result back to client.
70
- await this.streamingResponseSender.sendResponseChunk({
71
- conversationId: this.event.conversationId,
72
- associatedUserMessageId: this.event.currentMessageId,
73
- contentBlockIndex: chunkIndexTracker.lastBlockIndex,
74
- stopReason: stopReason,
75
- });
76
51
  return clientToolUseBlocks;
77
52
  }
78
- const toolResponseContentBlocks = [];
79
53
  for (const responseContentBlock of toolUseBlocks) {
80
54
  const toolUseBlock = responseContentBlock;
81
- const toolResultContentBlock = await this.executeTool(toolUseBlock);
82
- toolResponseContentBlocks.push(toolResultContentBlock);
83
- }
84
- messages.push({
85
- role: 'user',
86
- content: toolResponseContentBlocks,
87
- });
88
- }
89
- } while (stopReason === 'tool_use');
90
- await this.streamingResponseSender.sendResponseChunk({
91
- conversationId: this.event.conversationId,
92
- associatedUserMessageId: this.event.currentMessageId,
93
- contentBlockIndex: chunkIndexTracker.lastBlockIndex,
94
- stopReason: stopReason,
95
- });
96
- return (_b = assistantMessage.content) !== null && _b !== void 0 ? _b : [];
97
- };
98
- /**
99
- * Handles bedrock response stream.
100
- *
101
- * See: https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use-examples.html
102
- */
103
- this.streamAssistantMessage = async (stream, chunkIndexTracker) => {
104
- var _a, _b, _c, _d, _e, _f, _g;
105
- let stopReason = '';
106
- let toolUseBlock;
107
- let text = '';
108
- let toolUseInput = '';
109
- let clientToolsRequested = false;
110
- // keep our own indexing for blocks and chunks since we stream subset of these upstream.
111
- let blockDeltaIndex = 0;
112
- let lastBlockDeltaIndex = 0;
113
- const assistantMessage = {
114
- role: undefined,
115
- content: [],
116
- };
117
- for await (const chunk of stream) {
118
- if (chunk.messageStart) {
119
- assistantMessage.role = chunk.messageStart.role;
120
- }
121
- else if (chunk.contentBlockStart) {
122
- blockDeltaIndex = 0;
123
- lastBlockDeltaIndex = 0;
124
- if ((_a = chunk.contentBlockStart.start) === null || _a === void 0 ? void 0 : _a.toolUse) {
125
- toolUseBlock = {
126
- toolUse: {
127
- ...(_b = chunk.contentBlockStart.start) === null || _b === void 0 ? void 0 : _b.toolUse,
128
- input: undefined,
129
- },
130
- };
131
- }
132
- }
133
- else if (chunk.contentBlockDelta) {
134
- if ((_c = chunk.contentBlockDelta.delta) === null || _c === void 0 ? void 0 : _c.toolUse) {
135
- if (!chunk.contentBlockDelta.delta.toolUse.input) {
136
- toolUseInput = '';
137
- }
138
- toolUseInput += chunk.contentBlockDelta.delta.toolUse.input;
139
- }
140
- else if ((_d = chunk.contentBlockDelta.delta) === null || _d === void 0 ? void 0 : _d.text) {
141
- text += chunk.contentBlockDelta.delta.text;
142
- await this.streamingResponseSender.sendResponseChunk({
143
- conversationId: this.event.conversationId,
144
- associatedUserMessageId: this.event.currentMessageId,
145
- contentBlockText: chunk.contentBlockDelta.delta.text,
146
- contentBlockIndex: chunkIndexTracker.blockIndex,
147
- contentBlockDeltaIndex: blockDeltaIndex,
148
- });
149
- lastBlockDeltaIndex = blockDeltaIndex;
150
- blockDeltaIndex++;
55
+ const toolMessage = await this.executeTool(toolUseBlock);
56
+ messages.push(toolMessage);
151
57
  }
152
58
  }
153
- else if (chunk.contentBlockStop) {
154
- if (toolUseBlock) {
155
- toolUseBlock.toolUse.input = JSON.parse(toolUseInput);
156
- (_e = assistantMessage.content) === null || _e === void 0 ? void 0 : _e.push(toolUseBlock);
157
- if (toolUseBlock.toolUse.name &&
158
- this.clientToolByName.has(toolUseBlock.toolUse.name)) {
159
- clientToolsRequested = true;
160
- await this.streamingResponseSender.sendResponseChunk({
161
- conversationId: this.event.conversationId,
162
- associatedUserMessageId: this.event.currentMessageId,
163
- contentBlockIndex: chunkIndexTracker.blockIndex,
164
- contentBlockToolUse: JSON.stringify(toolUseBlock),
165
- });
166
- chunkIndexTracker.lastBlockIndex = chunkIndexTracker.blockIndex;
167
- chunkIndexTracker.blockIndex++;
168
- }
169
- toolUseBlock = undefined;
170
- toolUseInput = '';
171
- }
172
- else {
173
- (_f = assistantMessage.content) === null || _f === void 0 ? void 0 : _f.push({
174
- text,
175
- });
176
- await this.streamingResponseSender.sendResponseChunk({
177
- conversationId: this.event.conversationId,
178
- associatedUserMessageId: this.event.currentMessageId,
179
- contentBlockIndex: chunkIndexTracker.blockIndex,
180
- contentBlockDoneAtIndex: lastBlockDeltaIndex,
181
- });
182
- text = '';
183
- chunkIndexTracker.lastBlockIndex = chunkIndexTracker.blockIndex;
184
- chunkIndexTracker.blockIndex++;
185
- }
186
- }
187
- else if (chunk.messageStop) {
188
- stopReason = (_g = chunk.messageStop.stopReason) !== null && _g !== void 0 ? _g : '';
189
- }
190
- }
191
- return { assistantMessage, stopReason, clientToolsRequested };
59
+ } while (bedrockResponse.stopReason === 'tool_use');
60
+ return (_h = (_g = (_f = bedrockResponse.output) === null || _f === void 0 ? void 0 : _f.message) === null || _g === void 0 ? void 0 : _g.content) !== null && _h !== void 0 ? _h : [];
192
61
  };
193
62
  /**
194
63
  * Maps event messages to Bedrock types.
@@ -234,8 +103,6 @@ class BedrockConverseAdapter {
234
103
  toolSpec: {
235
104
  name: t.name,
236
105
  description: t.description,
237
- // We have to cast to bedrock type as we're using different types to describe JSON schema in our API.
238
- // These types are runtime compatible.
239
106
  inputSchema: t.inputSchema,
240
107
  },
241
108
  };
@@ -251,50 +118,49 @@ class BedrockConverseAdapter {
251
118
  throw Error(`Bedrock tool use response contains unknown tool '${toolUseBlock.toolUse.name}'`);
252
119
  }
253
120
  try {
254
- this.logger.info(`Invoking tool ${tool.name}`);
255
- this.logger.debug('Tool input:', toolUseBlock.toolUse.input);
256
121
  const toolResponse = await tool.execute(toolUseBlock.toolUse.input);
257
- this.logger.info(`Received response from ${tool.name} tool`);
258
- this.logger.debug(toolResponse);
259
122
  return {
260
- toolResult: {
261
- toolUseId: toolUseBlock.toolUse.toolUseId,
262
- content: [toolResponse],
263
- status: 'success',
264
- },
123
+ role: 'user',
124
+ content: [
125
+ {
126
+ toolResult: {
127
+ toolUseId: toolUseBlock.toolUse.toolUseId,
128
+ content: [toolResponse],
129
+ status: 'success',
130
+ },
131
+ },
132
+ ],
265
133
  };
266
134
  }
267
135
  catch (e) {
268
136
  if (e instanceof Error) {
269
137
  return {
270
- toolResult: {
271
- toolUseId: toolUseBlock.toolUse.toolUseId,
272
- content: [{ text: e.toString() }],
273
- status: 'error',
274
- },
138
+ role: 'user',
139
+ content: [
140
+ {
141
+ toolResult: {
142
+ toolUseId: toolUseBlock.toolUse.toolUseId,
143
+ content: [{ text: e.toString() }],
144
+ status: 'error',
145
+ },
146
+ },
147
+ ],
275
148
  };
276
149
  }
277
150
  return {
278
- toolResult: {
279
- toolUseId: toolUseBlock.toolUse.toolUseId,
280
- content: [{ text: 'unknown error occurred' }],
281
- status: 'error',
282
- },
151
+ role: 'user',
152
+ content: [
153
+ {
154
+ toolResult: {
155
+ toolUseId: toolUseBlock.toolUse.toolUseId,
156
+ content: [{ text: 'unknown error occurred' }],
157
+ status: 'error',
158
+ },
159
+ },
160
+ ],
283
161
  };
284
162
  }
285
163
  };
286
- if (event.request.headers['x-amz-user-agent']) {
287
- this.bedrockClient.middlewareStack.add((next) => (args) => {
288
- // @ts-expect-error Request is typed as unknown.
289
- // But this is recommended way to alter headers per https://github.com/aws/aws-sdk-js-v3/blob/main/README.md.
290
- args.request.headers['x-amz-user-agent'] =
291
- event.request.headers['x-amz-user-agent'];
292
- return next(args);
293
- }, {
294
- step: 'build',
295
- name: 'amplify-user-agent-injector',
296
- });
297
- }
298
164
  this.executableTools = [
299
165
  ...eventToolsProvider.getEventTools(),
300
166
  ...additionalTools,
@@ -325,4 +191,4 @@ class BedrockConverseAdapter {
325
191
  }
326
192
  }
327
193
  exports.BedrockConverseAdapter = BedrockConverseAdapter;
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFXeUM7QUFNekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUMvRiwrR0FBd0c7QUFPeEc7OztHQUdHO0FBQ0gsTUFBYSxzQkFBc0I7SUFRakM7O09BRUc7SUFDSCxZQUNtQixLQUE0QixFQUM3QyxlQUFzQyxFQUNyQixnQkFBc0MsSUFBSSw2Q0FBb0IsQ0FDN0UsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUM1QyxFQUNELGtCQUFrQixHQUFHLElBQUkseURBQWtDLENBQUMsS0FBSyxDQUFDLEVBQ2pELDBCQUEwQixJQUFJLDRFQUFtQyxDQUNoRixLQUFLLENBQ04sRUFDZ0IsMEJBQTBCLElBQUkscUZBQXVDLENBQ3BGLEtBQUssQ0FDTixFQUNnQixTQUFTLE9BQU87O1FBWmhCLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBRTVCLGtCQUFhLEdBQWIsYUFBYSxDQUU3QjtRQUVnQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBRXZDO1FBQ2dCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FFdkM7UUFDZ0IsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQXBCbEIseUJBQW9CLEdBQ25DLElBQUksR0FBRyxFQUFFLENBQUM7UUFDSyxxQkFBZ0IsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWtFM0UsZUFBVSxHQUFHLEtBQUssSUFBNkIsRUFBRTs7WUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsR0FDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUVoQyxNQUFNLFFBQVEsR0FDWixNQUFNLElBQUksQ0FBQyxpQ0FB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Q3JDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLGtEQUFrRDtnQkFDaEQsR0FBRyxjQUFjO2FBQ2xCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2hCLENBQUM7U0FDSDtJQUNILENBQUM7Q0FzU0Y7QUE1V0Qsd0RBNFdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmVkcm9ja1J1bnRpbWVDbGllbnQsXG4gIENvbnRlbnRCbG9jayxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kLFxuICBDb252ZXJzZVN0cmVhbUNvbW1hbmRJbnB1dCxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kT3V0cHV0LFxuICBDb252ZXJzZVN0cmVhbU91dHB1dCxcbiAgTWVzc2FnZSxcbiAgVG9vbCxcbiAgVG9vbENvbmZpZ3VyYXRpb24sXG4gIFRvb2xJbnB1dFNjaGVtYSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQge1xuICBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gIEV4ZWN1dGFibGVUb29sLFxuICBUb29sRGVmaW5pdGlvbixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyIH0gZnJvbSAnLi9ldmVudC10b29scy1wcm92aWRlcic7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25NZXNzYWdlSGlzdG9yeVJldHJpZXZlciB9IGZyb20gJy4vY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXInO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVHVyblN0cmVhbWluZ1Jlc3BvbnNlU2VuZGVyIH0gZnJvbSAnLi9jb252ZXJzYXRpb25fdHVybl9zdHJlYW1pbmdfcmVzcG9uc2Vfc2VuZGVyJztcblxudHlwZSBDaHVua0luZGV4VHJhY2tlciA9IHtcbiAgYmxvY2tJbmRleDogbnVtYmVyO1xuICBsYXN0QmxvY2tJbmRleDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmFjdGluZyB3aXRoIEJlZHJvY2sgQ29udmVyc2UgQVBJXG4gKiBpbiBvcmRlciB0byBwcm9kdWNlIGZpbmFsIHJlc3BvbnNlIHRoYXQgY2FuIGJlIHNlbnQgYmFjayB0byBjYWxsZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxUb29sczogQXJyYXk8VG9vbERlZmluaXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGFibGVUb29sczogQXJyYXk8RXhlY3V0YWJsZVRvb2w+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xzOiBBcnJheTxUb29sRGVmaW5pdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0YWJsZVRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIEV4ZWN1dGFibGVUb29sPiA9XG4gICAgbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIFRvb2xEZWZpbml0aW9uPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBCZWRyb2NrIENvbnZlcnNlIEFkYXB0ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgYWRkaXRpb25hbFRvb2xzOiBBcnJheTxFeGVjdXRhYmxlVG9vbD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWRyb2NrQ2xpZW50OiBCZWRyb2NrUnVudGltZUNsaWVudCA9IG5ldyBCZWRyb2NrUnVudGltZUNsaWVudChcbiAgICAgIHsgcmVnaW9uOiBldmVudC5tb2RlbENvbmZpZ3VyYXRpb24ucmVnaW9uIH1cbiAgICApLFxuICAgIGV2ZW50VG9vbHNQcm92aWRlciA9IG5ldyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyKGV2ZW50KSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyID0gbmV3IENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyKFxuICAgICAgZXZlbnRcbiAgICApLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtaW5nUmVzcG9uc2VTZW5kZXIgPSBuZXcgQ29udmVyc2F0aW9uVHVyblN0cmVhbWluZ1Jlc3BvbnNlU2VuZGVyKFxuICAgICAgZXZlbnRcbiAgICApLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gY29uc29sZVxuICApIHtcbiAgICBpZiAoZXZlbnQucmVxdWVzdC5oZWFkZXJzWyd4LWFtei11c2VyLWFnZW50J10pIHtcbiAgICAgIHRoaXMuYmVkcm9ja0NsaWVudC5taWRkbGV3YXJlU3RhY2suYWRkKFxuICAgICAgICAobmV4dCkgPT4gKGFyZ3MpID0+IHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFJlcXVlc3QgaXMgdHlwZWQgYXMgdW5rbm93bi5cbiAgICAgICAgICAvLyBCdXQgdGhpcyBpcyByZWNvbW1lbmRlZCB3YXkgdG8gYWx0ZXIgaGVhZGVycyBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzLXYzL2Jsb2IvbWFpbi9SRUFETUUubWQuXG4gICAgICAgICAgYXJncy5yZXF1ZXN0LmhlYWRlcnNbJ3gtYW16LXVzZXItYWdlbnQnXSA9XG4gICAgICAgICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnNbJ3gtYW16LXVzZXItYWdlbnQnXTtcbiAgICAgICAgICByZXR1cm4gbmV4dChhcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0ZXA6ICdidWlsZCcsXG4gICAgICAgICAgbmFtZTogJ2FtcGxpZnktdXNlci1hZ2VudC1pbmplY3RvcicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVRvb2xzID0gW1xuICAgICAgLi4uZXZlbnRUb29sc1Byb3ZpZGVyLmdldEV2ZW50VG9vbHMoKSxcbiAgICAgIC4uLmFkZGl0aW9uYWxUb29scyxcbiAgICBdO1xuICAgIHRoaXMuY2xpZW50VG9vbHMgPSB0aGlzLmV2ZW50LnRvb2xzQ29uZmlndXJhdGlvbj8uY2xpZW50VG9vbHMgPz8gW107XG4gICAgdGhpcy5hbGxUb29scyA9IFsuLi50aGlzLmV4ZWN1dGFibGVUb29scywgLi4udGhpcy5jbGllbnRUb29sc107XG4gICAgY29uc3QgZHVwbGljYXRlVG9vbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICB0aGlzLmV4ZWN1dGFibGVUb29scy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5oYXModC5uYW1lKSkge1xuICAgICAgICBkdXBsaWNhdGVUb29scy5hZGQodC5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuc2V0KHQubmFtZSwgdCk7XG4gICAgfSk7XG4gICAgdGhpcy5jbGllbnRUb29scy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5oYXModC5uYW1lKSkge1xuICAgICAgICBkdXBsaWNhdGVUb29scy5hZGQodC5uYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNsaWVudFRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudFRvb2xCeU5hbWUuc2V0KHQubmFtZSwgdCk7XG4gICAgfSk7XG4gICAgaWYgKGR1cGxpY2F0ZVRvb2xzLnNpemUgPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUb29scyBtdXN0IGhhdmUgdW5pcXVlIG5hbWVzLiBEdXBsaWNhdGUgdG9vbHM6ICR7W1xuICAgICAgICAgIC4uLmR1cGxpY2F0ZVRvb2xzLFxuICAgICAgICBdLmpvaW4oJywgJyl9LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXNrQmVkcm9jayA9IGFzeW5jICgpOiBQcm9taXNlPENvbnRlbnRCbG9ja1tdPiA9PiB7XG4gICAgY29uc3QgeyBtb2RlbElkLCBzeXN0ZW1Qcm9tcHQsIGluZmVyZW5jZUNvbmZpZ3VyYXRpb24gfSA9XG4gICAgICB0aGlzLmV2ZW50Lm1vZGVsQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPiA9XG4gICAgICBhd2FpdCB0aGlzLmdldEV2ZW50TWVzc2FnZXNBc0JlZHJvY2tNZXNzYWdlcygpO1xuXG4gICAgbGV0IGJlZHJvY2tSZXNwb25zZTogQ29udmVyc2VTdHJlYW1Db21tYW5kT3V0cHV0O1xuICAgIGxldCBhc3Npc3RhbnRNZXNzYWdlOiBNZXNzYWdlO1xuICAgIGxldCBzdG9wUmVhc29uOiBzdHJpbmc7XG4gICAgY29uc3QgY2h1bmtJbmRleFRyYWNrZXI6IENodW5rSW5kZXhUcmFja2VyID0ge1xuICAgICAgYmxvY2tJbmRleDogMCxcbiAgICAgIGxhc3RCbG9ja0luZGV4OiAwLFxuICAgIH07XG4gICAgZG8ge1xuICAgICAgY29uc3QgdG9vbENvbmZpZyA9IHRoaXMuY3JlYXRlVG9vbENvbmZpZ3VyYXRpb24oKTtcbiAgICAgIGNvbnN0IGNvbnZlcnNlQ29tbWFuZElucHV0OiBDb252ZXJzZVN0cmVhbUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgbW9kZWxJZCxcbiAgICAgICAgbWVzc2FnZXM6IFsuLi5tZXNzYWdlc10sXG4gICAgICAgIHN5c3RlbTogW3sgdGV4dDogc3lzdGVtUHJvbXB0IH1dLFxuICAgICAgICBpbmZlcmVuY2VDb25maWc6IGluZmVyZW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHRvb2xDb25maWcsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU2VuZGluZyBCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3QnKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3Q6JywgY29udmVyc2VDb21tYW5kSW5wdXQpO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZVN0cmVhbUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2UsIHJlcXVlc3RJZD0ke2JlZHJvY2tSZXNwb25zZS4kbWV0YWRhdGEucmVxdWVzdElkfWBcbiAgICAgICk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ0JlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2UgbWV0YWRhdGE6JyxcbiAgICAgICAgYmVkcm9ja1Jlc3BvbnNlLiRtZXRhZGF0YVxuICAgICAgKTtcbiAgICAgIGlmICghYmVkcm9ja1Jlc3BvbnNlLnN0cmVhbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JlZHJvY2sgcmVzcG9uc2UgaXMgbWlzc2luZyBzdHJlYW0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUmVzdWx0ID0gYXdhaXQgdGhpcy5zdHJlYW1Bc3Npc3RhbnRNZXNzYWdlKFxuICAgICAgICBiZWRyb2NrUmVzcG9uc2Uuc3RyZWFtLFxuICAgICAgICBjaHVua0luZGV4VHJhY2tlclxuICAgICAgKTtcbiAgICAgIGFzc2lzdGFudE1lc3NhZ2UgPSBzdHJlYW1pbmdSZXN1bHQuYXNzaXN0YW50TWVzc2FnZTtcbiAgICAgIHN0b3BSZWFzb24gPSBzdHJlYW1pbmdSZXN1bHQuc3RvcFJlYXNvbjtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEJlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2Ugc3RvcFJlYXNvbj0ke3N0b3BSZWFzb259YCk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ0JlZHJvY2sgQ29udmVyc2UgYXNzaXN0YW50IG1lc3NhZ2U6JyxcbiAgICAgICAgYXNzaXN0YW50TWVzc2FnZVxuICAgICAgKTtcblxuICAgICAgbWVzc2FnZXMucHVzaChhc3Npc3RhbnRNZXNzYWdlKTtcblxuICAgICAgaWYgKHN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50QmxvY2tzID0gYXNzaXN0YW50TWVzc2FnZS5jb250ZW50ID8/IFtdO1xuICAgICAgICBjb25zdCB0b29sVXNlQmxvY2tzID0gcmVzcG9uc2VDb250ZW50QmxvY2tzLmZpbHRlcihcbiAgICAgICAgICAoYmxvY2spID0+ICd0b29sVXNlJyBpbiBibG9ja1xuICAgICAgICApIGFzIEFycmF5PENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyPjtcbiAgICAgICAgY29uc3QgY2xpZW50VG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PlxuICAgICAgICAgICAgYmxvY2sudG9vbFVzZT8ubmFtZSAmJlxuICAgICAgICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyhibG9jay50b29sVXNlPy5uYW1lKVxuICAgICAgICApO1xuICAgICAgICBpZiAoY2xpZW50VG9vbFVzZUJsb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRm9yIG5vdyBpZiBhbnkgb2YgY2xpZW50IHRvb2xzIGlzIHVzZWQgd2UgaWdub3JlIGV4ZWN1dGFibGUgdG9vbHNcbiAgICAgICAgICAvLyBhbmQgcHJvcGFnYXRlIHJlc3VsdCBiYWNrIHRvIGNsaWVudC5cbiAgICAgICAgICBhd2FpdCB0aGlzLnN0cmVhbWluZ1Jlc3BvbnNlU2VuZGVyLnNlbmRSZXNwb25zZUNodW5rKHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBjaHVua0luZGV4VHJhY2tlci5sYXN0QmxvY2tJbmRleCxcbiAgICAgICAgICAgIHN0b3BSZWFzb246IHN0b3BSZWFzb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNsaWVudFRvb2xVc2VCbG9ja3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrczogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrIG9mIHRvb2xVc2VCbG9ja3MpIHtcbiAgICAgICAgICBjb25zdCB0b29sVXNlQmxvY2sgPVxuICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50QmxvY2sgYXMgQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI7XG4gICAgICAgICAgY29uc3QgdG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRvb2wodG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLnB1c2godG9vbFJlc3VsdENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpO1xuXG4gICAgYXdhaXQgdGhpcy5zdHJlYW1pbmdSZXNwb25zZVNlbmRlci5zZW5kUmVzcG9uc2VDaHVuayh7XG4gICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICBjb250ZW50QmxvY2tJbmRleDogY2h1bmtJbmRleFRyYWNrZXIubGFzdEJsb2NrSW5kZXgsXG4gICAgICBzdG9wUmVhc29uOiBzdG9wUmVhc29uLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFzc2lzdGFudE1lc3NhZ2UuY29udGVudCA/PyBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyBiZWRyb2NrIHJlc3BvbnNlIHN0cmVhbS5cbiAgICpcbiAgICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL3Rvb2wtdXNlLWV4YW1wbGVzLmh0bWxcbiAgICovXG4gIHByaXZhdGUgc3RyZWFtQXNzaXN0YW50TWVzc2FnZSA9IGFzeW5jIChcbiAgICBzdHJlYW06IEFzeW5jSXRlcmFibGU8Q29udmVyc2VTdHJlYW1PdXRwdXQ+LFxuICAgIGNodW5rSW5kZXhUcmFja2VyOiBDaHVua0luZGV4VHJhY2tlclxuICApID0+IHtcbiAgICBsZXQgc3RvcFJlYXNvbiA9ICcnO1xuICAgIGxldCB0b29sVXNlQmxvY2s6IENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgICBsZXQgdG9vbFVzZUlucHV0OiBzdHJpbmcgPSAnJztcbiAgICBsZXQgY2xpZW50VG9vbHNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAvLyBrZWVwIG91ciBvd24gaW5kZXhpbmcgZm9yIGJsb2NrcyBhbmQgY2h1bmtzIHNpbmNlIHdlIHN0cmVhbSBzdWJzZXQgb2YgdGhlc2UgdXBzdHJlYW0uXG4gICAgbGV0IGJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgbGV0IGxhc3RCbG9ja0RlbHRhSW5kZXggPSAwO1xuICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICByb2xlOiB1bmRlZmluZWQsXG4gICAgICBjb250ZW50OiBbXSxcbiAgICB9O1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICBpZiAoY2h1bmsubWVzc2FnZVN0YXJ0KSB7XG4gICAgICAgIGFzc2lzdGFudE1lc3NhZ2Uucm9sZSA9IGNodW5rLm1lc3NhZ2VTdGFydC5yb2xlO1xuICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tTdGFydCkge1xuICAgICAgICBibG9ja0RlbHRhSW5kZXggPSAwO1xuICAgICAgICBsYXN0QmxvY2tEZWx0YUluZGV4ID0gMDtcbiAgICAgICAgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0LnN0YXJ0Py50b29sVXNlKSB7XG4gICAgICAgICAgdG9vbFVzZUJsb2NrID0ge1xuICAgICAgICAgICAgdG9vbFVzZToge1xuICAgICAgICAgICAgICAuLi5jaHVuay5jb250ZW50QmxvY2tTdGFydC5zdGFydD8udG9vbFVzZSxcbiAgICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YSkge1xuICAgICAgICBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGE/LnRvb2xVc2UpIHtcbiAgICAgICAgICBpZiAoIWNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRvb2xVc2UuaW5wdXQpIHtcbiAgICAgICAgICAgIHRvb2xVc2VJbnB1dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b29sVXNlSW5wdXQgKz0gY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudG9vbFVzZS5pbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YT8udGV4dCkge1xuICAgICAgICAgIHRleHQgKz0gY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudGV4dDtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0cmVhbWluZ1Jlc3BvbnNlU2VuZGVyLnNlbmRSZXNwb25zZUNodW5rKHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnRCbG9ja1RleHQ6IGNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRleHQsXG4gICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogY2h1bmtJbmRleFRyYWNrZXIuYmxvY2tJbmRleCxcbiAgICAgICAgICAgIGNvbnRlbnRCbG9ja0RlbHRhSW5kZXg6IGJsb2NrRGVsdGFJbmRleCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsYXN0QmxvY2tEZWx0YUluZGV4ID0gYmxvY2tEZWx0YUluZGV4O1xuICAgICAgICAgIGJsb2NrRGVsdGFJbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0b3ApIHtcbiAgICAgICAgaWYgKHRvb2xVc2VCbG9jaykge1xuICAgICAgICAgIHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0ID0gSlNPTi5wYXJzZSh0b29sVXNlSW5wdXQpO1xuICAgICAgICAgIGFzc2lzdGFudE1lc3NhZ2UuY29udGVudD8ucHVzaCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuY2xpZW50VG9vbEJ5TmFtZS5oYXModG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNsaWVudFRvb2xzUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RyZWFtaW5nUmVzcG9uc2VTZW5kZXIuc2VuZFJlc3BvbnNlQ2h1bmsoe1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgY29udGVudEJsb2NrSW5kZXg6IGNodW5rSW5kZXhUcmFja2VyLmJsb2NrSW5kZXgsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja1Rvb2xVc2U6IEpTT04uc3RyaW5naWZ5KHRvb2xVc2VCbG9jayksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNodW5rSW5kZXhUcmFja2VyLmxhc3RCbG9ja0luZGV4ID0gY2h1bmtJbmRleFRyYWNrZXIuYmxvY2tJbmRleDtcbiAgICAgICAgICAgIGNodW5rSW5kZXhUcmFja2VyLmJsb2NrSW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9vbFVzZUJsb2NrID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRvb2xVc2VJbnB1dCA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2lzdGFudE1lc3NhZ2UuY29udGVudD8ucHVzaCh7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RyZWFtaW5nUmVzcG9uc2VTZW5kZXIuc2VuZFJlc3BvbnNlQ2h1bmsoe1xuICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgY29udGVudEJsb2NrSW5kZXg6IGNodW5rSW5kZXhUcmFja2VyLmJsb2NrSW5kZXgsXG4gICAgICAgICAgICBjb250ZW50QmxvY2tEb25lQXRJbmRleDogbGFzdEJsb2NrRGVsdGFJbmRleCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0ZXh0ID0gJyc7XG4gICAgICAgICAgY2h1bmtJbmRleFRyYWNrZXIubGFzdEJsb2NrSW5kZXggPSBjaHVua0luZGV4VHJhY2tlci5ibG9ja0luZGV4O1xuICAgICAgICAgIGNodW5rSW5kZXhUcmFja2VyLmJsb2NrSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaHVuay5tZXNzYWdlU3RvcCkge1xuICAgICAgICBzdG9wUmVhc29uID0gY2h1bmsubWVzc2FnZVN0b3Auc3RvcFJlYXNvbiA/PyAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYXNzaXN0YW50TWVzc2FnZSwgc3RvcFJlYXNvbiwgY2xpZW50VG9vbHNSZXF1ZXN0ZWQgfTtcbiAgfTtcblxuICAvKipcbiAgICogTWFwcyBldmVudCBtZXNzYWdlcyB0byBCZWRyb2NrIHR5cGVzLlxuICAgKiAxLiBNYWtlcyBhIGNvcHkgc28gdGhhdCB3ZSBkb24ndCBtdXRhdGUgZXZlbnQuXG4gICAqIDIuIERlY29kZXMgQmFzZTY0IGVuY29kZWQgaW1hZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFdmVudE1lc3NhZ2VzQXNCZWRyb2NrTWVzc2FnZXMgPSBhc3luYyAoKTogUHJvbWlzZTxcbiAgICBBcnJheTxNZXNzYWdlPlxuICA+ID0+IHtcbiAgICBjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBbXTtcbiAgICBjb25zdCBldmVudE1lc3NhZ2VzID1cbiAgICAgIGF3YWl0IHRoaXMubWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIuZ2V0TWVzc2FnZUhpc3RvcnkoKTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgZXZlbnRNZXNzYWdlcykge1xuICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnQ6IEFycmF5PENvbnRlbnRCbG9jaz4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY29udGVudEVsZW1lbnQgb2YgbWVzc2FnZS5jb250ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudEVsZW1lbnQuaW1hZ2U/LnNvdXJjZT8uYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQucHVzaCh7XG4gICAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgICBmb3JtYXQ6IGNvbnRlbnRFbGVtZW50LmltYWdlLmZvcm1hdCxcbiAgICAgICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICAgICAgYnl0ZXM6IEJ1ZmZlci5mcm9tKGNvbnRlbnRFbGVtZW50LmltYWdlLnNvdXJjZS5ieXRlcywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgdHlwZSBjb25mb3JtcyB0byBCZWRyb2NrJ3MgdHlwZSBhbmQgaXQncyBzYWZlIHRvIGNhc3QuXG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQucHVzaChjb250ZW50RWxlbWVudCBhcyBDb250ZW50QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlQ29udGVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZXM7XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVUb29sQ29uZmlndXJhdGlvbiA9ICgpOiBUb29sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHRoaXMuYWxsVG9vbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b29sczogdGhpcy5hbGxUb29scy5tYXAoKHQpOiBUb29sID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b29sU3BlYzoge1xuICAgICAgICAgICAgbmFtZTogdC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNhc3QgdG8gYmVkcm9jayB0eXBlIGFzIHdlJ3JlIHVzaW5nIGRpZmZlcmVudCB0eXBlcyB0byBkZXNjcmliZSBKU09OIHNjaGVtYSBpbiBvdXIgQVBJLlxuICAgICAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHJ1bnRpbWUgY29tcGF0aWJsZS5cbiAgICAgICAgICAgIGlucHV0U2NoZW1hOiB0LmlucHV0U2NoZW1hIGFzIFRvb2xJbnB1dFNjaGVtYSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIGV4ZWN1dGVUb29sID0gYXN5bmMgKFxuICAgIHRvb2xVc2VCbG9jazogQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXJcbiAgKTogUHJvbWlzZTxDb250ZW50QmxvY2s+ID0+IHtcbiAgICBpZiAoIXRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUpIHtcbiAgICAgIHRocm93IEVycm9yKCdCZWRyb2NrIHRvb2wgdXNlIHJlc3BvbnNlIGlzIG1pc3NpbmcgYSB0b29sIG5hbWUnKTtcbiAgICB9XG4gICAgY29uc3QgdG9vbCA9IHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuZ2V0KHRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUpO1xuICAgIGlmICghdG9vbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBCZWRyb2NrIHRvb2wgdXNlIHJlc3BvbnNlIGNvbnRhaW5zIHVua25vd24gdG9vbCAnJHt0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lfSdgXG4gICAgICApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgSW52b2tpbmcgdG9vbCAke3Rvb2wubmFtZX1gKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdUb29sIGlucHV0OicsIHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0KTtcbiAgICAgIGNvbnN0IHRvb2xSZXNwb25zZSA9IGF3YWl0IHRvb2wuZXhlY3V0ZSh0b29sVXNlQmxvY2sudG9vbFVzZS5pbnB1dCk7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tICR7dG9vbC5uYW1lfSB0b29sYCk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zyh0b29sUmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbFJlc3VsdDoge1xuICAgICAgICAgIHRvb2xVc2VJZDogdG9vbFVzZUJsb2NrLnRvb2xVc2UudG9vbFVzZUlkLFxuICAgICAgICAgIGNvbnRlbnQ6IFt0b29sUmVzcG9uc2VdLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9vbFJlc3VsdDoge1xuICAgICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgICBjb250ZW50OiBbeyB0ZXh0OiBlLnRvU3RyaW5nKCkgfV0sXG4gICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2xSZXN1bHQ6IHtcbiAgICAgICAgICB0b29sVXNlSWQ6IHRvb2xVc2VCbG9jay50b29sVXNlLnRvb2xVc2VJZCxcbiAgICAgICAgICBjb250ZW50OiBbeyB0ZXh0OiAndW5rbm93biBlcnJvciBvY2N1cnJlZCcgfV0sXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG4iXX0=
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFTeUM7QUFNekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUUvRjs7O0dBR0c7QUFDSCxNQUFhLHNCQUFzQjtJQVFqQzs7T0FFRztJQUNILFlBQ21CLEtBQTRCLEVBQzdDLGVBQXNDLEVBQ3JCLGdCQUFzQyxJQUFJLDZDQUFvQixDQUM3RSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQzVDLEVBQ0Qsa0JBQWtCLEdBQUcsSUFBSSx5REFBa0MsQ0FBQyxLQUFLLENBQUMsRUFDakQsMEJBQTBCLElBQUksNEVBQW1DLENBQ2hGLEtBQUssQ0FDTjs7UUFSZ0IsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFFNUIsa0JBQWEsR0FBYixhQUFhLENBRTdCO1FBRWdCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FFdkM7UUFoQmMseUJBQW9CLEdBQ25DLElBQUksR0FBRyxFQUFFLENBQUM7UUFDSyxxQkFBZ0IsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQStDM0UsZUFBVSxHQUFHLEtBQUssSUFBNkIsRUFBRTs7WUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsR0FDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUVoQyxNQUFNLFFBQVEsR0FDWixNQUFNLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1lBRWpELElBQUksZUFBc0MsQ0FBQztZQUMzQyxHQUFHO2dCQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLG9CQUFvQixHQUF5QjtvQkFDakQsT0FB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LElBQUksR0FBRyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FDYixrREFBa0Q7Z0JBQ2hELEdBQUcsY0FBYzthQUNsQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNoQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBa0tGO0FBck5ELHdEQXFOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlZHJvY2tSdW50aW1lQ2xpZW50LFxuICBDb250ZW50QmxvY2ssXG4gIENvbnZlcnNlQ29tbWFuZCxcbiAgQ29udmVyc2VDb21tYW5kSW5wdXQsXG4gIENvbnZlcnNlQ29tbWFuZE91dHB1dCxcbiAgTWVzc2FnZSxcbiAgVG9vbCxcbiAgVG9vbENvbmZpZ3VyYXRpb24sXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUnO1xuaW1wb3J0IHtcbiAgQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICBFeGVjdXRhYmxlVG9vbCxcbiAgVG9vbERlZmluaXRpb24sXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVHVybkV2ZW50VG9vbHNQcm92aWRlciB9IGZyb20gJy4vZXZlbnQtdG9vbHMtcHJvdmlkZXInO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uTWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIgfSBmcm9tICcuL2NvbnZlcnNhdGlvbl9tZXNzYWdlX2hpc3RvcnlfcmV0cmlldmVyJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmFjdGluZyB3aXRoIEJlZHJvY2sgQ29udmVyc2UgQVBJXG4gKiBpbiBvcmRlciB0byBwcm9kdWNlIGZpbmFsIHJlc3BvbnNlIHRoYXQgY2FuIGJlIHNlbnQgYmFjayB0byBjYWxsZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxUb29sczogQXJyYXk8VG9vbERlZmluaXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGFibGVUb29sczogQXJyYXk8RXhlY3V0YWJsZVRvb2w+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xzOiBBcnJheTxUb29sRGVmaW5pdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0YWJsZVRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIEV4ZWN1dGFibGVUb29sPiA9XG4gICAgbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIFRvb2xEZWZpbml0aW9uPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBCZWRyb2NrIENvbnZlcnNlIEFkYXB0ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgYWRkaXRpb25hbFRvb2xzOiBBcnJheTxFeGVjdXRhYmxlVG9vbD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWRyb2NrQ2xpZW50OiBCZWRyb2NrUnVudGltZUNsaWVudCA9IG5ldyBCZWRyb2NrUnVudGltZUNsaWVudChcbiAgICAgIHsgcmVnaW9uOiBldmVudC5tb2RlbENvbmZpZ3VyYXRpb24ucmVnaW9uIH1cbiAgICApLFxuICAgIGV2ZW50VG9vbHNQcm92aWRlciA9IG5ldyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyKGV2ZW50KSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyID0gbmV3IENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyKFxuICAgICAgZXZlbnRcbiAgICApXG4gICkge1xuICAgIHRoaXMuZXhlY3V0YWJsZVRvb2xzID0gW1xuICAgICAgLi4uZXZlbnRUb29sc1Byb3ZpZGVyLmdldEV2ZW50VG9vbHMoKSxcbiAgICAgIC4uLmFkZGl0aW9uYWxUb29scyxcbiAgICBdO1xuICAgIHRoaXMuY2xpZW50VG9vbHMgPSB0aGlzLmV2ZW50LnRvb2xzQ29uZmlndXJhdGlvbj8uY2xpZW50VG9vbHMgPz8gW107XG4gICAgdGhpcy5hbGxUb29scyA9IFsuLi50aGlzLmV4ZWN1dGFibGVUb29scywgLi4udGhpcy5jbGllbnRUb29sc107XG4gICAgY29uc3QgZHVwbGljYXRlVG9vbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICB0aGlzLmV4ZWN1dGFibGVUb29scy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5oYXModC5uYW1lKSkge1xuICAgICAgICBkdXBsaWNhdGVUb29scy5hZGQodC5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuc2V0KHQubmFtZSwgdCk7XG4gICAgfSk7XG4gICAgdGhpcy5jbGllbnRUb29scy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5oYXModC5uYW1lKSkge1xuICAgICAgICBkdXBsaWNhdGVUb29scy5hZGQodC5uYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNsaWVudFRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudFRvb2xCeU5hbWUuc2V0KHQubmFtZSwgdCk7XG4gICAgfSk7XG4gICAgaWYgKGR1cGxpY2F0ZVRvb2xzLnNpemUgPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUb29scyBtdXN0IGhhdmUgdW5pcXVlIG5hbWVzLiBEdXBsaWNhdGUgdG9vbHM6ICR7W1xuICAgICAgICAgIC4uLmR1cGxpY2F0ZVRvb2xzLFxuICAgICAgICBdLmpvaW4oJywgJyl9LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXNrQmVkcm9jayA9IGFzeW5jICgpOiBQcm9taXNlPENvbnRlbnRCbG9ja1tdPiA9PiB7XG4gICAgY29uc3QgeyBtb2RlbElkLCBzeXN0ZW1Qcm9tcHQsIGluZmVyZW5jZUNvbmZpZ3VyYXRpb24gfSA9XG4gICAgICB0aGlzLmV2ZW50Lm1vZGVsQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPiA9XG4gICAgICBhd2FpdCB0aGlzLmdldEV2ZW50TWVzc2FnZXNBc0JlZHJvY2tNZXNzYWdlcygpO1xuXG4gICAgbGV0IGJlZHJvY2tSZXNwb25zZTogQ29udmVyc2VDb21tYW5kT3V0cHV0O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRvb2xDb25maWcgPSB0aGlzLmNyZWF0ZVRvb2xDb25maWd1cmF0aW9uKCk7XG4gICAgICBjb25zdCBjb252ZXJzZUNvbW1hbmRJbnB1dDogQ29udmVyc2VDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIG1vZGVsSWQsXG4gICAgICAgIG1lc3NhZ2VzOiBbLi4ubWVzc2FnZXNdLFxuICAgICAgICBzeXN0ZW06IFt7IHRleHQ6IHN5c3RlbVByb21wdCB9XSxcbiAgICAgICAgaW5mZXJlbmNlQ29uZmlnOiBpbmZlcmVuY2VDb25maWd1cmF0aW9uLFxuICAgICAgICB0b29sQ29uZmlnLFxuICAgICAgfTtcbiAgICAgIGJlZHJvY2tSZXNwb25zZSA9IGF3YWl0IHRoaXMuYmVkcm9ja0NsaWVudC5zZW5kKFxuICAgICAgICBuZXcgQ29udmVyc2VDb21tYW5kKGNvbnZlcnNlQ29tbWFuZElucHV0KVxuICAgICAgKTtcbiAgICAgIGlmIChiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBpZiAoYmVkcm9ja1Jlc3BvbnNlLnN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50QmxvY2tzID1cbiAgICAgICAgICBiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlPy5jb250ZW50ID8/IFtdO1xuICAgICAgICBjb25zdCB0b29sVXNlQmxvY2tzID0gcmVzcG9uc2VDb250ZW50QmxvY2tzLmZpbHRlcihcbiAgICAgICAgICAoYmxvY2spID0+ICd0b29sVXNlJyBpbiBibG9ja1xuICAgICAgICApIGFzIEFycmF5PENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyPjtcbiAgICAgICAgY29uc3QgY2xpZW50VG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PlxuICAgICAgICAgICAgYmxvY2sudG9vbFVzZT8ubmFtZSAmJlxuICAgICAgICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyhibG9jay50b29sVXNlPy5uYW1lKVxuICAgICAgICApO1xuICAgICAgICBpZiAoY2xpZW50VG9vbFVzZUJsb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRm9yIG5vdyBpZiBhbnkgb2YgY2xpZW50IHRvb2xzIGlzIHVzZWQgd2UgaWdub3JlIGV4ZWN1dGFibGUgdG9vbHNcbiAgICAgICAgICAvLyBhbmQgcHJvcGFnYXRlIHJlc3VsdCBiYWNrIHRvIGNsaWVudC5cbiAgICAgICAgICByZXR1cm4gY2xpZW50VG9vbFVzZUJsb2NrcztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrIG9mIHRvb2xVc2VCbG9ja3MpIHtcbiAgICAgICAgICBjb25zdCB0b29sVXNlQmxvY2sgPVxuICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50QmxvY2sgYXMgQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI7XG4gICAgICAgICAgY29uc3QgdG9vbE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUb29sKHRvb2xVc2VCbG9jayk7XG4gICAgICAgICAgbWVzc2FnZXMucHVzaCh0b29sTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChiZWRyb2NrUmVzcG9uc2Uuc3RvcFJlYXNvbiA9PT0gJ3Rvb2xfdXNlJyk7XG5cbiAgICByZXR1cm4gYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZT8uY29udGVudCA/PyBbXTtcbiAgfTtcblxuICAvKipcbiAgICogTWFwcyBldmVudCBtZXNzYWdlcyB0byBCZWRyb2NrIHR5cGVzLlxuICAgKiAxLiBNYWtlcyBhIGNvcHkgc28gdGhhdCB3ZSBkb24ndCBtdXRhdGUgZXZlbnQuXG4gICAqIDIuIERlY29kZXMgQmFzZTY0IGVuY29kZWQgaW1hZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFdmVudE1lc3NhZ2VzQXNCZWRyb2NrTWVzc2FnZXMgPSBhc3luYyAoKTogUHJvbWlzZTxcbiAgICBBcnJheTxNZXNzYWdlPlxuICA+ID0+IHtcbiAgICBjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBbXTtcbiAgICBjb25zdCBldmVudE1lc3NhZ2VzID1cbiAgICAgIGF3YWl0IHRoaXMubWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIuZ2V0TWVzc2FnZUhpc3RvcnkoKTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgZXZlbnRNZXNzYWdlcykge1xuICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnQ6IEFycmF5PENvbnRlbnRCbG9jaz4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY29udGVudEVsZW1lbnQgb2YgbWVzc2FnZS5jb250ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudEVsZW1lbnQuaW1hZ2U/LnNvdXJjZT8uYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQucHVzaCh7XG4gICAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgICBmb3JtYXQ6IGNvbnRlbnRFbGVtZW50LmltYWdlLmZvcm1hdCxcbiAgICAgICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICAgICAgYnl0ZXM6IEJ1ZmZlci5mcm9tKGNvbnRlbnRFbGVtZW50LmltYWdlLnNvdXJjZS5ieXRlcywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgdHlwZSBjb25mb3JtcyB0byBCZWRyb2NrJ3MgdHlwZSBhbmQgaXQncyBzYWZlIHRvIGNhc3QuXG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQucHVzaChjb250ZW50RWxlbWVudCBhcyBDb250ZW50QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlQ29udGVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZXM7XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVUb29sQ29uZmlndXJhdGlvbiA9ICgpOiBUb29sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHRoaXMuYWxsVG9vbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b29sczogdGhpcy5hbGxUb29scy5tYXAoKHQpOiBUb29sID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b29sU3BlYzoge1xuICAgICAgICAgICAgbmFtZTogdC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpbnB1dFNjaGVtYTogdC5pbnB1dFNjaGVtYSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIGV4ZWN1dGVUb29sID0gYXN5bmMgKFxuICAgIHRvb2xVc2VCbG9jazogQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXJcbiAgKTogUHJvbWlzZTxNZXNzYWdlPiA9PiB7XG4gICAgaWYgKCF0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lKSB7XG4gICAgICB0aHJvdyBFcnJvcignQmVkcm9jayB0b29sIHVzZSByZXNwb25zZSBpcyBtaXNzaW5nIGEgdG9vbCBuYW1lJyk7XG4gICAgfVxuICAgIGNvbnN0IHRvb2wgPSB0aGlzLmV4ZWN1dGFibGVUb29sQnlOYW1lLmdldCh0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lKTtcbiAgICBpZiAoIXRvb2wpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQmVkcm9jayB0b29sIHVzZSByZXNwb25zZSBjb250YWlucyB1bmtub3duIHRvb2wgJyR7dG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZX0nYFxuICAgICAgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRvb2xSZXNwb25zZSA9IGF3YWl0IHRvb2wuZXhlY3V0ZSh0b29sVXNlQmxvY2sudG9vbFVzZS5pbnB1dCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgICAgIHRvb2xVc2VJZDogdG9vbFVzZUJsb2NrLnRvb2xVc2UudG9vbFVzZUlkLFxuICAgICAgICAgICAgICBjb250ZW50OiBbdG9vbFJlc3BvbnNlXSxcbiAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgICAgICAgY29udGVudDogW3sgdGV4dDogZS50b1N0cmluZygpIH1dLFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvbGU6ICd1c2VyJyxcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IHtcbiAgICAgICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7IHRleHQ6ICd1bmtub3duIGVycm9yIG9jY3VycmVkJyB9XSxcbiAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG4iXX0=
@@ -65,7 +65,7 @@ class ConversationMessageHistoryRetriever {
65
65
  /**
66
66
  * Creates conversation message history retriever.
67
67
  */
68
- constructor(event, graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(event.graphqlApiEndpoint, event.request.headers.authorization, event.request.headers['x-amz-user-agent'])) {
68
+ constructor(event, graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(event.graphqlApiEndpoint, event.request.headers.authorization)) {
69
69
  this.event = event;
70
70
  this.graphqlRequestExecutor = graphqlRequestExecutor;
71
71
  this.getMessageHistory = async () => {
@@ -170,4 +170,4 @@ class ConversationMessageHistoryRetriever {
170
170
  }
171
171
  }
172
172
  exports.ConversationMessageHistoryRetriever = ConversationMessageHistoryRetriever;
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUVBQW9FO0FBbUNwRTs7OztHQUlHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0QvQixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQWEsbUNBQW1DO0lBQzlDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDNUIseUJBQXlCLElBQUksaURBQXNCLENBQ2xFLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUMxQztRQUxnQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBSXRDO1FBR0gsc0JBQWlCLEdBQUcsS0FBSyxJQUF5QyxFQUFFOztZQUNsRSxJQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU0sRUFBRTtnQkFDL0Isb0ZBQW9GO2dCQUNwRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQzVCO1lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFM0MsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDNUMsQ0FBQztZQUVGLG1G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QUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDO1FBRUksaUJBQVksR0FBRyxLQUFLLElBRTFCLEVBQUU7O1lBQ0YsTUFBTSxLQUFLLEdBQUc7c0NBQ29CLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCO2NBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsYUFBYTs7a0JBRXhDLHVCQUF1Qjs7OztLQUlwQyxDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQW1CO2dCQUNoQyxNQUFNLEVBQUU7b0JBQ04sY0FBYyxFQUFFO3dCQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7cUJBQzlCO2lCQUNGO2dCQUNELEtBQUssRUFBRSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsY0FBYyxtQ0FBSSxJQUFJO2FBQzdELENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBRy9EO2dCQUNBLEtBQUs7Z0JBQ0wsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzRSxDQUFDLENBQUM7SUFuSUMsQ0FBQztDQW9JTDtBQS9JRCxrRkErSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb252ZXJzYXRpb25NZXNzYWdlLCBDb252ZXJzYXRpb25UdXJuRXZlbnQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IgfSBmcm9tICcuL2dyYXBocWxfcmVxdWVzdF9leGVjdXRvcic7XG5cbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvbkhpc3RvcnlNZXNzYWdlSXRlbSA9IENvbnZlcnNhdGlvbk1lc3NhZ2UgJiB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkPzogc3RyaW5nO1xuICBhaUNvbnRleHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0UXVlcnlJbnB1dCA9IHtcbiAgaWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdldFF1ZXJ5T3V0cHV0ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0+O1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFF1ZXJ5SW5wdXQgPSB7XG4gIGZpbHRlcjoge1xuICAgIGNvbnZlcnNhdGlvbklkOiB7XG4gICAgICBlcTogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIGxpbWl0OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UXVlcnlPdXRwdXQgPSB7XG4gIGRhdGE6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgaXRlbXM6IEFycmF5PENvbnZlcnNhdGlvbkhpc3RvcnlNZXNzYWdlSXRlbT47XG4gICAgfVxuICA+O1xufTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgYWxsIHByb3BlcnRpZXMgd2UgaGF2ZSB0byBwdWxsLlxuICogVW5mb3J0dW5hdGVseSwgR1FMIGRvZXNuJ3Qgc3VwcG9ydCB3aWxkY2FyZHMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC9ncmFwaHFsLXNwZWMvaXNzdWVzLzEyN1xuICovXG5jb25zdCBtZXNzYWdlSXRlbVNlbGVjdGlvblNldCA9IGBcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkXG4gICAgICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICBhaUNvbnRleHRcbiAgICAgICAgICAgICAgICByb2xlXG4gICAgICAgICAgICAgICAgY29udGVudCB7XG4gICAgICAgICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgICAgYnl0ZXNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgc291cmNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBieXRlc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0b29sUmVzdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGpzb25cbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgIHRvb2xVc2VJZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdG9vbFVzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgdG9vbFVzZUlkXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuYDtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIG1lc3NhZ2UgaGlzdG9yeSB0aGF0IGJlbG9uZ3MgdG8gY29udmVyc2F0aW9uIHR1cm4gZXZlbnQuXG4gKiBJdCBxdWVyaWVzIEFwcFN5bmMgdG8gbGlzdCBtZXNzYWdlcyB0aGF0IGJlbG9uZyB0byBjb252ZXJzYXRpb24uXG4gKiBBZGRpdGlvbmFsbHksIGl0IGxvb2tzIHVwIGEgY3VycmVudCBtZXNzYWdlIGluIGNhc2UgaXQncyBtaXNzaW5nIGluIHRoZSBsaXN0IGR1ZSB0byBldmVudHVhbCBjb25zaXN0ZW5jeS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgY29udmVyc2F0aW9uIG1lc3NhZ2UgaGlzdG9yeSByZXRyaWV2ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncmFwaHFsUmVxdWVzdEV4ZWN1dG9yID0gbmV3IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IoXG4gICAgICBldmVudC5ncmFwaHFsQXBpRW5kcG9pbnQsXG4gICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbixcbiAgICAgIGV2ZW50LnJlcXVlc3QuaGVhZGVyc1sneC1hbXotdXNlci1hZ2VudCddXG4gICAgKVxuICApIHt9XG5cbiAgZ2V0TWVzc2FnZUhpc3RvcnkgPSBhc3luYyAoKTogUHJvbWlzZTxBcnJheTxDb252ZXJzYXRpb25NZXNzYWdlPj4gPT4ge1xuICAgIGlmICh0aGlzLmV2ZW50Lm1lc3NhZ2VzPy5sZW5ndGgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIG1lc3NhZ2VzIHByb3BlcnR5LlxuICAgICAgcmV0dXJuIHRoaXMuZXZlbnQubWVzc2FnZXM7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5saXN0TWVzc2FnZXMoKTtcblxuICAgIGxldCBjdXJyZW50TWVzc2FnZSA9IG1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5pZCA9PT0gdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkXG4gICAgKTtcblxuICAgIC8vIFRoaXMgaXMgYSBmYWxsYmFjayBpbiBjYXNlIGN1cnJlbnQgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBtZXNzYWdlIGxpc3QuXG4gICAgLy8gSS5lLiBpbiBhIHNpdHVhdGlvbiB3aGVuIGZyZXNobHkgd3JpdHRlbiBtZXNzYWdlIGlzIG5vdCB5ZXQgdmlzaWJsZSBpblxuICAgIC8vIGV2ZW50dWFsbHkgY29uc2lzdGVudCByZWFkcy5cbiAgICBpZiAoIWN1cnJlbnRNZXNzYWdlKSB7XG4gICAgICBjdXJyZW50TWVzc2FnZSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudE1lc3NhZ2UoKTtcbiAgICAgIG1lc3NhZ2VzLnB1c2goY3VycmVudE1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8vIEluZGV4IGFzc2lzdGFudCBtZXNzYWdlcyBieSBjb3JyZXNwb25kaW5nIHVzZXIgbWVzc2FnZS5cbiAgICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlQnlVc2VyTWVzc2FnZUlkOiBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW1cbiAgICA+ID0gbmV3IE1hcCgpO1xuICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIG1lc3NhZ2UuYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQpIHtcbiAgICAgICAgYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZC5zZXQoXG4gICAgICAgICAgbWVzc2FnZS5hc3NvY2lhdGVkVXNlck1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZWNvbmNpbGUgaGlzdG9yeSBhbmQgaW5qZWN0IGFpQ29udGV4dFxuICAgIHJldHVybiBtZXNzYWdlcy5yZWR1Y2UoKGFjYywgY3VycmVudCkgPT4ge1xuICAgICAgLy8gQmVkcm9jayBleHBlY3RzIHRoYXQgbWVzc2FnZSBoaXN0b3J5IGlzIHVzZXItPmFzc2lzdGFudC0+dXNlci0+YXNzaXN0YW50LT4uLi4gYW5kIHNvIG9uLlxuICAgICAgLy8gVGhlIGNocm9ub2xvZ2ljYWwgb3JkZXIgZG9lc24ndCBhc3N1cmUgdGhpcyBvcmRlcmluZyBpZiB0aGVyZSB3ZXJlIGFueSBjb25jdXJyZW50IG1lc3NhZ2VzIHNlbnQuXG4gICAgICAvLyBUaGVyZWZvcmUsIGNvbnZlcnNhdGlvbiBpcyBvcmRlcmVkIGJ5IHVzZXIncyBtZXNzYWdlcyBvbmx5IGFuZCBjb3JyZXNwb25kaW5nIGFzc2lzdGFudCBtZXNzYWdlcyBhcmUgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gcmlnaHQgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGVpciBjcmVhdGVkQXQgdmFsdWUuXG4gICAgICAvLyBUaGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgR1FMIHF1ZXJ5IHJldHVybnMgbWVzc2FnZXMgc29ydGVkIGJ5IGNyZWF0ZWRBdC5cbiAgICAgIGlmIChjdXJyZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgIC8vIEluaXRpYWxseSwgc2tpcCBhc3Npc3RhbnQgbWVzc2FnZXMsIHRoZXNlIG1pZ2h0IGJlIG91dCBvZiBjaHJvbm9sb2dpY2FsIG9yZGVyLlxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50LnJvbGUgPT09ICd1c2VyJyAmJlxuICAgICAgICAhYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZC5oYXMoY3VycmVudC5pZCkgJiZcbiAgICAgICAgY3VycmVudC5pZCAhPT0gdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkXG4gICAgICApIHtcbiAgICAgICAgLy8gU2tpcCB1c2VyIG1lc3NhZ2VzIHRoYXQgZGlkbid0IGdldCBhbnN3ZXIgZnJvbSBhc3Npc3RhbnQgeWV0LlxuICAgICAgICAvLyBUaGVzZSBtaWdodCBiZSBzdGlsbCBcImluLWZsaWdodFwiLCBpLmUuIGFzc2lzdGFudCBpcyBzdGlsbCB3b3JraW5nIG9uIHRoZW0gaW4gc2VwYXJhdGUgaW52b2NhdGlvbi5cbiAgICAgICAgLy8gRXhjZXB0IGN1cnJlbnQgbWVzc2FnZSwgd2Ugd2FudCB0byBwcm9jZXNzIHRoYXQgb25lLlxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgY29uc3QgYWlDb250ZXh0ID0gY3VycmVudC5haUNvbnRleHQ7XG4gICAgICBjb25zdCBjb250ZW50ID0gYWlDb250ZXh0XG4gICAgICAgID8gWy4uLmN1cnJlbnQuY29udGVudCwgeyB0ZXh0OiBKU09OLnN0cmluZ2lmeShhaUNvbnRleHQpIH1dXG4gICAgICAgIDogY3VycmVudC5jb250ZW50O1xuXG4gICAgICBhY2MucHVzaCh7IHJvbGU6IGN1cnJlbnQucm9sZSwgY29udGVudCB9KTtcblxuICAgICAgLy8gRmluZCBhbmQgaW5zZXJ0IGNvcnJlc3BvbmRpbmcgYXNzaXN0YW50IG1lc3NhZ2UuXG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZSA9IGFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuZ2V0KFxuICAgICAgICBjdXJyZW50LmlkXG4gICAgICApO1xuICAgICAgaWYgKGNvcnJlc3BvbmRpbmdBc3Npc3RhbnRNZXNzYWdlKSB7XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICByb2xlOiBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZS5yb2xlLFxuICAgICAgICAgIGNvbnRlbnQ6IGNvcnJlc3BvbmRpbmdBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBBcnJheTxDb252ZXJzYXRpb25NZXNzYWdlPik7XG4gIH07XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50TWVzc2FnZSA9XG4gICAgYXN5bmMgKCk6IFByb21pc2U8Q29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtPiA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgICAgcXVlcnkgR2V0TWVzc2FnZSgkaWQ6ICR7dGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5LmdldFF1ZXJ5SW5wdXRUeXBlTmFtZX0hKSB7XG4gICAgICAgICAgICAke3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeU5hbWV9KGlkOiAkaWQpIHtcbiAgICAgICAgICAgICAgJHttZXNzYWdlSXRlbVNlbGVjdGlvblNldH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG4gICAgICBjb25zdCB2YXJpYWJsZXM6IEdldFF1ZXJ5SW5wdXQgPSB7XG4gICAgICAgIGlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3RFeGVjdXRvci5leGVjdXRlR3JhcGhxbDxcbiAgICAgICAgR2V0UXVlcnlJbnB1dCxcbiAgICAgICAgR2V0UXVlcnlPdXRwdXRcbiAgICAgID4oe1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhW3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeU5hbWVdO1xuICAgIH07XG5cbiAgcHJpdmF0ZSBsaXN0TWVzc2FnZXMgPSBhc3luYyAoKTogUHJvbWlzZTxcbiAgICBBcnJheTxDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0+XG4gID4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBxdWVyeSBMaXN0TWVzc2FnZXMoJGZpbHRlcjogJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5SW5wdXRUeXBlTmFtZX0hLCAkbGltaXQ6IEludCkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5TmFtZX0oZmlsdGVyOiAkZmlsdGVyLCBsaW1pdDogJGxpbWl0KSB7XG4gICAgICAgICAgICAgIGl0ZW1zIHtcbiAgICAgICAgICAgICAgICAke21lc3NhZ2VJdGVtU2VsZWN0aW9uU2V0fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBgO1xuICAgIGNvbnN0IHZhcmlhYmxlczogTGlzdFF1ZXJ5SW5wdXQgPSB7XG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHtcbiAgICAgICAgICBlcTogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsaW1pdDogdGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5Lmxpc3RRdWVyeUxpbWl0ID8/IDEwMDAsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdEV4ZWN1dG9yLmV4ZWN1dGVHcmFwaHFsPFxuICAgICAgTGlzdFF1ZXJ5SW5wdXQsXG4gICAgICBMaXN0UXVlcnlPdXRwdXRcbiAgICA+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGFbdGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5Lmxpc3RRdWVyeU5hbWVdLml0ZW1zO1xuICB9O1xufVxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUVBQW9FO0FBbUNwRTs7OztHQUlHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0QvQixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQWEsbUNBQW1DO0lBQzlDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDNUIseUJBQXlCLElBQUksaURBQXNCLENBQ2xFLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUNwQztRQUpnQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBR3RDO1FBR0gsc0JBQWlCLEdBQUcsS0FBSyxJQUF5QyxFQUFFOztZQUNsRSxJQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU0sRUFBRTtnQkFDL0Isb0ZBQW9GO2dCQUNwRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQzVCO1lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFM0MsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDNUMsQ0FBQztZQUVGLG1GQUFtRjtZQUNuRix5RUFBeUU7WUFDekUsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxj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WSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDO1FBRUksaUJBQVksR0FBRyxLQUFLLElBRTFCLEVBQUU7O1lBQ0YsTUFBTSxLQUFLLEdBQUc7c0NBQ29CLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCO2NBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsYUFBYTs7a0JBRXhDLHVCQUF1Qjs7OztLQUlwQyxDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQW1CO2dCQUNoQyxNQUFNLEVBQUU7b0JBQ04sY0FBYyxFQUFFO3dCQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7cUJBQzlCO2lCQUNGO2dCQUNELEtBQUssRUFBRSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsY0FBYyxtQ0FBSSxJQUFJO2FBQzdELENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBRy9EO2dCQUNBLEtBQUs7Z0JBQ0wsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzRSxDQUFDLENBQUM7SUFuSUMsQ0FBQztDQW9JTDtBQTlJRCxrRkE4SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb252ZXJzYXRpb25NZXNzYWdlLCBDb252ZXJzYXRpb25UdXJuRXZlbnQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IgfSBmcm9tICcuL2dyYXBocWxfcmVxdWVzdF9leGVjdXRvcic7XG5cbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvbkhpc3RvcnlNZXNzYWdlSXRlbSA9IENvbnZlcnNhdGlvbk1lc3NhZ2UgJiB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkPzogc3RyaW5nO1xuICBhaUNvbnRleHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0UXVlcnlJbnB1dCA9IHtcbiAgaWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdldFF1ZXJ5T3V0cHV0ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0+O1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFF1ZXJ5SW5wdXQgPSB7XG4gIGZpbHRlcjoge1xuICAgIGNvbnZlcnNhdGlvbklkOiB7XG4gICAgICBlcTogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIGxpbWl0OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UXVlcnlPdXRwdXQgPSB7XG4gIGRhdGE6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgaXRlbXM6IEFycmF5PENvbnZlcnNhdGlvbkhpc3RvcnlNZXNzYWdlSXRlbT47XG4gICAgfVxuICA+O1xufTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgYWxsIHByb3BlcnRpZXMgd2UgaGF2ZSB0byBwdWxsLlxuICogVW5mb3J0dW5hdGVseSwgR1FMIGRvZXNuJ3Qgc3VwcG9ydCB3aWxkY2FyZHMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC9ncmFwaHFsLXNwZWMvaXNzdWVzLzEyN1xuICovXG5jb25zdCBtZXNzYWdlSXRlbVNlbGVjdGlvblNldCA9IGBcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkXG4gICAgICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICBhaUNvbnRleHRcbiAgICAgICAgICAgICAgICByb2xlXG4gICAgICAgICAgICAgICAgY29udGVudCB7XG4gICAgICAgICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgICAgYnl0ZXNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgc291cmNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBieXRlc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0b29sUmVzdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGpzb25cbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgIHRvb2xVc2VJZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdG9vbFVzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgdG9vbFVzZUlkXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuYDtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIG1lc3NhZ2UgaGlzdG9yeSB0aGF0IGJlbG9uZ3MgdG8gY29udmVyc2F0aW9uIHR1cm4gZXZlbnQuXG4gKiBJdCBxdWVyaWVzIEFwcFN5bmMgdG8gbGlzdCBtZXNzYWdlcyB0aGF0IGJlbG9uZyB0byBjb252ZXJzYXRpb24uXG4gKiBBZGRpdGlvbmFsbHksIGl0IGxvb2tzIHVwIGEgY3VycmVudCBtZXNzYWdlIGluIGNhc2UgaXQncyBtaXNzaW5nIGluIHRoZSBsaXN0IGR1ZSB0byBldmVudHVhbCBjb25zaXN0ZW5jeS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgY29udmVyc2F0aW9uIG1lc3NhZ2UgaGlzdG9yeSByZXRyaWV2ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncmFwaHFsUmVxdWVzdEV4ZWN1dG9yID0gbmV3IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IoXG4gICAgICBldmVudC5ncmFwaHFsQXBpRW5kcG9pbnQsXG4gICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvblxuICAgIClcbiAgKSB7fVxuXG4gIGdldE1lc3NhZ2VIaXN0b3J5ID0gYXN5bmMgKCk6IFByb21pc2U8QXJyYXk8Q29udmVyc2F0aW9uTWVzc2FnZT4+ID0+IHtcbiAgICBpZiAodGhpcy5ldmVudC5tZXNzYWdlcz8ubGVuZ3RoKSB7XG4gICAgICAvLyBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2l0aCBtZXNzYWdlcyBwcm9wZXJ0eS5cbiAgICAgIHJldHVybiB0aGlzLmV2ZW50Lm1lc3NhZ2VzO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMubGlzdE1lc3NhZ2VzKCk7XG5cbiAgICBsZXQgY3VycmVudE1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uaWQgPT09IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZFxuICAgICk7XG5cbiAgICAvLyBUaGlzIGlzIGEgZmFsbGJhY2sgaW4gY2FzZSBjdXJyZW50IG1lc3NhZ2UgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgbWVzc2FnZSBsaXN0LlxuICAgIC8vIEkuZS4gaW4gYSBzaXR1YXRpb24gd2hlbiBmcmVzaGx5IHdyaXR0ZW4gbWVzc2FnZSBpcyBub3QgeWV0IHZpc2libGUgaW5cbiAgICAvLyBldmVudHVhbGx5IGNvbnNpc3RlbnQgcmVhZHMuXG4gICAgaWYgKCFjdXJyZW50TWVzc2FnZSkge1xuICAgICAgY3VycmVudE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRNZXNzYWdlKCk7XG4gICAgICBtZXNzYWdlcy5wdXNoKGN1cnJlbnRNZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvLyBJbmRleCBhc3Npc3RhbnQgbWVzc2FnZXMgYnkgY29ycmVzcG9uZGluZyB1c2VyIG1lc3NhZ2UuXG4gICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZDogTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgQ29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtXG4gICAgPiA9IG5ldyBNYXAoKTtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiBtZXNzYWdlLmFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkKSB7XG4gICAgICAgIGFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuc2V0KFxuICAgICAgICAgIG1lc3NhZ2UuYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVjb25jaWxlIGhpc3RvcnkgYW5kIGluamVjdCBhaUNvbnRleHRcbiAgICByZXR1cm4gbWVzc2FnZXMucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IHtcbiAgICAgIC8vIEJlZHJvY2sgZXhwZWN0cyB0aGF0IG1lc3NhZ2UgaGlzdG9yeSBpcyB1c2VyLT5hc3Npc3RhbnQtPnVzZXItPmFzc2lzdGFudC0+Li4uIGFuZCBzbyBvbi5cbiAgICAgIC8vIFRoZSBjaHJvbm9sb2dpY2FsIG9yZGVyIGRvZXNuJ3QgYXNzdXJlIHRoaXMgb3JkZXJpbmcgaWYgdGhlcmUgd2VyZSBhbnkgY29uY3VycmVudCBtZXNzYWdlcyBzZW50LlxuICAgICAgLy8gVGhlcmVmb3JlLCBjb252ZXJzYXRpb24gaXMgb3JkZXJlZCBieSB1c2VyJ3MgbWVzc2FnZXMgb25seSBhbmQgY29ycmVzcG9uZGluZyBhc3Npc3RhbnQgbWVzc2FnZXMgYXJlIGluc2VydGVkXG4gICAgICAvLyBpbnRvIHJpZ2h0IHBsYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgY3JlYXRlZEF0IHZhbHVlLlxuICAgICAgLy8gVGhpcyBhbGdvcml0aG0gYXNzdW1lcyB0aGF0IEdRTCBxdWVyeSByZXR1cm5zIG1lc3NhZ2VzIHNvcnRlZCBieSBjcmVhdGVkQXQuXG4gICAgICBpZiAoY3VycmVudC5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAvLyBJbml0aWFsbHksIHNraXAgYXNzaXN0YW50IG1lc3NhZ2VzLCB0aGVzZSBtaWdodCBiZSBvdXQgb2YgY2hyb25vbG9naWNhbCBvcmRlci5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudC5yb2xlID09PSAndXNlcicgJiZcbiAgICAgICAgIWFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuaGFzKGN1cnJlbnQuaWQpICYmXG4gICAgICAgIGN1cnJlbnQuaWQgIT09IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFNraXAgdXNlciBtZXNzYWdlcyB0aGF0IGRpZG4ndCBnZXQgYW5zd2VyIGZyb20gYXNzaXN0YW50IHlldC5cbiAgICAgICAgLy8gVGhlc2UgbWlnaHQgYmUgc3RpbGwgXCJpbi1mbGlnaHRcIiwgaS5lLiBhc3Npc3RhbnQgaXMgc3RpbGwgd29ya2luZyBvbiB0aGVtIGluIHNlcGFyYXRlIGludm9jYXRpb24uXG4gICAgICAgIC8vIEV4Y2VwdCBjdXJyZW50IG1lc3NhZ2UsIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGF0IG9uZS5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFpQ29udGV4dCA9IGN1cnJlbnQuYWlDb250ZXh0O1xuICAgICAgY29uc3QgY29udGVudCA9IGFpQ29udGV4dFxuICAgICAgICA/IFsuLi5jdXJyZW50LmNvbnRlbnQsIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkoYWlDb250ZXh0KSB9XVxuICAgICAgICA6IGN1cnJlbnQuY29udGVudDtcblxuICAgICAgYWNjLnB1c2goeyByb2xlOiBjdXJyZW50LnJvbGUsIGNvbnRlbnQgfSk7XG5cbiAgICAgIC8vIEZpbmQgYW5kIGluc2VydCBjb3JyZXNwb25kaW5nIGFzc2lzdGFudCBtZXNzYWdlLlxuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0Fzc2lzdGFudE1lc3NhZ2UgPSBhc3Npc3RhbnRNZXNzYWdlQnlVc2VyTWVzc2FnZUlkLmdldChcbiAgICAgICAgY3VycmVudC5pZFxuICAgICAgKTtcbiAgICAgIGlmIChjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZSkge1xuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgcm9sZTogY29ycmVzcG9uZGluZ0Fzc2lzdGFudE1lc3NhZ2Uucm9sZSxcbiAgICAgICAgICBjb250ZW50OiBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZS5jb250ZW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgQXJyYXk8Q29udmVyc2F0aW9uTWVzc2FnZT4pO1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudE1lc3NhZ2UgPVxuICAgIGFzeW5jICgpOiBQcm9taXNlPENvbnZlcnNhdGlvbkhpc3RvcnlNZXNzYWdlSXRlbT4gPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICAgIHF1ZXJ5IEdldE1lc3NhZ2UoJGlkOiAke3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeUlucHV0VHlwZU5hbWV9ISkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkuZ2V0UXVlcnlOYW1lfShpZDogJGlkKSB7XG4gICAgICAgICAgICAgICR7bWVzc2FnZUl0ZW1TZWxlY3Rpb25TZXR9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBgO1xuICAgICAgY29uc3QgdmFyaWFibGVzOiBHZXRRdWVyeUlucHV0ID0ge1xuICAgICAgICBpZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0RXhlY3V0b3IuZXhlY3V0ZUdyYXBocWw8XG4gICAgICAgIEdldFF1ZXJ5SW5wdXQsXG4gICAgICAgIEdldFF1ZXJ5T3V0cHV0XG4gICAgICA+KHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHZhcmlhYmxlcyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YVt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkuZ2V0UXVlcnlOYW1lXTtcbiAgICB9O1xuXG4gIHByaXZhdGUgbGlzdE1lc3NhZ2VzID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgQXJyYXk8Q29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtPlxuICA+ID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgICAgcXVlcnkgTGlzdE1lc3NhZ2VzKCRmaWx0ZXI6ICR7dGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5Lmxpc3RRdWVyeUlucHV0VHlwZU5hbWV9ISwgJGxpbWl0OiBJbnQpIHtcbiAgICAgICAgICAgICR7dGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5Lmxpc3RRdWVyeU5hbWV9KGZpbHRlcjogJGZpbHRlciwgbGltaXQ6ICRsaW1pdCkge1xuICAgICAgICAgICAgICBpdGVtcyB7XG4gICAgICAgICAgICAgICAgJHttZXNzYWdlSXRlbVNlbGVjdGlvblNldH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgYDtcbiAgICBjb25zdCB2YXJpYWJsZXM6IExpc3RRdWVyeUlucHV0ID0ge1xuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIGNvbnZlcnNhdGlvbklkOiB7XG4gICAgICAgICAgZXE6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbGltaXQ6IHRoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5saXN0UXVlcnlMaW1pdCA/PyAxMDAwLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3RFeGVjdXRvci5leGVjdXRlR3JhcGhxbDxcbiAgICAgIExpc3RRdWVyeUlucHV0LFxuICAgICAgTGlzdFF1ZXJ5T3V0cHV0XG4gICAgPih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhW3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5saXN0UXVlcnlOYW1lXS5pdGVtcztcbiAgfTtcbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { ConversationTurnEvent, ExecutableTool, JSONSchema } from './types.js';
2
+ import { ConversationTurnResponseSender } from './conversation_turn_response_sender.js';
3
+ import { ConversationTurnEvent, ExecutableTool } from './types.js';
3
4
  import { BedrockConverseAdapter } from './bedrock_converse_adapter.js';
4
5
  /**
5
6
  * This class is responsible for orchestrating conversation turn execution.
@@ -11,11 +12,12 @@ import { BedrockConverseAdapter } from './bedrock_converse_adapter.js';
11
12
  export declare class ConversationTurnExecutor {
12
13
  private readonly event;
13
14
  private readonly bedrockConverseAdapter;
15
+ private readonly responseSender;
14
16
  private readonly logger;
15
17
  /**
16
18
  * Creates conversation turn executor.
17
19
  */
18
- constructor(event: ConversationTurnEvent, additionalTools: Array<ExecutableTool>, bedrockConverseAdapter?: BedrockConverseAdapter, logger?: Console);
20
+ constructor(event: ConversationTurnEvent, additionalTools: Array<ExecutableTool>, bedrockConverseAdapter?: BedrockConverseAdapter, responseSender?: ConversationTurnResponseSender, logger?: Console);
19
21
  execute: () => Promise<void>;
20
22
  }
21
23
  /**
@@ -23,6 +25,6 @@ export declare class ConversationTurnExecutor {
23
25
  * AppSync instance with conversational routes defined and sends response back.
24
26
  */
25
27
  export declare const handleConversationTurnEvent: (event: ConversationTurnEvent, props?: {
26
- tools?: Array<ExecutableTool<JSONSchema, any>>;
28
+ tools?: Array<ExecutableTool>;
27
29
  }) => Promise<void>;
28
30
  //# sourceMappingURL=conversation_turn_executor.d.ts.map
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleConversationTurnEvent = exports.ConversationTurnExecutor = void 0;
4
+ const conversation_turn_response_sender_js_1 = require("./conversation_turn_response_sender.js");
4
5
  const bedrock_converse_adapter_js_1 = require("./bedrock_converse_adapter.js");
5
6
  /**
6
7
  * This class is responsible for orchestrating conversation turn execution.
@@ -13,17 +14,17 @@ class ConversationTurnExecutor {
13
14
  /**
14
15
  * Creates conversation turn executor.
15
16
  */
16
- constructor(event, additionalTools, bedrockConverseAdapter = new bedrock_converse_adapter_js_1.BedrockConverseAdapter(event, additionalTools), logger = console) {
17
+ constructor(event, additionalTools, bedrockConverseAdapter = new bedrock_converse_adapter_js_1.BedrockConverseAdapter(event, additionalTools), responseSender = new conversation_turn_response_sender_js_1.ConversationTurnResponseSender(event), logger = console) {
17
18
  this.event = event;
18
19
  this.bedrockConverseAdapter = bedrockConverseAdapter;
20
+ this.responseSender = responseSender;
19
21
  this.logger = logger;
20
22
  this.execute = async () => {
21
23
  try {
22
24
  this.logger.log(`Handling conversation turn event, currentMessageId=${this.event.currentMessageId}, conversationId=${this.event.conversationId}`);
23
- this.logger.debug('Event received:', this.event);
24
- const assistantResponseContent = await this.bedrockConverseAdapter.askBedrock();
25
+ const assistantResponse = await this.bedrockConverseAdapter.askBedrock();
26
+ await this.responseSender.sendResponse(assistantResponse);
25
27
  this.logger.log(`Conversation turn event handled successfully, currentMessageId=${this.event.currentMessageId}, conversationId=${this.event.conversationId}`);
26
- this.logger.debug('Accumulated content', assistantResponseContent);
27
28
  }
28
29
  catch (e) {
29
30
  this.logger.error(`Failed to handle conversation turn event, currentMessageId=${this.event.currentMessageId}, conversationId=${this.event.conversationId}`, e);
@@ -38,13 +39,9 @@ exports.ConversationTurnExecutor = ConversationTurnExecutor;
38
39
  * This function handles a conversation turn event that is coming from
39
40
  * AppSync instance with conversational routes defined and sends response back.
40
41
  */
41
- const handleConversationTurnEvent = async (event,
42
- // This is by design, so that tools with different input types can be added
43
- // to single arrays. Downstream code doesn't use these types.
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
- props) => {
42
+ const handleConversationTurnEvent = async (event, props) => {
46
43
  var _a;
47
44
  await new ConversationTurnExecutor(event, (_a = props === null || props === void 0 ? void 0 : props.tools) !== null && _a !== void 0 ? _a : []).execute();
48
45
  };
49
46
  exports.handleConversationTurnEvent = handleConversationTurnEvent;
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX3R1cm5fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvY29udmVyc2F0aW9uX3R1cm5fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0VBQXVFO0FBRXZFOzs7Ozs7R0FNRztBQUNILE1BQWEsd0JBQXdCO0lBQ25DOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDN0MsZUFBc0MsRUFDckIseUJBQXlCLElBQUksb0RBQXNCLENBQ2xFLEtBQUssRUFDTCxlQUFlLENBQ2hCLEVBQ2dCLFNBQVMsT0FBTztRQU5oQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBR3RDO1FBQ2dCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFHbkMsWUFBTyxHQUFHLEtBQUssSUFBbUIsRUFBRTtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNiLHNEQUFzRCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FDakksQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWpELE1BQU0sd0JBQXdCLEdBQzVCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUVqRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDYixrRUFBa0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0Isb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQzdJLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsd0JBQXdCLENBQUMsQ0FBQzthQUNwRTtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLDhEQUE4RCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFDeEksQ0FBQyxDQUNGLENBQUM7Z0JBQ0YsaUVBQWlFO2dCQUNqRSxNQUFNLENBQUMsQ0FBQzthQUNUO1FBQ0gsQ0FBQyxDQUFDO0lBeEJDLENBQUM7Q0F5Qkw7QUFyQ0QsNERBcUNDO0FBRUQ7OztHQUdHO0FBQ0ksTUFBTSwyQkFBMkIsR0FBRyxLQUFLLEVBQzlDLEtBQTRCO0FBQzVCLDJFQUEyRTtBQUMzRSw2REFBNkQ7QUFDN0QsOERBQThEO0FBQzlELEtBQTBELEVBQzNDLEVBQUU7O0lBQ2pCLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFSVyxRQUFBLDJCQUEyQiwrQkFRdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb252ZXJzYXRpb25UdXJuRXZlbnQsIEV4ZWN1dGFibGVUb29sLCBKU09OU2NoZW1hIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyIH0gZnJvbSAnLi9iZWRyb2NrX2NvbnZlcnNlX2FkYXB0ZXIuanMnO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIG9yY2hlc3RyYXRpbmcgY29udmVyc2F0aW9uIHR1cm4gZXhlY3V0aW9uLlxuICogVGhlIGNvbnZlcnNhdGlvbiB0dXJuIGNvbnNpc3Qgb2Y6XG4gKiAxLiBBY2NlcHRpbmcgYW4gZXZlbnQgdGhhdCBpcyBjb21pbmcgZnJvbSBjb252ZXJzYXRpb25hbCByb3V0ZSByZXNvbHZlcnMgaW4gQXBwU3luYy5cbiAqIDIuIEludGVyYWN0aW5nIHdpdGggQVdTIEJlZHJvY2sgdG8gcHJvZHVjZSByZXNwb25zZS5cbiAqIDMuIFNlbmQgcmVzcG9uc2UgYmFjayB0byBBcHBTeW5jIGluIGEgZm9ybSBvZiBtdXRhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvblR1cm5FeGVjdXRvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGNvbnZlcnNhdGlvbiB0dXJuIGV4ZWN1dG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudDogQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICAgIGFkZGl0aW9uYWxUb29sczogQXJyYXk8RXhlY3V0YWJsZVRvb2w+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmVkcm9ja0NvbnZlcnNlQWRhcHRlciA9IG5ldyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyKFxuICAgICAgZXZlbnQsXG4gICAgICBhZGRpdGlvbmFsVG9vbHNcbiAgICApLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gY29uc29sZVxuICApIHt9XG5cbiAgZXhlY3V0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2dnZXIubG9nKFxuICAgICAgICBgSGFuZGxpbmcgY29udmVyc2F0aW9uIHR1cm4gZXZlbnQsIGN1cnJlbnRNZXNzYWdlSWQ9JHt0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWR9LCBjb252ZXJzYXRpb25JZD0ke3RoaXMuZXZlbnQuY29udmVyc2F0aW9uSWR9YFxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFdmVudCByZWNlaXZlZDonLCB0aGlzLmV2ZW50KTtcblxuICAgICAgY29uc3QgYXNzaXN0YW50UmVzcG9uc2VDb250ZW50ID1cbiAgICAgICAgYXdhaXQgdGhpcy5iZWRyb2NrQ29udmVyc2VBZGFwdGVyLmFza0JlZHJvY2soKTtcblxuICAgICAgdGhpcy5sb2dnZXIubG9nKFxuICAgICAgICBgQ29udmVyc2F0aW9uIHR1cm4gZXZlbnQgaGFuZGxlZCBzdWNjZXNzZnVsbHksIGN1cnJlbnRNZXNzYWdlSWQ9JHt0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWR9LCBjb252ZXJzYXRpb25JZD0ke3RoaXMuZXZlbnQuY29udmVyc2F0aW9uSWR9YFxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdBY2N1bXVsYXRlZCBjb250ZW50JywgYXNzaXN0YW50UmVzcG9uc2VDb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBoYW5kbGUgY29udmVyc2F0aW9uIHR1cm4gZXZlbnQsIGN1cnJlbnRNZXNzYWdlSWQ9JHt0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWR9LCBjb252ZXJzYXRpb25JZD0ke3RoaXMuZXZlbnQuY29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBtYXJrIGxhbWJkYSBleGVjdXRpb24gYXMgZmFpbGVkIGluIG1ldHJpY3MuXG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBjb252ZXJzYXRpb24gdHVybiBldmVudCB0aGF0IGlzIGNvbWluZyBmcm9tXG4gKiBBcHBTeW5jIGluc3RhbmNlIHdpdGggY29udmVyc2F0aW9uYWwgcm91dGVzIGRlZmluZWQgYW5kIHNlbmRzIHJlc3BvbnNlIGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVDb252ZXJzYXRpb25UdXJuRXZlbnQgPSBhc3luYyAoXG4gIGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gIC8vIFRoaXMgaXMgYnkgZGVzaWduLCBzbyB0aGF0IHRvb2xzIHdpdGggZGlmZmVyZW50IGlucHV0IHR5cGVzIGNhbiBiZSBhZGRlZFxuICAvLyB0byBzaW5nbGUgYXJyYXlzLiBEb3duc3RyZWFtIGNvZGUgZG9lc24ndCB1c2UgdGhlc2UgdHlwZXMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByb3BzPzogeyB0b29scz86IEFycmF5PEV4ZWN1dGFibGVUb29sPEpTT05TY2hlbWEsIGFueT4+IH1cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBuZXcgQ29udmVyc2F0aW9uVHVybkV4ZWN1dG9yKGV2ZW50LCBwcm9wcz8udG9vbHMgPz8gW10pLmV4ZWN1dGUoKTtcbn07XG4iXX0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX3R1cm5fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvY29udmVyc2F0aW9uX3R1cm5fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUdBQXdGO0FBRXhGLCtFQUF1RTtBQUV2RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLHdCQUF3QjtJQUNuQzs7T0FFRztJQUNILFlBQ21CLEtBQTRCLEVBQzdDLGVBQXNDLEVBQ3JCLHlCQUF5QixJQUFJLG9EQUFzQixDQUNsRSxLQUFLLEVBQ0wsZUFBZSxDQUNoQixFQUNnQixpQkFBaUIsSUFBSSxxRUFBOEIsQ0FBQyxLQUFLLENBQUMsRUFDMUQsU0FBUyxPQUFPO1FBUGhCLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBRTVCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FHdEM7UUFDZ0IsbUJBQWMsR0FBZCxjQUFjLENBQTRDO1FBQzFELFdBQU0sR0FBTixNQUFNLENBQVU7UUFHbkMsWUFBTyxHQUFHLEtBQUssSUFBbUIsRUFBRTtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNiLHNEQUFzRCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FDakksQ0FBQztnQkFFRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUV6RSxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRTFELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNiLGtFQUFrRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FDN0ksQ0FBQzthQUNIO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsOERBQThELElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUN4SSxDQUFDLENBQ0YsQ0FBQztnQkFDRixpRUFBaUU7Z0JBQ2pFLE1BQU0sQ0FBQyxDQUFDO2FBQ1Q7UUFDSCxDQUFDLENBQUM7SUF2QkMsQ0FBQztDQXdCTDtBQXJDRCw0REFxQ0M7QUFFRDs7O0dBR0c7QUFDSSxNQUFNLDJCQUEyQixHQUFHLEtBQUssRUFDOUMsS0FBNEIsRUFDNUIsS0FBeUMsRUFDMUIsRUFBRTs7SUFDakIsTUFBTSxJQUFJLHdCQUF3QixDQUFDLEtBQUssRUFBRSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzFFLENBQUMsQ0FBQztBQUxXLFFBQUEsMkJBQTJCLCtCQUt0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnZlcnNhdGlvblR1cm5SZXNwb25zZVNlbmRlciB9IGZyb20gJy4vY29udmVyc2F0aW9uX3R1cm5fcmVzcG9uc2Vfc2VuZGVyLmpzJztcbmltcG9ydCB7IENvbnZlcnNhdGlvblR1cm5FdmVudCwgRXhlY3V0YWJsZVRvb2wgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IEJlZHJvY2tDb252ZXJzZUFkYXB0ZXIgfSBmcm9tICcuL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci5qcyc7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Igb3JjaGVzdHJhdGluZyBjb252ZXJzYXRpb24gdHVybiBleGVjdXRpb24uXG4gKiBUaGUgY29udmVyc2F0aW9uIHR1cm4gY29uc2lzdCBvZjpcbiAqIDEuIEFjY2VwdGluZyBhbiBldmVudCB0aGF0IGlzIGNvbWluZyBmcm9tIGNvbnZlcnNhdGlvbmFsIHJvdXRlIHJlc29sdmVycyBpbiBBcHBTeW5jLlxuICogMi4gSW50ZXJhY3Rpbmcgd2l0aCBBV1MgQmVkcm9jayB0byBwcm9kdWNlIHJlc3BvbnNlLlxuICogMy4gU2VuZCByZXNwb25zZSBiYWNrIHRvIEFwcFN5bmMgaW4gYSBmb3JtIG9mIG11dGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uVHVybkV4ZWN1dG9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgY29udmVyc2F0aW9uIHR1cm4gZXhlY3V0b3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgYWRkaXRpb25hbFRvb2xzOiBBcnJheTxFeGVjdXRhYmxlVG9vbD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWRyb2NrQ29udmVyc2VBZGFwdGVyID0gbmV3IEJlZHJvY2tDb252ZXJzZUFkYXB0ZXIoXG4gICAgICBldmVudCxcbiAgICAgIGFkZGl0aW9uYWxUb29sc1xuICAgICksXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZVNlbmRlciA9IG5ldyBDb252ZXJzYXRpb25UdXJuUmVzcG9uc2VTZW5kZXIoZXZlbnQpLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gY29uc29sZVxuICApIHt9XG5cbiAgZXhlY3V0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2dnZXIubG9nKFxuICAgICAgICBgSGFuZGxpbmcgY29udmVyc2F0aW9uIHR1cm4gZXZlbnQsIGN1cnJlbnRNZXNzYWdlSWQ9JHt0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWR9LCBjb252ZXJzYXRpb25JZD0ke3RoaXMuZXZlbnQuY29udmVyc2F0aW9uSWR9YFxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXNzaXN0YW50UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJlZHJvY2tDb252ZXJzZUFkYXB0ZXIuYXNrQmVkcm9jaygpO1xuXG4gICAgICBhd2FpdCB0aGlzLnJlc3BvbnNlU2VuZGVyLnNlbmRSZXNwb25zZShhc3Npc3RhbnRSZXNwb25zZSk7XG5cbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhcbiAgICAgICAgYENvbnZlcnNhdGlvbiB0dXJuIGV2ZW50IGhhbmRsZWQgc3VjY2Vzc2Z1bGx5LCBjdXJyZW50TWVzc2FnZUlkPSR7dGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkfSwgY29udmVyc2F0aW9uSWQ9JHt0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkfWBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gaGFuZGxlIGNvbnZlcnNhdGlvbiB0dXJuIGV2ZW50LCBjdXJyZW50TWVzc2FnZUlkPSR7dGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkfSwgY29udmVyc2F0aW9uSWQ9JHt0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgICAvLyBQcm9wYWdhdGUgZXJyb3IgdG8gbWFyayBsYW1iZGEgZXhlY3V0aW9uIGFzIGZhaWxlZCBpbiBtZXRyaWNzLlxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGEgY29udmVyc2F0aW9uIHR1cm4gZXZlbnQgdGhhdCBpcyBjb21pbmcgZnJvbVxuICogQXBwU3luYyBpbnN0YW5jZSB3aXRoIGNvbnZlcnNhdGlvbmFsIHJvdXRlcyBkZWZpbmVkIGFuZCBzZW5kcyByZXNwb25zZSBiYWNrLlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlQ29udmVyc2F0aW9uVHVybkV2ZW50ID0gYXN5bmMgKFxuICBldmVudDogQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICBwcm9wcz86IHsgdG9vbHM/OiBBcnJheTxFeGVjdXRhYmxlVG9vbD4gfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IG5ldyBDb252ZXJzYXRpb25UdXJuRXhlY3V0b3IoZXZlbnQsIHByb3BzPy50b29scyA/PyBbXSkuZXhlY3V0ZSgpO1xufTtcbiJdfQ==
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { ConversationTurnEvent } from './types.js';
3
2
  import type { ContentBlock } from '@aws-sdk/client-bedrock-runtime';
4
3
  import { GraphqlRequestExecutor } from './graphql_request_executor';
@@ -16,11 +15,10 @@ export type MutationResponseInput = {
16
15
  export declare class ConversationTurnResponseSender {
17
16
  private readonly event;
18
17
  private readonly graphqlRequestExecutor;
19
- private readonly logger;
20
18
  /**
21
19
  * Creates conversation turn response sender.
22
20
  */
23
- constructor(event: ConversationTurnEvent, graphqlRequestExecutor?: GraphqlRequestExecutor, logger?: Console);
21
+ constructor(event: ConversationTurnEvent, graphqlRequestExecutor?: GraphqlRequestExecutor);
24
22
  sendResponse: (message: ContentBlock[]) => Promise<void>;
25
23
  private createMutationRequest;
26
24
  }