From 6e45a864abf987ea7d034cb12e3c5d70b29a4638 Mon Sep 17 00:00:00 2001 From: Pascal Holy Date: Tue, 26 Jan 2021 14:03:40 +0100 Subject: [PATCH 01/46] Bump version to 0.7.0.alpha --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index a918a2aa18..88e5277ec8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.6.0 +0.7.0.alpha From 97a27d91f7d7a68b99f91b423afd7c604e140596 Mon Sep 17 00:00:00 2001 From: Bodo Tasche Date: Tue, 26 Jan 2021 15:34:18 +0100 Subject: [PATCH 02/46] =?UTF-8?q?[#745]=20Fixing=20demo=20api=20host=20env?= =?UTF-8?q?=20when=20running=E2=80=A6=20(#746)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …locally closes #745 --- frontend/demo/BUILD | 1 + frontend/demo/development.html | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 frontend/demo/development.html diff --git a/frontend/demo/BUILD b/frontend/demo/BUILD index a3051e3755..57eadf921e 100644 --- a/frontend/demo/BUILD +++ b/frontend/demo/BUILD @@ -38,6 +38,7 @@ ts_library( web_app( name = "bundle", app_lib = ":app", + dev_index = "development.html", entry = "frontend/demo/src/index.js", index = ":index.html", module_deps = module_deps, diff --git a/frontend/demo/development.html b/frontend/demo/development.html new file mode 100644 index 0000000000..3e77fcabd3 --- /dev/null +++ b/frontend/demo/development.html @@ -0,0 +1,23 @@ + + + + Airy UI + + + + + + + + + + + +
+ + From 1a35057533d86e1e968020fff0f60caac33c3b09 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Wed, 27 Jan 2021 09:00:13 +0100 Subject: [PATCH 03/46] Update backend message content for a transparent send message API (#727) * Update docs to reflect upcoming content model change * Remove dependencies on the mapping library * Fix more tests * Removed ts generator target --- WORKSPACE | 1 - .../api/config/ClientConfigController.java | 1 - .../core/api/config/ServiceDiscovery.java | 2 - .../api/auth/controllers/UsersController.java | 4 +- backend/api/communication/BUILD | 1 - .../ConversationsController.java | 7 +- .../airy/core/api/communication/Mapper.java | 16 +- .../api/communication/MetadataController.java | 2 +- .../communication/WebSocketController.java | 4 +- .../payload/MessageResponsePayload.java | 5 +- .../payload/SendMessageRequestPayload.java | 4 +- .../communication/ConversationsInfoTest.java | 2 +- .../communication/ConversationsTagTest.java | 3 +- .../core/api/communication/MessagesTest.java | 2 +- .../communication/MetadataControllerTest.java | 2 +- .../SendMessageControllerTest.java | 53 +- .../api/communication/UnreadCountTest.java | 6 +- .../WebSocketControllerTest.java | 2 +- .../co/airy/core/media/config/AwsConfig.java | 1 - .../java/co/airy/core/media/MessagesTest.java | 1 - .../java/co/airy/core/media/MetadataTest.java | 3 - backend/sources/chat-plugin/BUILD | 1 - .../java/co/airy/core/chat_plugin/Mapper.java | 9 +- .../payload/MessageResponsePayload.java | 4 +- .../payload/SendMessageRequestPayload.java | 12 +- .../core/chat_plugin/ChatControllerTest.java | 13 +- backend/sources/facebook/connector/BUILD | 1 - .../airy/core/sources/facebook/Connector.java | 10 +- .../co/airy/core/sources/facebook/Stores.java | 2 +- .../core/sources/facebook/api/Mapper.java | 31 +- .../sources/facebook/api/model/Pages.java | 1 - .../api/model/SendMessagePayload.java | 22 +- .../sources/facebook/FetchMetadataTest.java | 2 +- .../sources/facebook/SendMessageTest.java | 10 +- .../sources/facebook/EventsRouterTest.java | 2 +- backend/sources/google/connector/BUILD | 1 - .../airy/core/sources/google/Connector.java | 4 +- .../google/model/SendMessagePayload.java | 26 - .../core/sources/google/services/Api.java | 4 +- .../core/sources/google/services/Mapper.java | 27 +- .../core/sources/google/SendMessageTest.java | 18 +- .../core/sources/google/EventsRouter.java | 2 +- .../core/sources/google/InfoExtractor.java | 3 +- .../core/sources/google/EventsRouterTest.java | 2 +- backend/sources/twilio/connector/BUILD | 1 - .../sources/twilio/ChannelsController.java | 2 - .../airy/core/sources/twilio/Connector.java | 19 +- .../core/sources/twilio/SendMessageTest.java | 5 +- backend/webhook/publisher/BUILD | 1 - .../airy/core/webhook/publisher/Mapper.java | 22 +- .../webhook/publisher/model/WebhookBody.java | 2 +- docs/docs/api/http.md | 71 +- docs/docs/api/webhook.md | 2 +- docs/docs/api/websocket.md | 8 +- docs/docs/glossary.md | 2 +- docs/docs/sources/chat-plugin.md | 21 +- docs/docs/sources/facebook.md | 40 - lib/java/mapping/BUILD | 10 - lib/java/mapping/README.md | 15 - .../java/co/airy/ts_generator/Main.java | 35 - maven_install.json | 1213 ++++++----------- 61 files changed, 493 insertions(+), 1305 deletions(-) delete mode 100644 backend/sources/google/connector/src/main/java/co/airy/core/sources/google/model/SendMessagePayload.java delete mode 100644 lib/java/mapping/src/ts-generator/java/co/airy/ts_generator/Main.java diff --git a/WORKSPACE b/WORKSPACE index fa8ef5d216..f1eff44975 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -34,7 +34,6 @@ maven_install( "com.google.auth:google-auth-library-oauth2-http:0.20.0", "com.jayway.jsonpath:json-path:2.4.0", "com.twilio.sdk:twilio:7.51.0", - "cz.habarta.typescript-generator:typescript-generator-core:2.26.723", "io.confluent:kafka-avro-serializer:5.5.1", "io.confluent:kafka-schema-registry-client:5.5.1", "io.confluent:kafka-schema-registry:5.5.1", diff --git a/backend/api/admin/src/main/java/co/airy/core/api/config/ClientConfigController.java b/backend/api/admin/src/main/java/co/airy/core/api/config/ClientConfigController.java index 6977821c0c..1bd872f298 100644 --- a/backend/api/admin/src/main/java/co/airy/core/api/config/ClientConfigController.java +++ b/backend/api/admin/src/main/java/co/airy/core/api/config/ClientConfigController.java @@ -4,7 +4,6 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.HashMap; import java.util.Map; @RestController diff --git a/backend/api/admin/src/main/java/co/airy/core/api/config/ServiceDiscovery.java b/backend/api/admin/src/main/java/co/airy/core/api/config/ServiceDiscovery.java index 404921a692..90e5ef6f0f 100644 --- a/backend/api/admin/src/main/java/co/airy/core/api/config/ServiceDiscovery.java +++ b/backend/api/admin/src/main/java/co/airy/core/api/config/ServiceDiscovery.java @@ -1,10 +1,8 @@ package co.airy.core.api.config; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; -import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; diff --git a/backend/api/auth/src/main/java/co/airy/core/api/auth/controllers/UsersController.java b/backend/api/auth/src/main/java/co/airy/core/api/auth/controllers/UsersController.java index 153faf9aea..9c4634f78f 100644 --- a/backend/api/auth/src/main/java/co/airy/core/api/auth/controllers/UsersController.java +++ b/backend/api/auth/src/main/java/co/airy/core/api/auth/controllers/UsersController.java @@ -15,10 +15,10 @@ import co.airy.core.api.auth.dto.User; import co.airy.core.api.auth.services.Mail; import co.airy.core.api.auth.services.Password; -import co.airy.spring.web.payload.EmptyResponsePayload; -import co.airy.spring.web.payload.RequestErrorResponsePayload; import co.airy.spring.auth.IgnoreAuthPattern; import co.airy.spring.jwt.Jwt; +import co.airy.spring.web.payload.EmptyResponsePayload; +import co.airy.spring.web.payload.RequestErrorResponsePayload; import org.jdbi.v3.core.statement.UnableToExecuteStatementException; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; diff --git a/backend/api/communication/BUILD b/backend/api/communication/BUILD index 3391e22829..3092b59af6 100644 --- a/backend/api/communication/BUILD +++ b/backend/api/communication/BUILD @@ -11,7 +11,6 @@ app_deps = [ "//backend/model/channel", "//backend/model/metadata", "//backend:read-receipt", - "//lib/java/mapping", "//lib/java/date", "//lib/java/pagination", "//lib/java/spring/auth:spring-auth", diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java index a5c63448f5..4adf279af0 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java @@ -1,13 +1,11 @@ package co.airy.core.api.communication; import co.airy.avro.communication.Metadata; -import co.airy.core.api.communication.lucene.ExtendedQueryParser; -import co.airy.model.metadata.MetadataKeys; -import co.airy.model.metadata.Subject; import co.airy.avro.communication.ReadReceipt; import co.airy.core.api.communication.dto.Conversation; import co.airy.core.api.communication.dto.ConversationIndex; import co.airy.core.api.communication.dto.LuceneQueryResult; +import co.airy.core.api.communication.lucene.ExtendedQueryParser; import co.airy.core.api.communication.lucene.ReadOnlyLuceneStore; import co.airy.core.api.communication.payload.ConversationByIdRequestPayload; import co.airy.core.api.communication.payload.ConversationListRequestPayload; @@ -15,6 +13,8 @@ import co.airy.core.api.communication.payload.ConversationResponsePayload; import co.airy.core.api.communication.payload.ConversationTagRequestPayload; import co.airy.core.api.communication.payload.ResponseMetadata; +import co.airy.model.metadata.MetadataKeys; +import co.airy.model.metadata.Subject; import co.airy.pagination.Page; import co.airy.pagination.Paginator; import co.airy.spring.web.payload.EmptyResponsePayload; @@ -23,7 +23,6 @@ import org.apache.kafka.streams.state.ReadOnlyKeyValueStore; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.queryparser.classic.ParseException; -import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.Query; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java index ec914f15bd..a7583ffe53 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java @@ -1,30 +1,24 @@ package co.airy.core.api.communication; import co.airy.avro.communication.Message; -import co.airy.model.metadata.MetadataKeys; -import co.airy.model.metadata.MetadataRepository; -import co.airy.model.channel.ChannelPayload; import co.airy.core.api.communication.dto.Conversation; import co.airy.core.api.communication.dto.DisplayName; import co.airy.core.api.communication.payload.ContactResponsePayload; import co.airy.core.api.communication.payload.ConversationResponsePayload; import co.airy.core.api.communication.payload.MessageResponsePayload; -import co.airy.mapping.ContentMapper; +import co.airy.model.channel.ChannelPayload; +import co.airy.model.metadata.MetadataKeys; +import co.airy.model.metadata.MetadataRepository; import org.springframework.stereotype.Component; import java.util.Map; -import static co.airy.model.metadata.MetadataRepository.getConversationInfo; import static co.airy.date.format.DateFormat.isoFromMillis; +import static co.airy.model.metadata.MetadataRepository.getConversationInfo; import static java.util.stream.Collectors.toList; @Component public class Mapper { - private final ContentMapper contentMapper; - - Mapper(ContentMapper contentMapper) { - this.contentMapper = contentMapper; - } public ConversationResponsePayload fromConversation(Conversation conversation) { final Map metadata = conversation.getMetadata(); @@ -63,7 +57,7 @@ private ContactResponsePayload getContact(Conversation conversation) { public MessageResponsePayload fromMessage(Message message) { return MessageResponsePayload.builder() - .content(contentMapper.renderWithDefaultAndLog(message)) + .content(message.getContent()) .senderType(message.getSenderType().toString().toLowerCase()) .deliveryState(message.getDeliveryState().toString().toLowerCase()) .id(message.getId()) diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/MetadataController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/MetadataController.java index 8ac527219b..ffdff2549c 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/MetadataController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/MetadataController.java @@ -1,9 +1,9 @@ package co.airy.core.api.communication; import co.airy.avro.communication.Metadata; -import co.airy.model.metadata.Subject; import co.airy.core.api.communication.payload.RemoveMetadataRequestPayload; import co.airy.core.api.communication.payload.SetMetadataRequestPayload; +import co.airy.model.metadata.Subject; import co.airy.spring.web.payload.EmptyResponsePayload; import co.airy.spring.web.payload.RequestErrorResponsePayload; import org.springframework.http.HttpStatus; diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java index 5df863ce0c..9ed1561b11 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java @@ -2,18 +2,18 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.Message; -import co.airy.model.channel.ChannelPayload; import co.airy.core.api.communication.dto.UnreadCountState; import co.airy.core.api.communication.payload.MessageUpsertPayload; import co.airy.core.api.communication.payload.UnreadCountPayload; +import co.airy.model.channel.ChannelPayload; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import java.time.Instant; import static co.airy.avro.communication.ChannelConnectionState.CONNECTED; -import static co.airy.model.channel.ChannelPayload.fromChannel; import static co.airy.date.format.DateFormat.isoFromMillis; +import static co.airy.model.channel.ChannelPayload.fromChannel; @Service public class WebSocketController { diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/MessageResponsePayload.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/MessageResponsePayload.java index 806db54106..71d3eee6c1 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/MessageResponsePayload.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/MessageResponsePayload.java @@ -1,20 +1,17 @@ package co.airy.core.api.communication.payload; -import co.airy.mapping.model.Content; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; - @Data @Builder @NoArgsConstructor @AllArgsConstructor public class MessageResponsePayload { private String id; - private List content; + private String content; private String senderType; private String sentAt; private String deliveryState; diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/SendMessageRequestPayload.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/SendMessageRequestPayload.java index b843e80bd6..6ed2e29156 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/SendMessageRequestPayload.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/payload/SendMessageRequestPayload.java @@ -1,6 +1,6 @@ package co.airy.core.api.communication.payload; -import co.airy.mapping.model.Content; +import com.fasterxml.jackson.databind.JsonNode; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -17,5 +17,5 @@ public class SendMessageRequestPayload { private UUID conversationId; @Valid @NotNull - private Content message; + private JsonNode message; } diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsInfoTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsInfoTest.java index 9945a8050a..43c56fa0cb 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsInfoTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsInfoTest.java @@ -22,8 +22,8 @@ import java.util.UUID; -import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.test.Timing.retryOnException; import static org.hamcrest.core.Is.is; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsTagTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsTagTest.java index 368939368a..64cedd6317 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsTagTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsTagTest.java @@ -3,7 +3,6 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.ChannelConnectionState; import co.airy.core.api.communication.util.TestConversation; -import co.airy.kafka.schema.application.ApplicationCommunicationChannels; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; import co.airy.spring.core.AirySpringBootApplication; @@ -23,8 +22,8 @@ import java.util.UUID; -import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.test.Timing.retryOnException; import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.hamcrest.core.Is.is; diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java index 0fb81ccfd0..e2746910b0 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java @@ -27,8 +27,8 @@ import java.util.List; import java.util.UUID; -import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.test.Timing.retryOnException; import static java.util.Comparator.reverseOrder; import static org.hamcrest.Matchers.contains; diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/MetadataControllerTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/MetadataControllerTest.java index 74af0d44de..cbc2b609c4 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/MetadataControllerTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/MetadataControllerTest.java @@ -22,8 +22,8 @@ import java.util.UUID; -import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.test.Timing.retryOnException; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/SendMessageControllerTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/SendMessageControllerTest.java index 3bb6539c35..ccbaea3578 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/SendMessageControllerTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/SendMessageControllerTest.java @@ -7,10 +7,6 @@ import co.airy.core.api.communication.util.TestConversation; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; -import co.airy.mapping.ContentMapper; -import co.airy.mapping.model.Audio; -import co.airy.mapping.model.Content; -import co.airy.mapping.model.Text; import co.airy.spring.core.AirySpringBootApplication; import co.airy.spring.test.WebTestHelper; import com.fasterxml.jackson.databind.JsonNode; @@ -36,12 +32,9 @@ import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; import static co.airy.core.api.communication.util.Topics.applicationCommunicationMessages; import static co.airy.core.api.communication.util.Topics.getTopics; -import static co.airy.test.Timing.retryOnException; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.everyItem; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; -import static org.hamcrest.core.Is.isA; import static org.junit.jupiter.api.Assertions.fail; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -68,9 +61,6 @@ public class SendMessageControllerTest { @Autowired private WebTestHelper webTestHelper; - @Autowired - private ContentMapper contentMapper; - @BeforeAll static void beforeAll() throws Exception { kafkaTestHelper = new KafkaTestHelper(sharedKafkaTestResource, getTopics()); @@ -91,45 +81,23 @@ void beforeEach() throws Exception { webTestHelper.waitUntilHealthy(); } - - @Test - void failsForUnknownContentSchema() throws Exception { - String payload = String.format("{\"conversation_id\":\"%s\"," + - "\"message\":{\"text\":\"answeris42\",\"type\":\"unknown\"}}", - conversationId); - final String userId = "user-id"; - - webTestHelper.post("/messages.send", payload, userId) - .andExpect(status().isBadRequest()); - } - - @Test - void canSendTemplateMessages() throws Exception { - String payload = String.format("{\"conversation_id\":\"%s\"," + - "\"message\":{\"payload\":{\"a nested\":\"structure\"},\"type\":\"source.template\"}}", - conversationId); - final String userId = "user-id"; - - webTestHelper.post("/messages.send", payload, userId) - .andExpect(status().isOk()); - } - @Test void canSendTextMessages() throws Exception { - String payload = String.format("{\"conversation_id\":\"%s\"," + - "\"message\":{\"text\":\"answeris42\",\"type\":\"text\"}}", - conversationId); + final String messagePayload = "{\"text\":\"answeris42\"}"; + final String requestPayload = String.format("{\"conversation_id\":\"%s\"," + + "\"message\":%s}", + conversationId, messagePayload); final String userId = "user-id"; - final String response = webTestHelper.post("/messages.send", payload, userId) + final String response = webTestHelper.post("/messages.send", requestPayload, userId) .andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(); final JsonNode responseNode = new ObjectMapper().readTree(response); final String messageId = responseNode.get("id").textValue(); - List> records = kafkaTestHelper.consumeRecords(3, applicationCommunicationMessages.name()); - assertThat(records, hasSize(3)); + List> records = kafkaTestHelper.consumeRecords(2, applicationCommunicationMessages.name()); + assertThat(records, hasSize(2)); final Optional maybeMessage = records.stream() .map(ConsumerRecord::value) @@ -141,9 +109,6 @@ void canSendTextMessages() throws Exception { } final Message message = maybeMessage.get(); - final List contents = contentMapper.render(message); - assertThat(contents, hasSize(1)); - assertThat(contents, everyItem(isA(Text.class))); - assertThat(message.getSenderId(), is(userId)); + assertThat(message.getContent(), equalTo(messagePayload)); } } diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/UnreadCountTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/UnreadCountTest.java index 598ce5cbce..bf505c08d6 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/UnreadCountTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/UnreadCountTest.java @@ -3,10 +3,6 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.ChannelConnectionState; import co.airy.core.api.communication.util.TestConversation; -import co.airy.kafka.schema.application.ApplicationCommunicationChannels; -import co.airy.kafka.schema.application.ApplicationCommunicationMessages; -import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; -import co.airy.kafka.schema.application.ApplicationCommunicationReadReceipts; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; import co.airy.spring.core.AirySpringBootApplication; @@ -26,8 +22,8 @@ import java.util.UUID; -import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.test.Timing.retryOnException; import static org.hamcrest.core.IsEqual.equalTo; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/WebSocketControllerTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/WebSocketControllerTest.java index f037203f75..c68ef5b521 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/WebSocketControllerTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/WebSocketControllerTest.java @@ -42,8 +42,8 @@ import static co.airy.core.api.communication.WebSocketController.QUEUE_CHANNEL_CONNECTED; import static co.airy.core.api.communication.WebSocketController.QUEUE_MESSAGE; import static co.airy.core.api.communication.WebSocketController.QUEUE_UNREAD_COUNT; -import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.getTopics; import static co.airy.test.Timing.retryOnException; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; diff --git a/backend/media/src/main/java/co/airy/core/media/config/AwsConfig.java b/backend/media/src/main/java/co/airy/core/media/config/AwsConfig.java index f718d2be19..6dc2388204 100644 --- a/backend/media/src/main/java/co/airy/core/media/config/AwsConfig.java +++ b/backend/media/src/main/java/co/airy/core/media/config/AwsConfig.java @@ -3,7 +3,6 @@ import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import org.springframework.beans.factory.annotation.Value; diff --git a/backend/media/src/test/java/co/airy/core/media/MessagesTest.java b/backend/media/src/test/java/co/airy/core/media/MessagesTest.java index dbe108ec69..86666391d2 100644 --- a/backend/media/src/test/java/co/airy/core/media/MessagesTest.java +++ b/backend/media/src/test/java/co/airy/core/media/MessagesTest.java @@ -45,7 +45,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/backend/media/src/test/java/co/airy/core/media/MetadataTest.java b/backend/media/src/test/java/co/airy/core/media/MetadataTest.java index 0c0bf154e3..30370741cb 100644 --- a/backend/media/src/test/java/co/airy/core/media/MetadataTest.java +++ b/backend/media/src/test/java/co/airy/core/media/MetadataTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; @@ -40,8 +39,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.isNotNull; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/backend/sources/chat-plugin/BUILD b/backend/sources/chat-plugin/BUILD index 6372305e28..b820727a48 100644 --- a/backend/sources/chat-plugin/BUILD +++ b/backend/sources/chat-plugin/BUILD @@ -12,7 +12,6 @@ app_deps = [ "//backend/model/message", "//lib/java/uuid", "//lib/java/date", - "//lib/java/mapping", "//lib/java/spring/web:spring-web", "//lib/java/spring/kafka/core:spring-kafka-core", "//lib/java/spring/kafka/streams:spring-kafka-streams", diff --git a/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/Mapper.java b/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/Mapper.java index 23ceeab253..51310b2c73 100644 --- a/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/Mapper.java +++ b/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/Mapper.java @@ -2,22 +2,15 @@ import co.airy.avro.communication.Message; import co.airy.core.chat_plugin.payload.MessageResponsePayload; -import co.airy.mapping.ContentMapper; import org.springframework.stereotype.Component; import static co.airy.date.format.DateFormat.isoFromMillis; @Component public class Mapper { - private final ContentMapper contentMapper; - - Mapper(ContentMapper contentMapper) { - this.contentMapper = contentMapper; - } - public MessageResponsePayload fromMessage(Message message) { return MessageResponsePayload.builder() - .content(contentMapper.renderWithDefaultAndLog(message)) + .content(message.getContent()) .senderType(message.getSenderType().toString().toLowerCase()) .state(message.getDeliveryState().toString().toLowerCase()) .id(message.getId()) diff --git a/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/MessageResponsePayload.java b/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/MessageResponsePayload.java index 150e27f2e4..943f6eba47 100644 --- a/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/MessageResponsePayload.java +++ b/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/MessageResponsePayload.java @@ -1,13 +1,11 @@ package co.airy.core.chat_plugin.payload; -import co.airy.mapping.model.Content; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.util.List; @Data @Builder @@ -15,7 +13,7 @@ @AllArgsConstructor public class MessageResponsePayload implements Serializable { private String id; - private List content; + private String content; private String state; private String senderType; private String sentAt; diff --git a/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/SendMessageRequestPayload.java b/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/SendMessageRequestPayload.java index 6904a5f65a..c368f77c90 100644 --- a/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/SendMessageRequestPayload.java +++ b/backend/sources/chat-plugin/src/main/java/co/airy/core/chat_plugin/payload/SendMessageRequestPayload.java @@ -1,16 +1,20 @@ package co.airy.core.chat_plugin.payload; -import co.airy.mapping.model.Text; -import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data @NoArgsConstructor public class SendMessageRequestPayload { @NotNull - private Text message; + private TextMessage message; + + @Data + @NoArgsConstructor + public static class TextMessage { + @NotNull + private String text; + } } diff --git a/backend/sources/chat-plugin/src/test/java/co/airy/core/chat_plugin/ChatControllerTest.java b/backend/sources/chat-plugin/src/test/java/co/airy/core/chat_plugin/ChatControllerTest.java index 267ec3c780..96152cc95b 100644 --- a/backend/sources/chat-plugin/src/test/java/co/airy/core/chat_plugin/ChatControllerTest.java +++ b/backend/sources/chat-plugin/src/test/java/co/airy/core/chat_plugin/ChatControllerTest.java @@ -7,7 +7,6 @@ import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; -import co.airy.mapping.model.Text; import co.airy.spring.core.AirySpringBootApplication; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -44,7 +43,6 @@ import static co.airy.core.chat_plugin.WebSocketController.QUEUE_MESSAGE; import static co.airy.test.Timing.retryOnException; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; @@ -126,14 +124,13 @@ void authenticateSendAndReceive() throws Exception { .headers(buildHeaders(token)) .content(sendMessagePayload)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.content[0].text", containsString(messageText))), + .andExpect(jsonPath("$.content", containsString(messageText))), "Message was not sent"); final MessageUpsertPayload messageUpsertPayload = messageFuture.get(); assertNotNull(messageUpsertPayload); - final Text text = (Text) messageUpsertPayload.getMessage().getContent().get(0); - assertThat(text.getText(), containsString(messageText)); + assertThat(messageUpsertPayload.getMessage().getContent(), containsString(messageText)); } @Test @@ -150,12 +147,12 @@ void canResumeConversation() throws Exception { final String authToken = jsonNode.get("token").textValue(); final String messageText = "Talk to you later!"; - final String sendMessagePayload = "{\"message\": { \"text\": \"" + messageText + "\", \"type\":\"text\" }}"; + final String sendMessagePayload = "{\"message\":{\"text\":\"" + messageText + "\"}}"; mvc.perform(post("/chatplugin.send") .headers(buildHeaders(authToken)) .content(sendMessagePayload)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.content[0].text", containsString(messageText))); + .andExpect(jsonPath("$.content", containsString(messageText))); response = mvc.perform(post("/chatplugin.resumeToken") .headers(buildHeaders(authToken)) @@ -175,7 +172,7 @@ void canResumeConversation() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.token", is(not(nullValue())))) .andExpect(jsonPath("$.messages", hasSize(1))) - .andExpect(jsonPath("$.messages[0].content[0].text", equalTo(messageText))); + .andExpect(jsonPath("$.messages[0].content", containsString(messageText))); }, "Did not resume conversation"); } diff --git a/backend/sources/facebook/connector/BUILD b/backend/sources/facebook/connector/BUILD index a03e6ad0d3..04704f3e58 100644 --- a/backend/sources/facebook/connector/BUILD +++ b/backend/sources/facebook/connector/BUILD @@ -10,7 +10,6 @@ app_deps = [ "//backend/model/metadata", "//lib/java/uuid", "//lib/java/log", - "//lib/java/mapping", "//lib/java/spring/web:spring-web", "//lib/java/spring/auth:spring-auth", "//lib/java/spring/kafka/core:spring-kafka-core", diff --git a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Connector.java b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Connector.java index 8d5c2c561a..c456286661 100644 --- a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Connector.java +++ b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Connector.java @@ -3,15 +3,15 @@ import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; import co.airy.avro.communication.Metadata; -import co.airy.model.metadata.MetadataKeys; -import co.airy.core.sources.facebook.dto.SendMessageRequest; -import co.airy.core.sources.facebook.dto.Conversation; -import co.airy.core.sources.facebook.api.model.SendMessagePayload; -import co.airy.core.sources.facebook.api.model.UserProfile; import co.airy.core.sources.facebook.api.Api; import co.airy.core.sources.facebook.api.ApiException; import co.airy.core.sources.facebook.api.Mapper; +import co.airy.core.sources.facebook.api.model.SendMessagePayload; +import co.airy.core.sources.facebook.api.model.UserProfile; +import co.airy.core.sources.facebook.dto.Conversation; +import co.airy.core.sources.facebook.dto.SendMessageRequest; import co.airy.log.AiryLoggerFactory; +import co.airy.model.metadata.MetadataKeys; import co.airy.spring.auth.IgnoreAuthPattern; import co.airy.spring.web.filters.RequestLoggingIgnorePatterns; import org.apache.kafka.streams.KeyValue; diff --git a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Stores.java b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Stores.java index ea6cb8e91e..309032af93 100644 --- a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Stores.java +++ b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/Stores.java @@ -6,8 +6,8 @@ import co.airy.avro.communication.Message; import co.airy.avro.communication.Metadata; import co.airy.avro.communication.SenderType; -import co.airy.core.sources.facebook.dto.SendMessageRequest; import co.airy.core.sources.facebook.dto.Conversation; +import co.airy.core.sources.facebook.dto.SendMessageRequest; import co.airy.kafka.schema.application.ApplicationCommunicationChannels; import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; diff --git a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/Mapper.java b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/Mapper.java index 5a41f71176..1eab0349bc 100644 --- a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/Mapper.java +++ b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/Mapper.java @@ -3,50 +3,23 @@ import co.airy.avro.communication.Message; import co.airy.core.sources.facebook.api.model.SendMessagePayload; import co.airy.core.sources.facebook.dto.SendMessageRequest; -import co.airy.mapping.ContentMapper; -import co.airy.mapping.model.Content; -import co.airy.mapping.model.SourceTemplate; -import co.airy.mapping.model.Text; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.stereotype.Service; -import java.util.List; - @Service public class Mapper { - private final ContentMapper mapper; - - Mapper(ContentMapper mapper) { - this.mapper = mapper; - } + private final ObjectMapper objectMapper = new ObjectMapper(); public SendMessagePayload fromSendMessageRequest(SendMessageRequest sendMessageRequest) throws Exception { final Message message = sendMessageRequest.getMessage(); - - final SendMessagePayload.MessagePayload messagePayload = new SendMessagePayload.MessagePayload(); - - final Content content = mapper.render(message) - .stream() - .findFirst() - .orElseThrow(() -> new Exception("Message is empty")); - - if (content instanceof Text) { - messagePayload.setText(((Text) content).getText()); - } else if (content instanceof SourceTemplate) { - messagePayload.setAttachment(SendMessagePayload.AttachmentPayload.builder() - .type("template") - .payload(((SourceTemplate) content).getPayload()) - .build()); - } - + final JsonNode messagePayload = objectMapper.readTree(message.getContent()); SendMessagePayload.SendMessagePayloadBuilder builder = SendMessagePayload.builder() .recipient(SendMessagePayload.MessageRecipient.builder() .id(sendMessageRequest.getConversation().getSourceConversationId()) .build()) .message(messagePayload); - return builder.build(); } } diff --git a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/Pages.java b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/Pages.java index 743883e729..fca91bdac4 100644 --- a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/Pages.java +++ b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/Pages.java @@ -1,6 +1,5 @@ package co.airy.core.sources.facebook.api.model; -import co.airy.core.sources.facebook.api.model.PageWithConnectInfo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/SendMessagePayload.java b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/SendMessagePayload.java index f8a73e8f84..c875d716ce 100644 --- a/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/SendMessagePayload.java +++ b/backend/sources/facebook/connector/src/main/java/co/airy/core/sources/facebook/api/model/SendMessagePayload.java @@ -1,15 +1,12 @@ package co.airy.core.sources.facebook.api.model; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.JsonNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.io.Serializable; - @Data @Builder @NoArgsConstructor @@ -18,7 +15,7 @@ public class SendMessagePayload { private String messagingType; private MessageRecipient recipient; - private MessagePayload message; + private JsonNode message; private String tag; @Data @@ -28,21 +25,4 @@ public class SendMessagePayload { public static class MessageRecipient { private String id; } - - @Data - @NoArgsConstructor - @AllArgsConstructor - public static class MessagePayload implements Serializable { - private String text; - private AttachmentPayload attachment; - } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class AttachmentPayload implements Serializable { - private String type; - private JsonNode payload; - } } diff --git a/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/FetchMetadataTest.java b/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/FetchMetadataTest.java index 48462b76cc..f1efd323c5 100644 --- a/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/FetchMetadataTest.java +++ b/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/FetchMetadataTest.java @@ -5,7 +5,6 @@ import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; import co.airy.avro.communication.Metadata; -import co.airy.model.metadata.MetadataKeys; import co.airy.avro.communication.SenderType; import co.airy.core.sources.facebook.api.Api; import co.airy.core.sources.facebook.api.model.UserProfile; @@ -15,6 +14,7 @@ import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; +import co.airy.model.metadata.MetadataKeys; import co.airy.spring.core.AirySpringBootApplication; import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.AfterAll; diff --git a/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/SendMessageTest.java b/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/SendMessageTest.java index 6d01a9f31f..ea55061ef2 100644 --- a/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/SendMessageTest.java +++ b/backend/sources/facebook/connector/src/test/java/co/airy/core/sources/facebook/SendMessageTest.java @@ -5,19 +5,17 @@ import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; import co.airy.avro.communication.SenderType; -import co.airy.core.sources.facebook.api.model.SendMessagePayload; import co.airy.core.sources.facebook.api.Api; +import co.airy.core.sources.facebook.api.model.SendMessagePayload; import co.airy.kafka.schema.Topic; import co.airy.kafka.schema.application.ApplicationCommunicationChannels; import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; -import co.airy.mapping.model.SourceTemplate; import co.airy.spring.core.AirySpringBootApplication; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -130,7 +128,7 @@ void canSendMessageViaTheFacebookApi() throws Exception { TimeUnit.SECONDS.sleep(5); final ObjectMapper objectMapper = new ObjectMapper(); - final JsonNode attachmentPayload = objectMapper.readTree("{\"a\":\"template payload\"}"); + final JsonNode messagePayload = objectMapper.readTree("{\"text\":\"Hello Facebook\"}"); kafkaTestHelper.produceRecord(new ProducerRecord<>(applicationCommunicationMessages.name(), messageId, Message.newBuilder() @@ -142,14 +140,14 @@ void canSendMessageViaTheFacebookApi() throws Exception { .setConversationId(conversationId) .setChannelId(channelId) .setSource("facebook") - .setContent(objectMapper.writeValueAsString(new SourceTemplate(attachmentPayload))) + .setContent(objectMapper.writeValueAsString(messagePayload)) .build()) ); retryOnException(() -> { final SendMessagePayload sendMessagePayload = payloadCaptor.getValue(); assertThat(sendMessagePayload.getRecipient().getId(), equalTo(sourceConversationId)); - assertThat(sendMessagePayload.getMessage().getAttachment().getPayload(), equalTo(attachmentPayload)); + assertThat(sendMessagePayload.getMessage(), equalTo(messagePayload)); assertThat(tokenCaptor.getValue(), equalTo(token)); }, "Facebook API was not called"); diff --git a/backend/sources/facebook/events-router/src/test/java/co/airy/core/sources/facebook/EventsRouterTest.java b/backend/sources/facebook/events-router/src/test/java/co/airy/core/sources/facebook/EventsRouterTest.java index 0a6e24d1f7..86e8deb0c9 100644 --- a/backend/sources/facebook/events-router/src/test/java/co/airy/core/sources/facebook/EventsRouterTest.java +++ b/backend/sources/facebook/events-router/src/test/java/co/airy/core/sources/facebook/EventsRouterTest.java @@ -35,8 +35,8 @@ import java.util.concurrent.TimeUnit; import static co.airy.test.Timing.retryOnException; -import static org.hamcrest.CoreMatchers.is; import static org.apache.kafka.streams.KafkaStreams.State.RUNNING; +import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/backend/sources/google/connector/BUILD b/backend/sources/google/connector/BUILD index 228830b2e0..dd317369ba 100644 --- a/backend/sources/google/connector/BUILD +++ b/backend/sources/google/connector/BUILD @@ -10,7 +10,6 @@ app_deps = [ "//lib/java/spring/kafka/core:spring-kafka-core", "//lib/java/spring/kafka/streams:spring-kafka-streams", "//lib/java/uuid", - "//lib/java/mapping", "//lib/java/kafka/schema:source-google-events", "//lib/java/spring/web:spring-web", "//lib/java/spring/auth:spring-auth", diff --git a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/Connector.java b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/Connector.java index 2c597adb38..0a72fd346f 100644 --- a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/Connector.java +++ b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/Connector.java @@ -2,13 +2,13 @@ import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; -import co.airy.core.sources.google.model.SendMessagePayload; import co.airy.core.sources.google.model.SendMessageRequest; import co.airy.core.sources.google.services.Api; import co.airy.core.sources.google.services.Mapper; import co.airy.log.AiryLoggerFactory; import co.airy.spring.auth.IgnoreAuthPattern; import co.airy.spring.web.filters.RequestLoggingIgnorePatterns; +import com.fasterxml.jackson.databind.JsonNode; import org.slf4j.Logger; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @@ -33,7 +33,7 @@ public Message sendMessage(SendMessageRequest sendMessageRequest) { final Message message = sendMessageRequest.getMessage(); try { - final SendMessagePayload sendMessagePayload = mapper.fromSendMessageRequest(sendMessageRequest); + final JsonNode sendMessagePayload = mapper.fromSendMessageRequest(sendMessageRequest); api.sendMessage(sendMessageRequest.getSourceConversationId(), sendMessagePayload); diff --git a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/model/SendMessagePayload.java b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/model/SendMessagePayload.java deleted file mode 100644 index 8ce3ce6858..0000000000 --- a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/model/SendMessagePayload.java +++ /dev/null @@ -1,26 +0,0 @@ -package co.airy.core.sources.google.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class SendMessagePayload { - @JsonProperty("messageId") - private String messageId; - private String text; - private Representative representative; - - @Data - @NoArgsConstructor - @AllArgsConstructor - public static class Representative { - @JsonProperty("representativeType") - private String representativeType; - } -} diff --git a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Api.java b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Api.java index 7a2365397a..86a462184d 100644 --- a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Api.java +++ b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Api.java @@ -2,7 +2,7 @@ import co.airy.core.sources.google.ApiException; import co.airy.core.sources.google.model.GoogleServiceAccount; -import co.airy.core.sources.google.model.SendMessagePayload; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.auth.oauth2.AccessToken; import com.google.auth.oauth2.GoogleCredentials; @@ -42,7 +42,7 @@ public Api(RestTemplateBuilder restTemplateBuilder, ObjectMapper objectMapper, G this.serviceAccount = serviceAccount; } - public void sendMessage(final String conversationId, SendMessagePayload sendMessagePayload) throws Exception { + public void sendMessage(final String conversationId, JsonNode sendMessagePayload) throws Exception { String reqUrl = String.format(requestTemplate, conversationId); final byte[] serializedServiceAccount = objectMapper.writeValueAsString(serviceAccount).getBytes(); diff --git a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Mapper.java b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Mapper.java index 6b206f9bc7..fda97ce2e7 100644 --- a/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Mapper.java +++ b/backend/sources/google/connector/src/main/java/co/airy/core/sources/google/services/Mapper.java @@ -1,31 +1,20 @@ package co.airy.core.sources.google.services; import co.airy.avro.communication.Message; -import co.airy.core.sources.google.model.SendMessagePayload; import co.airy.core.sources.google.model.SendMessageRequest; -import co.airy.mapping.ContentMapper; -import co.airy.mapping.model.Text; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.springframework.stereotype.Service; @Service public class Mapper { - private final ContentMapper mapper; - Mapper(ContentMapper mapper) { - this.mapper = mapper; - } + private final ObjectMapper mapper = new ObjectMapper(); - public SendMessagePayload fromSendMessageRequest(SendMessageRequest sendMessageRequest) throws Exception { + public JsonNode fromSendMessageRequest(SendMessageRequest sendMessageRequest) throws Exception { final Message message = sendMessageRequest.getMessage(); - final Text text = (Text) mapper.render(message) - .stream() - .filter(c -> c instanceof Text) - .findFirst() - .orElseThrow(() -> new Exception("google only supports text messages")); - - return SendMessagePayload.builder() - .messageId(message.getId()) - .representative(new SendMessagePayload.Representative("HUMAN")) - .text(text.getText()) - .build(); + final JsonNode messageNode = mapper.readTree(message.getContent()); + ((ObjectNode) messageNode).put("messageId", message.getId()); + return messageNode; } } diff --git a/backend/sources/google/connector/src/test/java/co/airy/core/sources/google/SendMessageTest.java b/backend/sources/google/connector/src/test/java/co/airy/core/sources/google/SendMessageTest.java index 935066ea22..96d2f559d0 100644 --- a/backend/sources/google/connector/src/test/java/co/airy/core/sources/google/SendMessageTest.java +++ b/backend/sources/google/connector/src/test/java/co/airy/core/sources/google/SendMessageTest.java @@ -3,15 +3,14 @@ import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; import co.airy.avro.communication.SenderType; -import co.airy.core.sources.google.model.SendMessagePayload; import co.airy.core.sources.google.services.Api; import co.airy.kafka.schema.Topic; import co.airy.kafka.schema.application.ApplicationCommunicationChannels; import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; -import co.airy.mapping.model.Text; import co.airy.spring.core.AirySpringBootApplication; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.AfterAll; @@ -88,9 +87,9 @@ void canSendMessageViaGoogleApi() throws Exception { final String messageId = UUID.randomUUID().toString(); final String sourceConversationId = "source-conversation-id"; final String channelId = UUID.randomUUID().toString(); - final String text = "Hello World"; + final String textPayload = "{\"text\":\"Hi world\",\"fallback\":\"bye world\"}"; - ArgumentCaptor payloadCaptor = ArgumentCaptor.forClass(SendMessagePayload.class); + ArgumentCaptor payloadCaptor = ArgumentCaptor.forClass(JsonNode.class); ArgumentCaptor googleIdCaptor = ArgumentCaptor.forClass(String.class); doNothing().when(api).sendMessage(googleIdCaptor.capture(), payloadCaptor.capture()); @@ -106,13 +105,12 @@ void canSendMessageViaGoogleApi() throws Exception { .setDeliveryState(DeliveryState.DELIVERED) .setConversationId(conversationId) .setChannelId(channelId) - .setContent("{\"text\":\"" + text + "\"}") + .setContent("{\"text\":\"" + textPayload + "\"}") .build()) ); TimeUnit.SECONDS.sleep(5); - final ObjectMapper objectMapper = new ObjectMapper(); kafkaTestHelper.produceRecord(new ProducerRecord<>(applicationCommunicationMessages.name(), messageId, Message.newBuilder() .setId(messageId) @@ -123,15 +121,15 @@ void canSendMessageViaGoogleApi() throws Exception { .setConversationId(conversationId) .setChannelId(channelId) .setSource("google") - .setContent(objectMapper.writeValueAsString(new Text(text))) + .setContent(textPayload) .build()) ); retryOnException(() -> { - final SendMessagePayload sendMessagePayload = payloadCaptor.getValue(); + final JsonNode sendMessagePayload = payloadCaptor.getValue(); - assertThat(sendMessagePayload.getText(), equalTo(text)); - assertThat(sendMessagePayload.getMessageId(), equalTo(messageId)); + assertThat(sendMessagePayload.get("text").textValue(), equalTo("Hi world")); + assertThat(sendMessagePayload.get("messageId").textValue(), equalTo(messageId)); assertThat(googleIdCaptor.getValue(), equalTo(sourceConversationId)); }, "google API was not called"); } diff --git a/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/EventsRouter.java b/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/EventsRouter.java index 6f8c969aa9..3f983f210a 100644 --- a/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/EventsRouter.java +++ b/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/EventsRouter.java @@ -30,8 +30,8 @@ import java.util.ArrayList; import java.util.List; -import static co.airy.model.metadata.MetadataRepository.getId; import static co.airy.core.sources.google.InfoExtractor.getMetadataFromContext; +import static co.airy.model.metadata.MetadataRepository.getId; @Component public class EventsRouter implements DisposableBean, ApplicationListener { diff --git a/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/InfoExtractor.java b/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/InfoExtractor.java index 33d111d144..4c96b038a5 100644 --- a/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/InfoExtractor.java +++ b/backend/sources/google/events-router/src/main/java/co/airy/core/sources/google/InfoExtractor.java @@ -1,14 +1,13 @@ package co.airy.core.sources.google; import co.airy.avro.communication.Metadata; -import co.airy.model.metadata.MetadataKeys; import co.airy.log.AiryLoggerFactory; +import co.airy.model.metadata.MetadataKeys; import com.fasterxml.jackson.databind.JsonNode; import org.slf4j.Logger; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/backend/sources/google/events-router/src/test/java/co/airy/core/sources/google/EventsRouterTest.java b/backend/sources/google/events-router/src/test/java/co/airy/core/sources/google/EventsRouterTest.java index bb62059cc6..d614e7c486 100644 --- a/backend/sources/google/events-router/src/test/java/co/airy/core/sources/google/EventsRouterTest.java +++ b/backend/sources/google/events-router/src/test/java/co/airy/core/sources/google/EventsRouterTest.java @@ -4,7 +4,6 @@ import co.airy.avro.communication.ChannelConnectionState; import co.airy.avro.communication.Message; import co.airy.avro.communication.Metadata; -import co.airy.model.metadata.MetadataKeys; import co.airy.kafka.schema.Topic; import co.airy.kafka.schema.application.ApplicationCommunicationChannels; import co.airy.kafka.schema.application.ApplicationCommunicationMessages; @@ -12,6 +11,7 @@ import co.airy.kafka.schema.source.SourceGoogleEvents; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; +import co.airy.model.metadata.MetadataKeys; import co.airy.spring.core.AirySpringBootApplication; import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.AfterAll; diff --git a/backend/sources/twilio/connector/BUILD b/backend/sources/twilio/connector/BUILD index 1ab494184b..0298cc6b63 100644 --- a/backend/sources/twilio/connector/BUILD +++ b/backend/sources/twilio/connector/BUILD @@ -8,7 +8,6 @@ app_deps = [ "//backend/model/channel", "//backend/model/message", "//lib/java/log", - "//lib/java/mapping", "//lib/java/uuid", "@maven//:com_twilio_sdk_twilio", "//lib/java/spring/kafka/core:spring-kafka-core", diff --git a/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/ChannelsController.java b/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/ChannelsController.java index 7b7d9e04f0..51bfcb216e 100644 --- a/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/ChannelsController.java +++ b/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/ChannelsController.java @@ -10,8 +10,6 @@ import lombok.NoArgsConstructor; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; diff --git a/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/Connector.java b/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/Connector.java index 563f5589de..eba9e7d70a 100644 --- a/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/Connector.java +++ b/backend/sources/twilio/connector/src/main/java/co/airy/core/sources/twilio/Connector.java @@ -5,10 +5,10 @@ import co.airy.core.sources.twilio.dto.SendMessageRequest; import co.airy.core.sources.twilio.services.Api; import co.airy.log.AiryLoggerFactory; -import co.airy.mapping.ContentMapper; -import co.airy.mapping.model.Text; import co.airy.spring.auth.IgnoreAuthPattern; import co.airy.spring.web.filters.RequestLoggingIgnorePatterns; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.twilio.exception.ApiException; import org.slf4j.Logger; import org.springframework.context.annotation.Bean; @@ -23,11 +23,10 @@ public class Connector { private static final Logger log = AiryLoggerFactory.getLogger(Connector.class); private final Api api; - private final ContentMapper mapper; + private final ObjectMapper mapper = new ObjectMapper(); - Connector(Api api, ContentMapper mapper) { + Connector(Api api) { this.api = api; - this.mapper = mapper; } public Message sendMessage(SendMessageRequest sendMessageRequest) { @@ -35,14 +34,8 @@ public Message sendMessage(SendMessageRequest sendMessageRequest) { final String from = sendMessageRequest.getChannel().getSourceChannelId(); final String to = sendMessageRequest.getSourceConversationId(); try { - // TODO Figure out how we can let clients know which outbound message types are supported - final Text text = (Text) mapper.render(message) - .stream() - .filter(c -> c instanceof Text) - .findFirst() - .orElseThrow(() -> new Exception("twilio only supports text messages")); - - api.sendMessage(from, to, text.getText()); + final JsonNode messageNode = mapper.readTree(message.getContent()); + api.sendMessage(from, to, messageNode.get("text").textValue()); updateDeliveryState(message, DeliveryState.DELIVERED); return message; diff --git a/backend/sources/twilio/connector/src/test/java/co/airy/core/sources/twilio/SendMessageTest.java b/backend/sources/twilio/connector/src/test/java/co/airy/core/sources/twilio/SendMessageTest.java index 68a07a6217..5e1c2919e2 100644 --- a/backend/sources/twilio/connector/src/test/java/co/airy/core/sources/twilio/SendMessageTest.java +++ b/backend/sources/twilio/connector/src/test/java/co/airy/core/sources/twilio/SendMessageTest.java @@ -11,9 +11,7 @@ import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.kafka.test.KafkaTestHelper; import co.airy.kafka.test.junit.SharedKafkaTestResource; -import co.airy.mapping.model.Text; import co.airy.spring.core.AirySpringBootApplication; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -124,7 +122,6 @@ void canSendMessageViaTheTwilioApi() throws Exception { TimeUnit.SECONDS.sleep(5); - final ObjectMapper objectMapper = new ObjectMapper(); kafkaTestHelper.produceRecord(new ProducerRecord<>(applicationCommunicationMessages.name(), messageId, Message.newBuilder() .setId(messageId) @@ -135,7 +132,7 @@ void canSendMessageViaTheTwilioApi() throws Exception { .setConversationId(conversationId) .setChannelId(channelId) .setSource("twilio.sms") - .setContent(objectMapper.writeValueAsString(new Text(text))) + .setContent("{\"text\":\"" + text + "\"}") .build()) ); diff --git a/backend/webhook/publisher/BUILD b/backend/webhook/publisher/BUILD index fc0d56080a..641e101902 100644 --- a/backend/webhook/publisher/BUILD +++ b/backend/webhook/publisher/BUILD @@ -7,7 +7,6 @@ app_deps = [ "//backend/model/message", "//backend:webhook", "//lib/java/uuid", - "//lib/java/mapping", "//lib/java/date", "//lib/java/spring/kafka/core:spring-kafka-core", "//lib/java/spring/kafka/streams:spring-kafka-streams", diff --git a/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/Mapper.java b/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/Mapper.java index 8ccffff625..3b641bddd2 100644 --- a/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/Mapper.java +++ b/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/Mapper.java @@ -3,9 +3,6 @@ import co.airy.avro.communication.Message; import co.airy.core.webhook.publisher.model.Postback; import co.airy.core.webhook.publisher.model.WebhookBody; -import co.airy.mapping.ContentMapper; -import co.airy.mapping.model.Content; -import co.airy.mapping.model.Text; import org.springframework.stereotype.Component; import java.util.List; @@ -15,28 +12,11 @@ @Component public class Mapper { - private final ContentMapper contentMapper; - - Mapper(ContentMapper contentMapper) { - this.contentMapper = contentMapper; - } - public WebhookBody fromMessage(Message message) throws Exception { - final List content = contentMapper.renderWithDefaultAndLog(message); - - final Text textContent = (Text) content.stream() - .filter(c -> (c instanceof Text)) - .findFirst() - .orElse(null); - - if (textContent == null) { - throw new NotATextMessage(); - } - return WebhookBody.builder() .conversationId(message.getConversationId()) .id(message.getId()) - .text(textContent.getText()) + .content(message.getContent()) .source(message.getSource()) .postback(buildPostback(message)) .sentAt(isoFromMillis(message.getSentAt())) diff --git a/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/model/WebhookBody.java b/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/model/WebhookBody.java index 85e123d4e7..558c237c05 100644 --- a/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/model/WebhookBody.java +++ b/backend/webhook/publisher/src/main/java/co/airy/core/webhook/publisher/model/WebhookBody.java @@ -14,7 +14,7 @@ public class WebhookBody implements Serializable { private String conversationId; private String id; - private String text; + private String content; private Sender sender; private String sentAt; private String source; diff --git a/docs/docs/api/http.md b/docs/docs/api/http.md index a451960c20..6da580d642 100644 --- a/docs/docs/api/http.md +++ b/docs/docs/api/http.md @@ -149,13 +149,8 @@ Find users whose name ends with "Lovelace": "tags": ["f339c325-8614-43cb-a70a-e83d81bf56fc"], "last_message": { id: "{UUID}", - content: [ - { - text: "{String}", - type: "text" - // Determines the schema of the content - }, - ] + "content": '{"text":"Hello World"}', + // source message payload // typed source message model state: "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED @@ -206,13 +201,8 @@ Find users whose name ends with "Lovelace": "tags": ["f339c325-8614-43cb-a70a-e83d81bf56fc"], "last_message": { "id": "{UUID}", - "content": [ - { - "text": "{String}", - "type": "text" - // Determines the schema of the content - } - ], + "content": '{"text":"Hello World"}', + // source message payload // typed source message model "delivery_state": "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED @@ -314,13 +304,8 @@ This is a [paginated](#pagination) endpoint. Messages are sorted from oldest to "data": [ { "id": "{UUID}", - "content": [ - { - "text": "{String}", - "type": "text" - // Determines the schema of the content - } - ], + "content": '{"text":"Hello World"}', + // source message payload // typed source message model "state": "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED @@ -343,7 +328,8 @@ This is a [paginated](#pagination) endpoint. Messages are sorted from oldest to `POST /messages.send` -Sends a message to a conversation and returns a payload. +Sends a message to a conversation and returns a payload. Whatever is put on the `message` field will be forwarded +"as-is" to the source's message endpoint. **Sending a text message** @@ -351,39 +337,7 @@ Sends a message to a conversation and returns a payload. { "conversation_id": "a688d36c-a85e-44af-bc02-4248c2c97622", "message": { - "text": "Hello World", - "type": "text" - } -} -``` - -**Sending an attachment message** - -```json5 -{ - "conversation_id": "a688d36c-a85e-44af-bc02-4248c2c97622", - "message": { - "url": "http://example.org/myfile", - "type": "image|video|audio|file" - } -} -``` - -**Sending source templates** - -Some sources support sending templates, which can be used to display rich content such as buttons or cards. You -can send source templates by setting the type to `source.template`. Please refer to the source documentation -to see the expected values for the `payload` field. - -```json5 -{ - "conversation_id": "a688d36c-a85e-44af-bc02-4248c2c97622", - "message": { - "payload": { - "template_type": "buttons", - "buttons": ["Welcome to our shop"] - }, - "type": "source.template" + "text": "Hello World" } } ``` @@ -393,12 +347,7 @@ to see the expected values for the `payload` field. ```json5 { "id": "{UUID}", - "content": [ - { - "text": "{String}", - "type": "text" - } - ], + "content": '{"text":"Hello"}', "state": "pending|failed|delivered", "sender_type": "{string/enum}", // See glossary diff --git a/docs/docs/api/webhook.md b/docs/docs/api/webhook.md index 519c11e2c4..707c93c88c 100644 --- a/docs/docs/api/webhook.md +++ b/docs/docs/api/webhook.md @@ -94,7 +94,7 @@ request with the following structure: }, "source": "facebook", "sent_at": "2020-07-20T14:18:08.584Z", - "text": "Message to be sent" + "content": '{"text":"Hello World"}' } ``` diff --git a/docs/docs/api/websocket.md b/docs/docs/api/websocket.md index 9145c1b591..85f16e1e08 100644 --- a/docs/docs/api/websocket.md +++ b/docs/docs/api/websocket.md @@ -33,12 +33,8 @@ Incoming payloads notify connected clients that a message was created or updated "channel_id": "{UUID}", "message": { "id": "{UUID}", - "content": { - "text": "{String}", - "type": "text" - // Determines the schema of the content - }, - // typed source message model + "content": '{"text":"Hello World"}', + // source message payload "delivery_state": "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED "sender_type": "{string/enum}", diff --git a/docs/docs/glossary.md b/docs/docs/glossary.md index 26f8c25169..c4bc3c2ae6 100644 --- a/docs/docs/glossary.md +++ b/docs/docs/glossary.md @@ -79,7 +79,7 @@ Identifies the participant that sent the message. Interpretation is based on the - `channelId` uuid -- `content` string Immutable string version of the ingested content. APIs dynamically parse and map it to a schema using the mapping library. +- `content` string Immutable string version of the ingested content. - `offset` long sequence number of message within a conversation diff --git a/docs/docs/sources/chat-plugin.md b/docs/docs/sources/chat-plugin.md index b58220dd99..0a2a1b4af6 100644 --- a/docs/docs/sources/chat-plugin.md +++ b/docs/docs/sources/chat-plugin.md @@ -126,14 +126,8 @@ previous conversation using the [resume endpoint](#get-a-resume-token). "messages": [ { "id": "{UUID}", - "content": [ - { - "text": "{String}", - "type": "text" - // Determines the schema of the content - } - ], - // typed source message model + "content": '{"text":"Hello World"}', + // source message payload "state": "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED "sender_type": "{string/enum}", @@ -189,11 +183,8 @@ header. ```json5 { id: "{UUID}", - content: { - text: "{String}", - type: "text" - // Determines the schema of the content - }, + "content": '{"text":"Hello World"}', + // source message payload state: "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED sender_type: "{string/enum}", @@ -221,8 +212,8 @@ The WebSocket connection endpoint is at `/ws.chatplugin`. { message: { id: "{UUID}", - content: "{String}", - // source content string + "content": '{"text":"Hello World"}', + // source message payload state: "{String}", // delivery state of message, one of PENDING, FAILED, DELIVERED sender_type: "{string/enum}", diff --git a/docs/docs/sources/facebook.md b/docs/docs/sources/facebook.md index e26e3bda09..ba6ae36229 100644 --- a/docs/docs/sources/facebook.md +++ b/docs/docs/sources/facebook.md @@ -170,43 +170,3 @@ the nature of the request, the response time may vary. ] } ``` - -## Send a template message - -With Facebook messenger you can send [templates](https://developers.facebook.com/docs/messenger-platform/send-messages/templates) to your contacts, -which is useful for automations, FAQs, receipts and many more use cases. To send Facebook templates using the [send message API](/api/http.md#send-a-message) you have to -first build an attachment for Facebook using their template model. Quoting from the docs: - -> The body of the request follows a standard format for all template types, with the `message.attachment.payload` property containing the type and content details that are specific to each template type: -> -> ```json5 -> { -> "recipient": { -> "id": "" -> }, -> "message": { -> "attachment": { -> "type": "template", -> "payload": { -> "template_type": "" -> // ... -> } -> } -> } -> } -> ``` - -Next take the `message.attachment.payload` field and add it to the `message` field on the API request like so: - -```json5 -{ - "conversation_id": "a688d36c-a85e-44af-bc02-4248c2c97622", - "message": { - "payload": { - "template_type": "" - // ... - }, - "type": "source.template" - } -} -``` diff --git a/lib/java/mapping/BUILD b/lib/java/mapping/BUILD index 038e2f34e2..0aaaa7a767 100644 --- a/lib/java/mapping/BUILD +++ b/lib/java/mapping/BUILD @@ -18,16 +18,6 @@ custom_java_library( deps = lib_deps, ) -java_binary( - name = "ts-generator", - srcs = glob(["src/ts-generator/**/*.java"]), - main_class = "co.airy.ts_generator.Main", - deps = [ - ":mapping", - "@maven//:cz_habarta_typescript_generator_typescript_generator_core", - ], -) - [ junit5( file = file, diff --git a/lib/java/mapping/README.md b/lib/java/mapping/README.md index c30432db17..11e6913c0a 100644 --- a/lib/java/mapping/README.md +++ b/lib/java/mapping/README.md @@ -11,18 +11,3 @@ and map the content to a usable schema dynamically. This gives us the ability to address mapping bugs by fixing code (cheap) rather than fixing streaming data (expensive). - -## Typescript definitions - -To allow web clients an easy way of mapping this payload structure, we provide -automatically generated Typescript definitions using this [Typescript -generator](https://github.com/vojtechhabarta/typescript-generator). - -The following command puts the generated definitions in -`frontend/components/src/content.ts` and has to be run after every change to -the content model in -`backend/lib/mapping/src/main/java/co/airy/mapping/model/`: - -```shell script -bazel run //lib/java/mapping:ts-generator -``` diff --git a/lib/java/mapping/src/ts-generator/java/co/airy/ts_generator/Main.java b/lib/java/mapping/src/ts-generator/java/co/airy/ts_generator/Main.java deleted file mode 100644 index e4b7c8ed51..0000000000 --- a/lib/java/mapping/src/ts-generator/java/co/airy/ts_generator/Main.java +++ /dev/null @@ -1,35 +0,0 @@ -package co.airy.ts_generator; - -import cz.habarta.typescript.generator.Input; -import cz.habarta.typescript.generator.JsonLibrary; -import cz.habarta.typescript.generator.Output; -import cz.habarta.typescript.generator.Settings; -import cz.habarta.typescript.generator.TypeScriptFileType; -import cz.habarta.typescript.generator.TypeScriptGenerator; -import cz.habarta.typescript.generator.TypeScriptOutputKind; - -import java.io.File; -import java.util.List; - -public class Main { - public static void main(String[] args) { - final Settings settings = new Settings(); - - settings.outputKind = TypeScriptOutputKind.module; // Needed to generate `export` statements - settings.outputFileType = TypeScriptFileType.implementationFile; - settings.jsonLibrary = JsonLibrary.jackson2; - settings.setExcludeFilter(List.of("java.io.Serializable"), List.of("**.**Builder")); - - final TypeScriptGenerator generator = new TypeScriptGenerator(settings); - - final Input.Parameters parameters = new Input.Parameters(); - - parameters.debug = false; - parameters.classNamePatterns = List.of("co.airy.mapping.model.**"); - - final File output = new File(System.getenv().get("BUILD_WORKSPACE_DIRECTORY") + "/lib/typescript/types/content.ts"); - settings.validateFileName(output); - - generator.generateTypeScript(Input.from(parameters), Output.to(output)); - } -} diff --git a/maven_install.json b/maven_install.json index 6d9d1796fa..42151c240c 100644 --- a/maven_install.json +++ b/maven_install.json @@ -1,10 +1,10 @@ { "dependency_tree": { - "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": 1000798703, + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": -1998490041, "conflict_resolution": { - "com.fasterxml.jackson.core:jackson-annotations:2.10.0": "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.10.0": "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.10.0": "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.10.0": "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.10.0": "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.10.0": "com.fasterxml.jackson.core:jackson-databind:2.11.0", "io.jsonwebtoken:jjwt-api:0.10.5": "io.jsonwebtoken:jjwt-api:0.10.7", "io.jsonwebtoken:jjwt-impl:0.10.5": "io.jsonwebtoken:jjwt-impl:0.10.7", "io.jsonwebtoken:jjwt-jackson:0.10.5": "io.jsonwebtoken:jjwt-jackson:0.10.7", @@ -71,24 +71,24 @@ { "coord": "com.amazonaws:aws-java-sdk-core:1.11.933", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "commons-logging:commons-logging:1.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "software.amazon.ion:ion-java:1.0.2", "commons-codec:commons-codec:1.11", "org.apache.httpcomponents:httpcore:4.4.13", + "com.fasterxml.jackson.core:jackson-databind:jar:2.11.0", "joda-time:joda-time:2.10.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.6.7", - "org.apache.httpcomponents:httpclient:4.5.13", - "com.fasterxml.jackson.core:jackson-databind:jar:2.11.2" + "org.apache.httpcomponents:httpclient:4.5.13" ], "directDependencies": [ "commons-logging:commons-logging:1.2", "software.amazon.ion:ion-java:1.0.2", + "com.fasterxml.jackson.core:jackson-databind:jar:2.11.0", "joda-time:joda-time:2.10.2", "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.6.7", - "org.apache.httpcomponents:httpclient:4.5.13", - "com.fasterxml.jackson.core:jackson-databind:jar:2.11.2" + "org.apache.httpcomponents:httpclient:4.5.13" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -109,19 +109,19 @@ { "coord": "com.amazonaws:aws-java-sdk-kms:1.11.933", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.amazonaws:jmespath-java:1.11.933", "com.amazonaws:aws-java-sdk-core:1.11.933", "commons-logging:commons-logging:1.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "software.amazon.ion:ion-java:1.0.2", "commons-codec:commons-codec:1.11", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.httpcomponents:httpcore:4.4.13", + "com.fasterxml.jackson.core:jackson-databind:jar:2.11.0", "joda-time:joda-time:2.10.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.6.7", - "org.apache.httpcomponents:httpclient:4.5.13", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:jar:2.11.2" + "org.apache.httpcomponents:httpclient:4.5.13" ], "directDependencies": [ "com.amazonaws:aws-java-sdk-core:1.11.933", @@ -146,20 +146,20 @@ { "coord": "com.amazonaws:aws-java-sdk-s3:1.11.933", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.amazonaws:jmespath-java:1.11.933", "com.amazonaws:aws-java-sdk-core:1.11.933", "commons-logging:commons-logging:1.2", "com.amazonaws:aws-java-sdk-kms:1.11.933", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "software.amazon.ion:ion-java:1.0.2", "commons-codec:commons-codec:1.11", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.httpcomponents:httpcore:4.4.13", + "com.fasterxml.jackson.core:jackson-databind:jar:2.11.0", "joda-time:joda-time:2.10.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.6.7", - "org.apache.httpcomponents:httpclient:4.5.13", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:jar:2.11.2" + "org.apache.httpcomponents:httpclient:4.5.13" ], "directDependencies": [ "com.amazonaws:aws-java-sdk-core:1.11.933", @@ -185,12 +185,12 @@ { "coord": "com.amazonaws:jmespath-java:1.11.933", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -254,7 +254,7 @@ "url": "https://repo1.maven.org/maven2/com/damnhandy/handy-uri-templates/2.1.8/handy-uri-templates-2.1.8.jar" }, { - "coord": "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "coord": "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "dependencies": [], "directDependencies": [], "exclusions": [ @@ -263,18 +263,18 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.2/jackson-annotations-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/core/jackson-annotations/2.11.2/jackson-annotations-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-annotations/2.11.2/jackson-annotations-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.2/jackson-annotations-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/core/jackson-annotations/2.11.2/jackson-annotations-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar", + "https://jitpack.io/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar" ], - "sha256": "90d602d1955df509b1569618cff869994caf9483cb82a3ccb39782a5cda54126", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.2/jackson-annotations-2.11.2.jar" + "sha256": "b3b1fca6cb6469d4ea06635d964aaea91f86cc22fe42a9757c8a315148589e8e", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar" }, { - "coord": "com.fasterxml.jackson.core:jackson-core:2.11.2", + "coord": "com.fasterxml.jackson.core:jackson-core:2.11.0", "dependencies": [], "directDependencies": [], "exclusions": [ @@ -283,25 +283,25 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.2/jackson-core-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.0/jackson-core-2.11.0.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/core/jackson-core/2.11.2/jackson-core-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-core/2.11.2/jackson-core-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.2/jackson-core-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/core/jackson-core/2.11.2/jackson-core-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/core/jackson-core/2.11.0/jackson-core-2.11.0.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-core/2.11.0/jackson-core-2.11.0.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.0/jackson-core-2.11.0.jar", + "https://jitpack.io/com/fasterxml/jackson/core/jackson-core/2.11.0/jackson-core-2.11.0.jar" ], - "sha256": "f8d768c4e8884522be5881dd2a91aec812d08d4f05852b434190e22de659dfc9", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.2/jackson-core-2.11.2.jar" + "sha256": "b504d81351fb088f1e1bbef6a701faa88d2cfc4350483aeaa19384c39a8133fd", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.0/jackson-core-2.11.0.jar" }, { - "coord": "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "coord": "com.fasterxml.jackson.core:jackson-databind:2.11.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2" + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -309,23 +309,23 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.2/jackson-databind-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.0/jackson-databind-2.11.0.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/core/jackson-databind/2.11.2/jackson-databind-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-databind/2.11.2/jackson-databind-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.2/jackson-databind-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/core/jackson-databind/2.11.2/jackson-databind-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/core/jackson-databind/2.11.0/jackson-databind-2.11.0.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-databind/2.11.0/jackson-databind-2.11.0.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.0/jackson-databind-2.11.0.jar", + "https://jitpack.io/com/fasterxml/jackson/core/jackson-databind/2.11.0/jackson-databind-2.11.0.jar" ], - "sha256": "cb890b4aad8ed21a7b57e3c8f7924dbdca1aeff9ddd27cb0ff37243037ae1342", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.2/jackson-databind-2.11.2.jar" + "sha256": "54e72b9fa38fc37986ae7f6fc30ef704eec8010206bcd4d63546dccbbb47f4d1", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.0/jackson-databind-2.11.0.jar" }, { "coord": "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.6.7", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -346,14 +346,14 @@ { "coord": "com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "org.slf4j:slf4j-log4j12", @@ -380,11 +380,11 @@ { "coord": "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.yaml:snakeyaml:1.26" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.yaml:snakeyaml:1.26" ], "exclusions": [ @@ -408,19 +408,19 @@ "coord": "com.fasterxml.jackson.datatype:jackson-datatype-guava:2.10.2", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.google.errorprone:error_prone_annotations:2.3.4", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.checkerframework:checker-qual:2.11.1" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.google.guava:guava:29.0-jre" ], "exclusions": [ @@ -442,13 +442,13 @@ { "coord": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -469,15 +469,15 @@ { "coord": "com.fasterxml.jackson.datatype:jackson-datatype-joda:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "joda-time:joda-time:2.10.2" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "joda-time:joda-time:2.10.2" ], "exclusions": [ @@ -497,16 +497,16 @@ "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/2.10.2/jackson-datatype-joda-2.10.2.jar" }, { - "coord": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "coord": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -514,26 +514,26 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.2/jackson-datatype-jsr310-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.0/jackson-datatype-jsr310-2.11.0.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.2/jackson-datatype-jsr310-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.2/jackson-datatype-jsr310-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.2/jackson-datatype-jsr310-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.2/jackson-datatype-jsr310-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.0/jackson-datatype-jsr310-2.11.0.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.0/jackson-datatype-jsr310-2.11.0.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.0/jackson-datatype-jsr310-2.11.0.jar", + "https://jitpack.io/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.0/jackson-datatype-jsr310-2.11.0.jar" ], - "sha256": "c8f7155c405cf1c521fb7f1cde610a0c488aad794b3c4ca7637a199dbc40850f", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.2/jackson-datatype-jsr310-2.11.2.jar" + "sha256": "6805f305f8af285966ffc401c03aaf4ccad84302a1d42b1b2c8b015c4cee5e16", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.0/jackson-datatype-jsr310-2.11.0.jar" }, { - "coord": "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2", + "coord": "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -541,30 +541,30 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.11.2/jackson-jaxrs-base-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.10.2/jackson-jaxrs-base-2.10.2.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.11.2/jackson-jaxrs-base-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.11.2/jackson-jaxrs-base-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.11.2/jackson-jaxrs-base-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.11.2/jackson-jaxrs-base-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.10.2/jackson-jaxrs-base-2.10.2.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.10.2/jackson-jaxrs-base-2.10.2.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.10.2/jackson-jaxrs-base-2.10.2.jar", + "https://jitpack.io/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.10.2/jackson-jaxrs-base-2.10.2.jar" ], - "sha256": "9816da18809c3f43ce1df068bdd2e1415f206769a34af027ad82aeb76cf65c69", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.11.2/jackson-jaxrs-base-2.11.2.jar" + "sha256": "e079b71ce72e21bd4d1c5a91be4240077d998ac2b4272c64e7b04d65713e4231", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.10.2/jackson-jaxrs-base-2.10.2.jar" }, { - "coord": "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.11.2", + "coord": "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "jakarta.activation:jakarta.activation-api:1.2.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2", + "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2", - "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.2" + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.2", + "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.2" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -572,26 +572,26 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.11.2/jackson-jaxrs-json-provider-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.10.2/jackson-jaxrs-json-provider-2.10.2.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.11.2/jackson-jaxrs-json-provider-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.11.2/jackson-jaxrs-json-provider-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.11.2/jackson-jaxrs-json-provider-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.11.2/jackson-jaxrs-json-provider-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.10.2/jackson-jaxrs-json-provider-2.10.2.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.10.2/jackson-jaxrs-json-provider-2.10.2.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.10.2/jackson-jaxrs-json-provider-2.10.2.jar", + "https://jitpack.io/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.10.2/jackson-jaxrs-json-provider-2.10.2.jar" ], - "sha256": "02cbd6712d850f6f787e4b9bbb96cb29516e9e7c2ad677768f7896459422aef6", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.11.2/jackson-jaxrs-json-provider-2.11.2.jar" + "sha256": "935db204aca8f66f449dae200a3377ee3e9a51d8e846471cf69307e53c87bc10", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.10.2/jackson-jaxrs-json-provider-2.10.2.jar" }, { "coord": "com.fasterxml.jackson.module:jackson-module-afterburner:2.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -610,19 +610,19 @@ "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-afterburner/2.10.0/jackson-module-afterburner-2.10.0.jar" }, { - "coord": "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.2", + "coord": "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "jakarta.activation:jakarta.activation-api:1.2.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "jakarta.activation:jakarta.activation-api:1.2.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "exclusions": [ @@ -631,26 +631,26 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.2/jackson-module-jaxb-annotations-2.11.2.jar", + "file": "v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.2/jackson-module-jaxb-annotations-2.11.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.2/jackson-module-jaxb-annotations-2.11.2.jar", - "https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.2/jackson-module-jaxb-annotations-2.11.2.jar", - "https://jitpack.io/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.2/jackson-module-jaxb-annotations-2.11.2.jar" + "https://packages.confluent.io/maven/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar", + "https://oss.sonatype.org/content/repositories/snapshots/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar", + "https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar", + "https://jitpack.io/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar" ], - "sha256": "2c98745f5949946bbc43187dce688366f82abd6438deed12e242eeebd2683180", - "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.2/jackson-module-jaxb-annotations-2.11.2.jar" + "sha256": "ff87dcb6d1beddf4458127380ee2fb3504463a7f20420d66baa1590a65c15d33", + "url": "https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar" }, { "coord": "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -671,13 +671,13 @@ { "coord": "com.fasterxml.jackson.module:jackson-module-paranamer:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.thoughtworks.paranamer:paranamer:2.8" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.thoughtworks.paranamer:paranamer:2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.thoughtworks.paranamer:paranamer:2.8" ], "exclusions": [ @@ -705,18 +705,18 @@ { "coord": "com.fasterxml.jackson.module:jackson-module-scala_2.12:2.10.2", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.thoughtworks.paranamer:paranamer:2.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.scala-lang:scala-library:2.12.10", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.fasterxml.jackson.module:jackson-module-paranamer:2.10.2" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.scala-lang:scala-library:2.12.10", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.fasterxml.jackson.module:jackson-module-paranamer:2.10.2" ], "exclusions": [ @@ -865,7 +865,6 @@ "coord": "com.google.auth:google-auth-library-oauth2-http:0.20.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.google.j2objc:j2objc-annotations:1.3", "commons-logging:commons-logging:1.2", "io.opencensus:opencensus-contrib-http-util:0.24.0", @@ -880,6 +879,7 @@ "com.google.errorprone:error_prone_annotations:2.3.4", "com.google.http-client:google-http-client:1.34.0", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", "org.apache.httpcomponents:httpclient:4.5.13", "org.checkerframework:checker-qual:2.11.1" @@ -1066,7 +1066,6 @@ "coord": "com.google.http-client:google-http-client-jackson2:1.34.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.google.j2objc:j2objc-annotations:1.3", "commons-logging:commons-logging:1.2", "io.opencensus:opencensus-contrib-http-util:0.24.0", @@ -1078,12 +1077,13 @@ "com.google.errorprone:error_prone_annotations:2.3.4", "com.google.http-client:google-http-client:1.34.0", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", "org.apache.httpcomponents:httpclient:4.5.13", "org.checkerframework:checker-qual:2.11.1" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.http-client:google-http-client:1.34.0" ], "exclusions": [ @@ -1240,26 +1240,6 @@ "sha256": "d8040fa1c54c1ce208199015b6e599ec2ef37b7780f8f55a8b4b4b4299bade19", "url": "https://repo1.maven.org/maven2/com/google/re2j/re2j/1.3/re2j-1.3.jar" }, - { - "coord": "com.ibm.icu:icu4j:67.1", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar", - "https://repo1.maven.org/maven2/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar", - "https://jitpack.io/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar" - ], - "sha256": "c4eb904caf5fba968a2f1a3b8aef14df801e9329b21697209ca30bfcf153867d", - "url": "https://repo1.maven.org/maven2/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar" - }, { "coord": "com.jayway.jsonpath:json-path:2.4.0", "dependencies": [ @@ -1291,30 +1271,30 @@ { "coord": "com.kjetland:mbknor-jackson-jsonschema_2.12:1.0.39", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "io.github.classgraph:classgraph:4.8.90", "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", + "io.github.classgraph:classgraph:4.8.21", "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.50", "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.50", "org.slf4j:slf4j-api:1.7.30", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", "org.scala-lang:scala-library:2.12.10", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "javax.validation:validation-api:2.0.1.Final", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", "org.jetbrains:annotations:13.0" ], "directDependencies": [ - "io.github.classgraph:classgraph:4.8.90", + "io.github.classgraph:classgraph:4.8.21", "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.50", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.scala-lang:scala-library:2.12.10", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "javax.validation:validation-api:2.0.1.Final" ], "exclusions": [ @@ -1382,12 +1362,12 @@ "coord": "com.squareup.okio:okio:2.5.0", "dependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -1410,13 +1390,13 @@ "dependencies": [ "com.squareup.okio:okio:2.5.0", "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "directDependencies": [ "com.squareup.okio:okio:2.5.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -1442,11 +1422,11 @@ "com.google.code.findbugs:jsr305:3.0.2", "com.squareup.wire:wire-runtime:3.2.2", "com.squareup.okio:okio:2.5.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71", "com.google.errorprone:error_prone_annotations:2.3.4", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "com.google.guava:failureaccess:1.0.1", "com.google.guava:guava:29.0-jre", "org.jetbrains:annotations:13.0", @@ -1456,7 +1436,7 @@ "com.squareup.wire:wire-runtime:3.2.2", "com.squareup.okio:okio:2.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "com.google.guava:guava:29.0-jre" ], "exclusions": [ @@ -1495,26 +1475,6 @@ "sha256": "d84d4ba8b55cdb7fdcbb885e6939386367433f56f5ab8cfdc302a7c3587fa92b", "url": "https://repo1.maven.org/maven2/com/sun/activation/jakarta.activation/1.2.1/jakarta.activation-1.2.1.jar" }, - { - "coord": "com.sun.istack:istack-commons-runtime:3.0.7", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar", - "https://repo1.maven.org/maven2/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar", - "https://jitpack.io/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar" - ], - "sha256": "6443e10ba2e259fb821d9b6becf10db5316285fc30c53cec9d7b19a3877e7fdf", - "url": "https://repo1.maven.org/maven2/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar" - }, { "coord": "com.sun.mail:jakarta.mail:1.6.5", "dependencies": [ @@ -1539,47 +1499,6 @@ "sha256": "f4b500a1dd9ffd03ed7d8b2062fa5fd10d5beca4c42611672764bf4365751b53", "url": "https://repo1.maven.org/maven2/com/sun/mail/jakarta.mail/1.6.5/jakarta.mail-1.6.5.jar" }, - { - "coord": "com.sun.xml.bind:jaxb-impl:2.3.1", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl/2.3.1/jaxb-impl-2.3.1.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/com/sun/xml/bind/jaxb-impl/2.3.1/jaxb-impl-2.3.1.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/sun/xml/bind/jaxb-impl/2.3.1/jaxb-impl-2.3.1.jar", - "https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl/2.3.1/jaxb-impl-2.3.1.jar", - "https://jitpack.io/com/sun/xml/bind/jaxb-impl/2.3.1/jaxb-impl-2.3.1.jar" - ], - "sha256": "e6c9e0f1830fd5f7c30c25ecf5e2046c5668b06d304add89d2f027d5072297d0", - "url": "https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl/2.3.1/jaxb-impl-2.3.1.jar" - }, - { - "coord": "com.sun.xml.fastinfoset:FastInfoset:1.2.15", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "org.slf4j:slf4j-log4j12", - "javax.xml.bind:jsr173_api", - "org.springframework.boot:spring-boot-starter-tomcat", - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-logging" - ], - "file": "v1/https/repo1.maven.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar", - "https://oss.sonatype.org/content/repositories/snapshots/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar", - "https://repo1.maven.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar", - "https://jitpack.io/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar" - ], - "sha256": "785861db11ca1bd0d1956682b974ad73eb19cd3e01a4b3fa82d62eca97210aec", - "url": "https://repo1.maven.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar" - }, { "coord": "com.thoughtworks.paranamer:paranamer:2.8", "dependencies": [], @@ -1610,37 +1529,37 @@ "coord": "com.twilio.sdk:twilio:7.51.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "javax.xml.bind:jaxb-api:2.3.1", "com.google.j2objc:j2objc-annotations:1.3", "commons-logging:commons-logging:1.2", "io.jsonwebtoken:jjwt-impl:0.10.7", "com.google.code.findbugs:jsr305:3.0.2", "javax.activation:javax.activation-api:1.2.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "io.jsonwebtoken:jjwt-jackson:0.10.7", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.httpcomponents:httpcore:4.4.13", "com.google.errorprone:error_prone_annotations:2.3.4", "io.jsonwebtoken:jjwt-api:0.10.7", "joda-time:joda-time:2.10.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", "org.apache.httpcomponents:httpclient:4.5.13", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.checkerframework:checker-qual:2.11.1" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "javax.xml.bind:jaxb-api:2.3.1", "io.jsonwebtoken:jjwt-impl:0.10.7", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "io.jsonwebtoken:jjwt-jackson:0.10.7", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.httpcomponents:httpcore:4.4.13", "io.jsonwebtoken:jjwt-api:0.10.7", "joda-time:joda-time:2.10.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", - "org.apache.httpcomponents:httpclient:4.5.13", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "org.apache.httpcomponents:httpclient:4.5.13" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -1987,81 +1906,6 @@ "sha256": "bd62795d7068a69cbea333f6dbf9c9c1a6ad7521443fb57202a44874f240ba25", "url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.6/commons-validator-1.6.jar" }, - { - "coord": "cz.habarta.typescript-generator:typescript-generator-core:2.26.723", - "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "io.github.classgraph:classgraph:4.8.90", - "com.sun.xml.bind:jaxb-impl:2.3.1", - "javax.xml.bind:jaxb-api:2.3.1", - "com.sun.istack:istack-commons-runtime:3.0.7", - "com.sun.xml.fastinfoset:FastInfoset:1.2.15", - "org.graalvm.truffle:truffle-api:20.2.0", - "javax.activation:javax.activation-api:1.2.0", - "org.codehaus.jackson:jackson-mapper-asl:1.9.13", - "org.ow2.asm:asm:7.3.1", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", - "org.jvnet.staxex:stax-ex:1.8", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "com.google.code.gson:gson:2.8.6", - "org.glassfish.jaxb:txw2:2.3.1", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.11.2", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", - "org.ow2.asm:asm-tree:7.3.1", - "org.graalvm.sdk:graal-sdk:20.2.0", - "org.ow2.asm:asm-commons:7.3.1", - "org.graalvm.regex:regex:20.2.0", - "org.graalvm.js:js-scriptengine:20.2.0", - "javax.ws.rs:javax.ws.rs-api:2.1.1", - "org.ow2.asm:asm-util:7.1", - "org.codehaus.jackson:jackson-core-asl:1.9.13", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", - "org.ow2.asm:asm-analysis:7.3.1", - "org.graalvm.js:js:20.2.0", - "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.2", - "jakarta.activation:jakarta.activation-api:1.2.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.ibm.icu:icu4j:67.1", - "org.glassfish.jaxb:jaxb-runtime:2.3.1", - "org.jetbrains:annotations:13.0", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2", - "jakarta.json.bind:jakarta.json.bind-api:1.0.2", - "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" - ], - "directDependencies": [ - "io.github.classgraph:classgraph:4.8.90", - "com.sun.xml.bind:jaxb-impl:2.3.1", - "javax.xml.bind:jaxb-api:2.3.1", - "javax.activation:javax.activation-api:1.2.0", - "org.codehaus.jackson:jackson-mapper-asl:1.9.13", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "com.google.code.gson:gson:2.8.6", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.11.2", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", - "org.graalvm.js:js-scriptengine:20.2.0", - "javax.ws.rs:javax.ws.rs-api:2.1.1", - "org.graalvm.js:js:20.2.0", - "org.glassfish.jaxb:jaxb-runtime:2.3.1", - "jakarta.json.bind:jakarta.json.bind-api:1.0.2" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/cz/habarta/typescript-generator/typescript-generator-core/2.26.723/typescript-generator-core-2.26.723.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/cz/habarta/typescript-generator/typescript-generator-core/2.26.723/typescript-generator-core-2.26.723.jar", - "https://oss.sonatype.org/content/repositories/snapshots/cz/habarta/typescript-generator/typescript-generator-core/2.26.723/typescript-generator-core-2.26.723.jar", - "https://repo1.maven.org/maven2/cz/habarta/typescript-generator/typescript-generator-core/2.26.723/typescript-generator-core-2.26.723.jar", - "https://jitpack.io/cz/habarta/typescript-generator/typescript-generator-core/2.26.723/typescript-generator-core-2.26.723.jar" - ], - "sha256": "ecd82a0087a90f9971e0359d6e069aa38ee3ca356ae04056754263cb3cabbff7", - "url": "https://repo1.maven.org/maven2/cz/habarta/typescript-generator/typescript-generator-core/2.26.723/typescript-generator-core-2.26.723.jar" - }, { "coord": "info.picocli:picocli:4.5.2", "dependencies": [], @@ -2161,27 +2005,27 @@ { "coord": "io.confluent:kafka-avro-serializer:5.5.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "io.confluent:kafka-schema-serializer:5.5.1", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.xerial.snappy:snappy-java:1.1.7.5", "org.glassfish.hk2.external:jakarta.inject:2.6.1", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.apache.commons:commons-compress:1.20", "org.lz4:lz4-java:1.7.1", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.avro:avro:1.10.0", "jakarta.annotation:jakarta.annotation-api:1.3.5", "javax.ws.rs:javax.ws.rs-api:2.1.1", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.sun.activation:jakarta.activation:1.2.1", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "io.confluent:kafka-schema-registry-client:5.5.1", "com.github.luben:zstd-jni:1.4.5-2", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.glassfish.jersey.core:jersey-common:2.30" ], "directDependencies": [ @@ -2211,13 +2055,12 @@ "coord": "io.confluent:kafka-json-schema-provider:5.5.1", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "io.github.classgraph:classgraph:4.8.90", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "com.kjetland:mbknor-jackson-jsonschema_2.12:1.0.39", "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", "commons-validator:commons-validator:1.6", "com.github.everit-org.json-schema:org.everit.json.schema:1.12.1", + "io.github.classgraph:classgraph:4.8.21", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.50", "com.google.j2objc:j2objc-annotations:1.3", @@ -2229,37 +2072,38 @@ "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.50", "org.glassfish.hk2.external:jakarta.inject:2.6.1", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", "org.json:json:20190722", "org.apache.commons:commons-compress:1.20", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", "org.lz4:lz4-java:1.7.1", "com.google.re2j:re2j:1.3", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.avro:avro:1.10.0", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", "com.google.errorprone:error_prone_annotations:2.3.4", "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", "com.damnhandy:handy-uri-templates:2.1.8", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "javax.ws.rs:javax.ws.rs-api:2.1.1", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", "commons-digester:commons-digester:1.8.1", "joda-time:joda-time:2.10.2", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.sun.activation:jakarta.activation:1.2.1", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", "org.scala-lang:scala-library:2.12.10", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", "io.confluent:kafka-schema-registry-client:5.5.1", "com.github.luben:zstd-jni:1.4.5-2", "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "javax.validation:validation-api:2.0.1.Final", "org.glassfish.jersey.core:jersey-common:2.30", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", @@ -2271,11 +2115,11 @@ "com.kjetland:mbknor-jackson-jsonschema_2.12:1.0.39", "com.github.everit-org.json-schema:org.everit.json.schema:1.12.1", "com.fasterxml.jackson.datatype:jackson-datatype-joda:2.10.2", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", "io.confluent:common-utils:5.5.1", "io.confluent:kafka-schema-registry-client:5.5.1", "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "com.fasterxml.jackson.datatype:jackson-datatype-guava:2.10.2" ], "exclusions": [ @@ -2298,7 +2142,6 @@ "coord": "io.confluent:kafka-protobuf-provider:5.5.1", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "org.apache.kafka:kafka-clients:5.5.1-ccs", "com.google.j2objc:j2objc-annotations:1.3", @@ -2307,31 +2150,32 @@ "org.glassfish.hk2.external:jakarta.inject:2.6.1", "com.squareup.wire:wire-schema:3.2.2", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.apache.commons:commons-compress:1.20", "com.google.protobuf:protobuf-java:3.11.4", "com.squareup.wire:wire-runtime:3.2.2", "com.squareup.okio:okio:2.5.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", "org.lz4:lz4-java:1.7.1", "com.google.code.gson:gson:2.8.6", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71", "org.apache.avro:avro:1.10.0", "com.google.errorprone:error_prone_annotations:2.3.4", "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "javax.ws.rs:javax.ws.rs-api:2.1.1", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.sun.activation:jakarta.activation:1.2.1", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", "io.confluent:kafka-schema-registry-client:5.5.1", "com.github.luben:zstd-jni:1.4.5-2", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.glassfish.jersey.core:jersey-common:2.30", "com.google.protobuf:protobuf-java-util:3.11.4", "org.jetbrains:annotations:13.0", @@ -2363,35 +2207,35 @@ { "coord": "io.confluent:kafka-schema-registry-client:5.5.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.xerial.snappy:snappy-java:1.1.7.5", "org.glassfish.hk2.external:jakarta.inject:2.6.1", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.apache.commons:commons-compress:1.20", "org.lz4:lz4-java:1.7.1", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.avro:avro:1.10.0", "jakarta.annotation:jakarta.annotation-api:1.3.5", "javax.ws.rs:javax.ws.rs-api:2.1.1", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.sun.activation:jakarta.activation:1.2.1", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.github.luben:zstd-jni:1.4.5-2", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.glassfish.jersey.core:jersey-common:2.30" ], "directDependencies": [ "org.apache.kafka:kafka-clients:5.5.1-ccs", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.avro:avro:1.10.0", "javax.ws.rs:javax.ws.rs-api:2.1.1", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.glassfish.jersey.core:jersey-common:2.30" ], "exclusions": [ @@ -2415,14 +2259,13 @@ "dependencies": [ "javax.websocket:javax.websocket-api:1.0", "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "io.github.classgraph:classgraph:4.8.90", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "com.kjetland:mbknor-jackson-jsonschema_2.12:1.0.39", "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", "commons-validator:commons-validator:1.6", "com.github.everit-org.json-schema:org.everit.json.schema:1.12.1", "javax.xml.bind:jaxb-api:2.3.1", + "io.github.classgraph:classgraph:4.8.21", "javax.activation:activation:1.1.1", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.50", @@ -2449,10 +2292,10 @@ "org.glassfish.jersey.media:jersey-media-jaxb:2.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", "com.typesafe.scala-logging:scala-logging_2.12:3.9.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.glassfish.hk2.external:aopalliance-repackaged:2.6.1", "org.apache.zookeeper:zookeeper:3.5.8", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", "org.eclipse.jetty:jetty-xml:9.4.29.v20200521", "org.json:json:20190722", "org.eclipse.jetty.websocket:websocket-client:9.4.29.v20200521", @@ -2462,7 +2305,6 @@ "com.google.protobuf:protobuf-java:3.11.4", "com.squareup.wire:wire-runtime:3.2.2", "com.squareup.okio:okio:2.5.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", "org.eclipse.jetty:jetty-jmx:9.4.24.v20191120", "io.swagger:swagger-models:1.6.0", "org.lz4:lz4-java:1.7.1", @@ -2473,8 +2315,8 @@ "io.netty:netty-transport-native-epoll:4.1.48.Final", "com.google.code.gson:gson:2.8.6", "io.confluent:common-metrics:5.5.1", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.11.2", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "io.confluent:kafka-protobuf-provider:5.5.1", "org.eclipse.jetty:jetty-client:9.4.29.v20200521", "org.glassfish.jersey.core:jersey-server:2.30", @@ -2484,7 +2326,6 @@ "org.apache.avro:avro:1.10.0", "org.glassfish.jersey.containers:jersey-container-servlet-core:2.30", "org.glassfish.jersey.core:jersey-client:2.30", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", "org.ow2.asm:asm-tree:7.3.1", "com.google.errorprone:error_prone_annotations:2.3.4", "jakarta.annotation:jakarta.annotation-api:1.3.5", @@ -2496,6 +2337,7 @@ "org.ow2.asm:asm-commons:7.3.1", "org.eclipse.jetty:jetty-annotations:9.4.29.v20200521", "org.eclipse.jetty.websocket:websocket-api:9.4.29.v20200521", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", "org.apache.yetus:audience-annotations:0.5.0", "org.scala-lang:scala-reflect:2.12.10", @@ -2504,13 +2346,14 @@ "org.eclipse.jetty:jetty-jndi:9.4.29.v20200521", "com.yammer.metrics:metrics-core:2.2.0", "org.glassfish.jersey.ext:jersey-bean-validation:2.30", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "javax.ws.rs:javax.ws.rs-api:2.1.1", "jakarta.validation:jakarta.validation-api:2.0.2", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.2", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", "commons-digester:commons-digester:1.8.1", "joda-time:joda-time:2.10.2", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.101tec:zkclient:0.11", "org.eclipse.jetty:jetty-plus:9.4.29.v20200521", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", @@ -2519,7 +2362,6 @@ "org.eclipse.jetty:jetty-jaas:9.4.24.v20191120", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "org.hibernate.validator:hibernate-validator:6.0.17.Final", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", "io.confluent:common-utils:5.5.1", "org.ow2.asm:asm-analysis:7.3.1", "javax.annotation:javax.annotation-api:1.3.2", @@ -2530,11 +2372,11 @@ "org.glassfish.hk2:hk2-locator:2.6.1", "org.scala-lang:scala-library:2.12.10", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.eclipse.jetty.websocket:javax-websocket-client-impl:9.4.29.v20200521", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "com.google.guava:guava:29.0-jre", "org.glassfish.jersey.containers:jersey-container-servlet:2.30", - "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.2", "com.fasterxml:classmate:1.3.4", "io.netty:netty-common:4.1.51.Final", "org.glassfish:jakarta.el:3.0.3", @@ -2547,14 +2389,17 @@ "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", "io.swagger:swagger-annotations:1.6.0", "org.scala-lang.modules:scala-collection-compat_2.12:2.1.3", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "org.apache.commons:commons-lang3:3.9", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "javax.validation:validation-api:2.0.1.Final", "jakarta.el:jakarta.el-api:3.0.3", "io.netty:netty-transport-native-unix-common:4.1.48.Final", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.1", "org.glassfish.jersey.core:jersey-common:2.30", + "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.2", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.10.2", "com.google.protobuf:protobuf-java-util:3.11.4", "io.confluent:kafka-json-schema-provider:5.5.1", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", @@ -2563,7 +2408,6 @@ "org.checkerframework:checker-qual:2.11.1", "org.glassfish.hk2:hk2-api:2.6.1", "com.fasterxml.jackson.datatype:jackson-datatype-guava:2.10.2", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2", "net.sf.jopt-simple:jopt-simple:5.0.4", "com.fasterxml.jackson.module:jackson-module-paranamer:2.10.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" @@ -2603,26 +2447,26 @@ { "coord": "io.confluent:kafka-schema-serializer:5.5.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.xerial.snappy:snappy-java:1.1.7.5", "org.glassfish.hk2.external:jakarta.inject:2.6.1", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.apache.commons:commons-compress:1.20", "org.lz4:lz4-java:1.7.1", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.avro:avro:1.10.0", "jakarta.annotation:jakarta.annotation-api:1.3.5", "javax.ws.rs:javax.ws.rs-api:2.1.1", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.sun.activation:jakarta.activation:1.2.1", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "io.confluent:kafka-schema-registry-client:5.5.1", "com.github.luben:zstd-jni:1.4.5-2", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.glassfish.jersey.core:jersey-common:2.30" ], "directDependencies": [ @@ -2649,7 +2493,6 @@ { "coord": "io.confluent:kafka-streams-avro-serde:5.5.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "io.confluent:kafka-schema-serializer:5.5.1", "org.apache.kafka:kafka-clients:5.5.1-ccs", @@ -2657,20 +2500,21 @@ "io.confluent:kafka-avro-serializer:5.5.1", "org.glassfish.hk2.external:jakarta.inject:2.6.1", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.apache.commons:commons-compress:1.20", "org.lz4:lz4-java:1.7.1", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.avro:avro:1.10.0", "jakarta.annotation:jakarta.annotation-api:1.3.5", "javax.ws.rs:javax.ws.rs-api:2.1.1", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.sun.activation:jakarta.activation:1.2.1", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "io.confluent:kafka-schema-registry-client:5.5.1", "com.github.luben:zstd-jni:1.4.5-2", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.glassfish.jersey.core:jersey-common:2.30" ], "directDependencies": [ @@ -2699,7 +2543,6 @@ "coord": "io.confluent:rest-utils:5.5.1", "dependencies": [ "javax.websocket:javax.websocket-api:1.0", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6", "javax.xml.bind:jaxb-api:2.3.1", "javax.activation:activation:1.1.1", @@ -2714,6 +2557,7 @@ "org.slf4j:slf4j-api:1.7.30", "org.glassfish.jersey.media:jersey-media-jaxb:2.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.glassfish.hk2:osgi-resource-locator:1.0.3", "org.glassfish.hk2.external:aopalliance-repackaged:2.6.1", "org.eclipse.jetty:jetty-xml:9.4.29.v20200521", @@ -2725,7 +2569,7 @@ "javax.websocket:javax.websocket-client-api:1.0", "org.eclipse.jetty:jetty-servlets:9.4.29.v20200521", "io.confluent:common-metrics:5.5.1", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.eclipse.jetty:jetty-client:9.4.29.v20200521", "org.glassfish.jersey.core:jersey-server:2.30", "org.glassfish.hk2:hk2-utils:2.6.1", @@ -2740,7 +2584,7 @@ "org.eclipse.jetty:jetty-jndi:9.4.29.v20200521", "org.glassfish.jersey.ext:jersey-bean-validation:2.30", "jakarta.validation:jakarta.validation-api:2.0.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.2", "org.eclipse.jetty:jetty-plus:9.4.29.v20200521", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", "com.sun.activation:jakarta.activation:1.2.1", @@ -2756,21 +2600,21 @@ "org.javassist:javassist:3.26.0-GA", "org.jboss.logging:jboss-logging:3.3.2.Final", "org.glassfish.hk2:hk2-locator:2.6.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.eclipse.jetty.websocket:javax-websocket-client-impl:9.4.29.v20200521", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "org.glassfish.jersey.containers:jersey-container-servlet:2.30", - "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.2", "com.fasterxml:classmate:1.3.4", "org.glassfish:jakarta.el:3.0.3", "jakarta.activation:jakarta.activation-api:1.2.2", "javax.servlet:javax.servlet-api:3.1.0", "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "jakarta.el:jakarta.el-api:3.0.3", "org.glassfish.jersey.core:jersey-common:2.30", + "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.2", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.10.2", "org.glassfish.hk2:hk2-api:2.6.1", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2", "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" ], "directDependencies": [ @@ -2778,21 +2622,21 @@ "javax.activation:activation:1.1.1", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.glassfish.jersey.inject:jersey-hk2:2.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.eclipse.jetty.websocket:javax-websocket-server-impl:9.4.29.v20200521", "org.eclipse.jetty:jetty-jmx:9.4.24.v20191120", "org.eclipse.jetty:jetty-servlets:9.4.29.v20200521", "io.confluent:common-metrics:5.5.1", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.glassfish.jersey.ext:jersey-bean-validation:2.30", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.2", "org.eclipse.jetty:jetty-jaas:9.4.24.v20191120", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "io.confluent:common-utils:5.5.1", "io.confluent:common-config:5.5.1", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "org.glassfish.jersey.containers:jersey-container-servlet:2.30", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.11.2" + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.10.2" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -2811,7 +2655,7 @@ "url": "https://packages.confluent.io/maven/io/confluent/rest-utils/5.5.1/rest-utils-5.5.1.jar" }, { - "coord": "io.github.classgraph:classgraph:4.8.90", + "coord": "io.github.classgraph:classgraph:4.8.21", "dependencies": [], "directDependencies": [], "exclusions": [ @@ -2820,15 +2664,15 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/io/github/classgraph/classgraph/4.8.90/classgraph-4.8.90.jar", + "file": "v1/https/repo1.maven.org/maven2/io/github/classgraph/classgraph/4.8.21/classgraph-4.8.21.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/io/github/classgraph/classgraph/4.8.90/classgraph-4.8.90.jar", - "https://oss.sonatype.org/content/repositories/snapshots/io/github/classgraph/classgraph/4.8.90/classgraph-4.8.90.jar", - "https://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.8.90/classgraph-4.8.90.jar", - "https://jitpack.io/io/github/classgraph/classgraph/4.8.90/classgraph-4.8.90.jar" + "https://packages.confluent.io/maven/io/github/classgraph/classgraph/4.8.21/classgraph-4.8.21.jar", + "https://oss.sonatype.org/content/repositories/snapshots/io/github/classgraph/classgraph/4.8.21/classgraph-4.8.21.jar", + "https://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.8.21/classgraph-4.8.21.jar", + "https://jitpack.io/io/github/classgraph/classgraph/4.8.21/classgraph-4.8.21.jar" ], - "sha256": "8c371cf781d7bf1c6f3e38715a0c89cab387d940f07f8d4eeb90caa665b2acb0", - "url": "https://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.8.90/classgraph-4.8.90.jar" + "sha256": "4cdfbb73c4c3e79b6707ec4f7520adb5d23c27baecdc39cfb145ff529ce5c151", + "url": "https://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.8.21/classgraph-4.8.21.jar" }, { "coord": "io.grpc:grpc-context:1.22.1", @@ -2897,13 +2741,13 @@ { "coord": "io.jsonwebtoken:jjwt-jackson:0.10.7", "dependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "io.jsonwebtoken:jjwt-api:0.10.7" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "io.jsonwebtoken:jjwt-api:0.10.7" ], "exclusions": [ @@ -3352,28 +3196,28 @@ "coord": "io.swagger:swagger-core:1.6.0", "dependencies": [ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", - "com.fasterxml.jackson.core:jackson-core:2.11.2", "com.google.j2objc:j2objc-annotations:1.3", "org.yaml:snakeyaml:1.26", "com.google.code.findbugs:jsr305:3.0.2", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "io.swagger:swagger-models:1.6.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.google.errorprone:error_prone_annotations:2.3.4", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "com.google.guava:failureaccess:1.0.1", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.google.guava:guava:29.0-jre", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.apache.commons:commons-lang3:3.9", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.1", "org.checkerframework:checker-qual:2.11.1" ], "directDependencies": [ "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "io.swagger:swagger-models:1.6.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.google.guava:guava:29.0-jre", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.apache.commons:commons-lang3:3.9", "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.1" ], @@ -3399,10 +3243,10 @@ "dependencies": [ "org.slf4j:slf4j-api:1.7.30", "io.swagger:swagger-annotations:1.6.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2" + "com.fasterxml.jackson.core:jackson-annotations:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "io.swagger:swagger-annotations:1.6.0", "org.slf4j:slf4j-api:1.7.30" ], @@ -3692,26 +3536,6 @@ "sha256": "47ae0a91fb6dd32fdaa5d9bda63df043ac8148e00c297ccce8ab9c56b95cf261", "url": "https://repo1.maven.org/maven2/jakarta/el/jakarta.el-api/3.0.3/jakarta.el-api-3.0.3.jar" }, - { - "coord": "jakarta.json.bind:jakarta.json.bind-api:1.0.2", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar", - "https://oss.sonatype.org/content/repositories/snapshots/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar", - "https://repo1.maven.org/maven2/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar", - "https://jitpack.io/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar" - ], - "sha256": "29226a8ee37ffb7bfb56d5336c3bb93eeed8cebc5498152bbaae1d49ade2b8fe", - "url": "https://repo1.maven.org/maven2/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar" - }, { "coord": "jakarta.servlet:jakarta.servlet-api:4.0.3", "dependencies": [], @@ -4218,20 +4042,20 @@ { "coord": "org.apache.avro:avro-compiler:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:avro:1.10.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.apache.commons:commons-lang3:3.9" ], "directDependencies": [ "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:avro:1.10.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.apache.commons:commons-lang3:3.9" ], "exclusions": [ @@ -4253,24 +4077,24 @@ { "coord": "org.apache.avro:avro-ipc-jetty:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.xerial.snappy:snappy-java:1.1.7.5", "org.eclipse.jetty:jetty-http:9.4.29.v20200521", "org.apache.avro:avro-ipc:1.10.0", "org.slf4j:slf4j-api:1.7.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "javax.annotation:javax.annotation-api:1.3.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "javax.servlet:javax.servlet-api:3.1.0", "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "org.apache.commons:commons-lang3:3.9" ], @@ -4301,29 +4125,29 @@ { "coord": "org.apache.avro:avro-ipc:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.xerial.snappy:snappy-java:1.1.7.5", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "javax.annotation:javax.annotation-api:1.3.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.apache.commons:commons-lang3:3.9" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.xerial.snappy:snappy-java:1.1.7.5", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", "javax.annotation:javax.annotation-api:1.3.2", - "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.github.luben:zstd-jni:1.4.5-2" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -4344,30 +4168,30 @@ { "coord": "org.apache.avro:avro-mapred:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.avro:avro-ipc-jetty:1.10.0", "org.xerial.snappy:snappy-java:1.1.7.5", "org.eclipse.jetty:jetty-http:9.4.29.v20200521", "org.apache.avro:avro-ipc:1.10.0", "org.slf4j:slf4j-api:1.7.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "javax.annotation:javax.annotation-api:1.3.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "javax.servlet:javax.servlet-api:3.1.0", "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "org.apache.commons:commons-lang3:3.9" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.apache.avro:avro-ipc:1.10.0", "org.apache.avro:avro-ipc-jetty:1.10.0", "org.slf4j:slf4j-api:1.7.30" @@ -4391,30 +4215,30 @@ { "coord": "org.apache.avro:avro-tools:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.avro:avro-ipc-jetty:1.10.0", "org.xerial.snappy:snappy-java:1.1.7.5", "org.eclipse.jetty:jetty-http:9.4.29.v20200521", "org.apache.avro:avro-ipc:1.10.0", "org.slf4j:slf4j-api:1.7.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:trevni-core:1.10.0", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "javax.annotation:javax.annotation-api:1.3.2", "org.apache.avro:trevni-core:jar:tests:1.10.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.apache.avro:avro-mapred:1.10.0", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "javax.servlet:javax.servlet-api:3.1.0", "org.apache.avro:avro-compiler:1.10.0", "com.github.luben:zstd-jni:1.4.5-2", "commons-cli:commons-cli:1.4", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "org.apache.commons:commons-lang3:3.9", "org.apache.avro:trevni-avro:jar:tests:1.10.0", @@ -4422,7 +4246,6 @@ "net.sf.jopt-simple:jopt-simple:5.0.4" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.xerial.snappy:snappy-java:1.1.7.5", "org.apache.avro:avro-ipc:1.10.0", "org.slf4j:slf4j-api:1.7.30", @@ -4430,6 +4253,7 @@ "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", "org.apache.avro:trevni-core:jar:tests:1.10.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.apache.avro:avro-mapred:1.10.0", "org.apache.avro:avro-compiler:1.10.0", "com.github.luben:zstd-jni:1.4.5-2", @@ -4457,15 +4281,15 @@ { "coord": "org.apache.avro:avro:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-databind:2.11.0", + "com.fasterxml.jackson.core:jackson-core:2.11.0" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.commons:commons-compress:1.20", "org.slf4j:slf4j-api:1.7.30" ], @@ -4488,27 +4312,27 @@ { "coord": "org.apache.avro:trevni-avro:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.avro:avro-ipc-jetty:1.10.0", "org.xerial.snappy:snappy-java:1.1.7.5", "org.eclipse.jetty:jetty-http:9.4.29.v20200521", "org.apache.avro:avro-ipc:1.10.0", "org.slf4j:slf4j-api:1.7.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:trevni-core:1.10.0", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "javax.annotation:javax.annotation-api:1.3.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.apache.avro:avro-mapred:1.10.0", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "javax.servlet:javax.servlet-api:3.1.0", "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "org.apache.commons:commons-lang3:3.9" ], @@ -4537,27 +4361,27 @@ { "coord": "org.apache.avro:trevni-avro:jar:tests:1.10.0", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.avro:avro-ipc-jetty:1.10.0", "org.xerial.snappy:snappy-java:1.1.7.5", "org.eclipse.jetty:jetty-http:9.4.29.v20200521", "org.apache.avro:avro-ipc:1.10.0", "org.slf4j:slf4j-api:1.7.30", "org.eclipse.jetty:jetty-io:9.4.29.v20200521", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.commons:commons-compress:1.20", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.apache.velocity:velocity-engine-core:2.2", "org.apache.avro:trevni-core:1.10.0", "org.apache.avro:avro:1.10.0", "org.tukaani:xz:1.8", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.eclipse.jetty:jetty-util:9.4.29.v20200521", "org.eclipse.jetty:jetty-server:9.4.29.v20200521", "javax.annotation:javax.annotation-api:1.3.2", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.apache.avro:avro-mapred:1.10.0", "org.eclipse.jetty:jetty-servlet:9.4.29.v20200521", "javax.servlet:javax.servlet-api:3.1.0", "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "org.eclipse.jetty:jetty-security:9.4.29.v20200521", "org.apache.commons:commons-lang3:3.9" ], @@ -4805,19 +4629,19 @@ { "coord": "org.apache.kafka:connect-json:2.5.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.xerial.snappy:snappy-java:1.1.7.5", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.kafka:connect-api:2.5.1", "org.lz4:lz4-java:1.7.1", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.github.luben:zstd-jni:1.4.5-2" ], "directDependencies": [ - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", "org.apache.kafka:connect-api:2.5.1", "org.slf4j:slf4j-api:1.7.30" @@ -4939,18 +4763,18 @@ { "coord": "org.apache.kafka:kafka-streams:2.5.1", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.kafka:kafka-clients:5.5.1-ccs", "org.apache.kafka:connect-json:2.5.1", "org.xerial.snappy:snappy-java:1.1.7.5", "org.slf4j:slf4j-api:1.7.30", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.kafka:connect-api:2.5.1", "org.lz4:lz4-java:1.7.1", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.rocksdb:rocksdbjni:5.18.3", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", - "com.github.luben:zstd-jni:1.4.5-2", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.core:jackson-core:2.11.0", + "com.github.luben:zstd-jni:1.4.5-2" ], "directDependencies": [ "org.apache.kafka:connect-json:2.5.1", @@ -4977,7 +4801,6 @@ { "coord": "org.apache.kafka:kafka_2.12:5.5.1-ccs", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.apache.kafka:kafka-clients:5.5.1-ccs", "com.thoughtworks.paranamer:paranamer:2.8", "com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.2", @@ -4985,10 +4808,12 @@ "com.fasterxml.jackson.module:jackson-module-scala_2.12:2.10.2", "org.slf4j:slf4j-api:1.7.30", "com.typesafe.scala-logging:scala-logging_2.12:3.9.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.apache.zookeeper:zookeeper:3.5.8", "org.lz4:lz4-java:1.7.1", "io.netty:netty-buffer:4.1.51.Final", "io.netty:netty-transport-native-epoll:4.1.48.Final", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "io.netty:netty-codec:4.1.51.Final", "io.netty:netty-resolver:4.1.51.Final", "org.scala-lang.modules:scala-java8-compat_2.12:0.9.0", @@ -4999,13 +4824,12 @@ "io.netty:netty-transport:4.1.51.Final", "com.yammer.metrics:metrics-core:2.2.0", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.scala-lang:scala-library:2.12.10", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "io.netty:netty-common:4.1.51.Final", "com.github.luben:zstd-jni:1.4.5-2", "commons-cli:commons-cli:1.4", "org.scala-lang.modules:scala-collection-compat_2.12:2.1.3", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "io.netty:netty-transport-native-unix-common:4.1.48.Final", "net.sf.jopt-simple:jopt-simple:5.0.4", "com.fasterxml.jackson.module:jackson-module-paranamer:2.10.2" @@ -5017,6 +4841,7 @@ "org.slf4j:slf4j-api:1.7.30", "com.typesafe.scala-logging:scala-logging_2.12:3.9.2", "org.apache.zookeeper:zookeeper:3.5.8", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.scala-lang.modules:scala-java8-compat_2.12:0.9.0", "org.scala-lang:scala-reflect:2.12.10", "com.yammer.metrics:metrics-core:2.2.0", @@ -5024,7 +4849,6 @@ "org.scala-lang:scala-library:2.12.10", "commons-cli:commons-cli:1.4", "org.scala-lang.modules:scala-collection-compat_2.12:2.1.3", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", "net.sf.jopt-simple:jopt-simple:5.0.4" ], "exclusions": [ @@ -5476,50 +5300,6 @@ "sha256": "015224a4b1dc6de6da053273d4da7d39cfea20e63038169fc45ac0d1dc9c5938", "url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1.jar" }, - { - "coord": "org.codehaus.jackson:jackson-core-asl:1.9.13", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar", - "https://repo1.maven.org/maven2/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar", - "https://jitpack.io/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar" - ], - "sha256": "440a9cb5ca95b215f953d3a20a6b1a10da1f09b529a9ddea5f8a4905ddab4f5a", - "url": "https://repo1.maven.org/maven2/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar" - }, - { - "coord": "org.codehaus.jackson:jackson-mapper-asl:1.9.13", - "dependencies": [ - "org.codehaus.jackson:jackson-core-asl:1.9.13" - ], - "directDependencies": [ - "org.codehaus.jackson:jackson-core-asl:1.9.13" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar", - "https://repo1.maven.org/maven2/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar", - "https://jitpack.io/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar" - ], - "sha256": "74e7a07a76f2edbade29312a5a2ebccfa019128bc021ece3856d76197e9be0c2", - "url": "https://repo1.maven.org/maven2/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar" - }, { "coord": "org.eclipse.jetty.websocket:javax-websocket-client-impl:9.4.29.v20200521", "dependencies": [ @@ -6416,60 +6196,6 @@ "sha256": "aab5d7849f7cfcda2cc7c541ba1bd365151d42276f151c825387245dfde3dd74", "url": "https://repo1.maven.org/maven2/org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3.jar" }, - { - "coord": "org.glassfish.jaxb:jaxb-runtime:2.3.1", - "dependencies": [ - "javax.xml.bind:jaxb-api:2.3.1", - "com.sun.istack:istack-commons-runtime:3.0.7", - "com.sun.xml.fastinfoset:FastInfoset:1.2.15", - "javax.activation:javax.activation-api:1.2.0", - "org.jvnet.staxex:stax-ex:1.8", - "org.glassfish.jaxb:txw2:2.3.1" - ], - "directDependencies": [ - "javax.xml.bind:jaxb-api:2.3.1", - "com.sun.istack:istack-commons-runtime:3.0.7", - "com.sun.xml.fastinfoset:FastInfoset:1.2.15", - "javax.activation:javax.activation-api:1.2.0", - "org.jvnet.staxex:stax-ex:1.8", - "org.glassfish.jaxb:txw2:2.3.1" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar", - "https://repo1.maven.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar", - "https://jitpack.io/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar" - ], - "sha256": "45fecfa5c8217ce1f3652ab95179790ec8cc0dec0384bca51cbeb94a293d9f2f", - "url": "https://repo1.maven.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar" - }, - { - "coord": "org.glassfish.jaxb:txw2:2.3.1", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar", - "https://repo1.maven.org/maven2/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar", - "https://jitpack.io/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar" - ], - "sha256": "34975dde1c6920f1a39791142235689bc3cd357e24d05edd8ff93b885bd68d60", - "url": "https://repo1.maven.org/maven2/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar" - }, { "coord": "org.glassfish.jersey.containers:jersey-container-servlet-core:2.30", "dependencies": [ @@ -6787,139 +6513,6 @@ "sha256": "e2bcb8551b02a5c2afdc4cab77302ba5c76705cf1fc832345ca880df80bf4716", "url": "https://repo1.maven.org/maven2/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar" }, - { - "coord": "org.graalvm.js:js-scriptengine:20.2.0", - "dependencies": [ - "org.graalvm.sdk:graal-sdk:20.2.0" - ], - "directDependencies": [ - "org.graalvm.sdk:graal-sdk:20.2.0" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/graalvm/js/js-scriptengine/20.2.0/js-scriptengine-20.2.0.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/graalvm/js/js-scriptengine/20.2.0/js-scriptengine-20.2.0.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/graalvm/js/js-scriptengine/20.2.0/js-scriptengine-20.2.0.jar", - "https://repo1.maven.org/maven2/org/graalvm/js/js-scriptengine/20.2.0/js-scriptengine-20.2.0.jar", - "https://jitpack.io/org/graalvm/js/js-scriptengine/20.2.0/js-scriptengine-20.2.0.jar" - ], - "sha256": "115d7c2030c7cef5a8fd0ec116650e590adc9cf8f9feb44af28112fad02d7bfe", - "url": "https://repo1.maven.org/maven2/org/graalvm/js/js-scriptengine/20.2.0/js-scriptengine-20.2.0.jar" - }, - { - "coord": "org.graalvm.js:js:20.2.0", - "dependencies": [ - "org.graalvm.truffle:truffle-api:20.2.0", - "org.ow2.asm:asm:7.3.1", - "org.ow2.asm:asm-tree:7.3.1", - "org.graalvm.sdk:graal-sdk:20.2.0", - "org.ow2.asm:asm-commons:7.3.1", - "org.graalvm.regex:regex:20.2.0", - "org.ow2.asm:asm-util:7.1", - "org.ow2.asm:asm-analysis:7.3.1", - "com.ibm.icu:icu4j:67.1" - ], - "directDependencies": [ - "org.graalvm.truffle:truffle-api:20.2.0", - "org.ow2.asm:asm:7.3.1", - "org.ow2.asm:asm-tree:7.3.1", - "org.graalvm.sdk:graal-sdk:20.2.0", - "org.ow2.asm:asm-commons:7.3.1", - "org.graalvm.regex:regex:20.2.0", - "org.ow2.asm:asm-util:7.1", - "org.ow2.asm:asm-analysis:7.3.1", - "com.ibm.icu:icu4j:67.1" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/graalvm/js/js/20.2.0/js-20.2.0.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/graalvm/js/js/20.2.0/js-20.2.0.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/graalvm/js/js/20.2.0/js-20.2.0.jar", - "https://repo1.maven.org/maven2/org/graalvm/js/js/20.2.0/js-20.2.0.jar", - "https://jitpack.io/org/graalvm/js/js/20.2.0/js-20.2.0.jar" - ], - "sha256": "1ab85b4c4fc02785b7cb95be5c91841871dde2ff8f9fe7e3f279ca7ad77bf4f6", - "url": "https://repo1.maven.org/maven2/org/graalvm/js/js/20.2.0/js-20.2.0.jar" - }, - { - "coord": "org.graalvm.regex:regex:20.2.0", - "dependencies": [ - "org.graalvm.truffle:truffle-api:20.2.0", - "org.graalvm.sdk:graal-sdk:20.2.0" - ], - "directDependencies": [ - "org.graalvm.truffle:truffle-api:20.2.0" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/graalvm/regex/regex/20.2.0/regex-20.2.0.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/graalvm/regex/regex/20.2.0/regex-20.2.0.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/graalvm/regex/regex/20.2.0/regex-20.2.0.jar", - "https://repo1.maven.org/maven2/org/graalvm/regex/regex/20.2.0/regex-20.2.0.jar", - "https://jitpack.io/org/graalvm/regex/regex/20.2.0/regex-20.2.0.jar" - ], - "sha256": "b2ddfc64d0482f94c885316e9a4b49dac5a6e90322153e3c4c79fcfa64d09b68", - "url": "https://repo1.maven.org/maven2/org/graalvm/regex/regex/20.2.0/regex-20.2.0.jar" - }, - { - "coord": "org.graalvm.sdk:graal-sdk:20.2.0", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/graalvm/sdk/graal-sdk/20.2.0/graal-sdk-20.2.0.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/graalvm/sdk/graal-sdk/20.2.0/graal-sdk-20.2.0.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/graalvm/sdk/graal-sdk/20.2.0/graal-sdk-20.2.0.jar", - "https://repo1.maven.org/maven2/org/graalvm/sdk/graal-sdk/20.2.0/graal-sdk-20.2.0.jar", - "https://jitpack.io/org/graalvm/sdk/graal-sdk/20.2.0/graal-sdk-20.2.0.jar" - ], - "sha256": "aac1e9e8a9c5adf46616b3f08aa208a0382ed24290f482d594efc972545b6868", - "url": "https://repo1.maven.org/maven2/org/graalvm/sdk/graal-sdk/20.2.0/graal-sdk-20.2.0.jar" - }, - { - "coord": "org.graalvm.truffle:truffle-api:20.2.0", - "dependencies": [ - "org.graalvm.sdk:graal-sdk:20.2.0" - ], - "directDependencies": [ - "org.graalvm.sdk:graal-sdk:20.2.0" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/20.2.0/truffle-api-20.2.0.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/graalvm/truffle/truffle-api/20.2.0/truffle-api-20.2.0.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/graalvm/truffle/truffle-api/20.2.0/truffle-api-20.2.0.jar", - "https://repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/20.2.0/truffle-api-20.2.0.jar", - "https://jitpack.io/org/graalvm/truffle/truffle-api/20.2.0/truffle-api-20.2.0.jar" - ], - "sha256": "364cd00a9f9aae08eabb8b304bc34fa5c00ba9eeac2f47020895cc5ff9ed9b57", - "url": "https://repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/20.2.0/truffle-api-20.2.0.jar" - }, { "coord": "org.hamcrest:hamcrest-core:2.1", "dependencies": [ @@ -7204,14 +6797,14 @@ "url": "https://repo1.maven.org/maven2/org/jdbi/jdbi3-sqlobject/3.14.4/jdbi3-sqlobject-3.14.4.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-reflect:1.3.72", + "coord": "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "dependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -7219,15 +6812,15 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.jar", - "https://jitpack.io/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.jar" + "https://packages.confluent.io/maven/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.jar", + "https://oss.sonatype.org/content/repositories/snapshots/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.jar", + "https://jitpack.io/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.jar" ], - "sha256": "a188d9367de1c4ee9479db630985c0597b20709c83161b1430d24edb27e38c40", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.jar" + "sha256": "64583199ea5a54aefd1bd1595288925f784226ee562d1dd279011c6075b3d7a4", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.jar" }, { "coord": "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", @@ -7252,15 +6845,15 @@ { "coord": "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", "org.jetbrains:annotations:13.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1" ], "exclusions": [ @@ -7284,17 +6877,17 @@ "dependencies": [ "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", "org.jetbrains:annotations:13.0" ], "directDependencies": [ "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -7316,18 +6909,18 @@ "coord": "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.50", "dependencies": [ "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", "org.jetbrains:annotations:13.0" ], "directDependencies": [ "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1" ], "exclusions": [ @@ -7350,17 +6943,17 @@ "coord": "org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50", "dependencies": [ "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-reflect:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "org.jetbrains.kotlin:kotlin-reflect:1.3.50", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", "org.jetbrains:annotations:13.0" ], "directDependencies": [ "org.jetbrains.kotlin:kotlin-script-runtime:1.3.50", "org.jetbrains.kotlin:kotlin-scripting-common:1.3.50", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -7379,7 +6972,7 @@ "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.50/kotlin-scripting-jvm-1.3.50.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", + "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71", "dependencies": [], "directDependencies": [], "exclusions": [ @@ -7388,25 +6981,25 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.72/kotlin-stdlib-common-1.3.72.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.72/kotlin-stdlib-common-1.3.72.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.72/kotlin-stdlib-common-1.3.72.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.72/kotlin-stdlib-common-1.3.72.jar", - "https://jitpack.io/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.72/kotlin-stdlib-common-1.3.72.jar" + "https://packages.confluent.io/maven/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.jar", + "https://oss.sonatype.org/content/repositories/snapshots/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.jar", + "https://jitpack.io/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.jar" ], - "sha256": "5e7d1552863e480c1628b1cc39ce230ef829f5b7230106215a05acda5172203a", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.72/kotlin-stdlib-common-1.3.72.jar" + "sha256": "974f8a9b7bfce3d730a86efe0eab219a72621e8530f91e30c89f400ba98092ec", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.jar" }, { "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71", "dependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -7428,12 +7021,12 @@ "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71", "dependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71" + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71" ], "exclusions": [ @@ -7453,14 +7046,14 @@ "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.71/kotlin-stdlib-jdk8-1.3.71.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-stdlib:1.3.72", + "coord": "org.jetbrains.kotlin:kotlin-stdlib:1.3.71", "dependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "directDependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -7468,15 +7061,15 @@ "org.springframework.boot:spring-boot-starter-logging", "org.slf4j:slf4j-log4j12" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.jar", "mirror_urls": [ - "https://packages.confluent.io/maven/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar", - "https://jitpack.io/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar" + "https://packages.confluent.io/maven/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.jar", + "https://oss.sonatype.org/content/repositories/snapshots/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.jar", + "https://jitpack.io/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.jar" ], - "sha256": "3856a7349ebacd6d1be6802b2fed9c4dc2c5a564ea92b6b945ac988243d4b16b", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar" + "sha256": "5ace22b102a96425e4ac44e0558b927f3857b56a33cbc289cf1b70aee645e6a7", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.jar" }, { "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1", @@ -7823,28 +7416,6 @@ "sha256": "460be7b8b3ed913d981f78820b8ec0fb76ed4d8a2cdb3712c34f7997f2e4e825", "url": "https://repo1.maven.org/maven2/org/junit/vintage/junit-vintage-engine/5.6.2/junit-vintage-engine-5.6.2.jar" }, - { - "coord": "org.jvnet.staxex:stax-ex:1.8", - "dependencies": [], - "directDependencies": [], - "exclusions": [ - "org.slf4j:slf4j-log4j12", - "javax.xml.stream:stax-api", - "javax.activation:activation", - "org.springframework.boot:spring-boot-starter-tomcat", - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-logging" - ], - "file": "v1/https/repo1.maven.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar", - "https://repo1.maven.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar", - "https://jitpack.io/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar" - ], - "sha256": "95b05d9590af4154c6513b9c5dc1fb2e55b539972ba0a9ef28e9a0c01d83ad77", - "url": "https://repo1.maven.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar" - }, { "coord": "org.latencyutils:LatencyUtils:2.0.3", "dependencies": [], @@ -8024,10 +7595,14 @@ "org.ow2.asm:asm-tree:7.3.1" ], "exclusions": [ - "ch.qos.logback:logback-classic", + "org.slf4j:slf4j-log4j12", + "javax.websocket:javax.websocket-api", + "javax.servlet:javax.servlet-api", + "javax.annotation:javax.annotation-api", "org.springframework.boot:spring-boot-starter-tomcat", + "ch.qos.logback:logback-classic", "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" + "javax.websocket:javax.websocket-client-api" ], "file": "v1/https/repo1.maven.org/maven2/org/ow2/asm/asm-commons/7.3.1/asm-commons-7.3.1.jar", "mirror_urls": [ @@ -8063,34 +7638,6 @@ "sha256": "f91a4a8aa868c5c4665bb4fd134019a91f9f8b9216527fba295e3c8b5422b78b", "url": "https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/7.3.1/asm-tree-7.3.1.jar" }, - { - "coord": "org.ow2.asm:asm-util:7.1", - "dependencies": [ - "org.ow2.asm:asm-analysis:7.3.1", - "org.ow2.asm:asm:7.3.1", - "org.ow2.asm:asm-tree:7.3.1" - ], - "directDependencies": [ - "org.ow2.asm:asm:7.3.1", - "org.ow2.asm:asm-analysis:7.3.1", - "org.ow2.asm:asm-tree:7.3.1" - ], - "exclusions": [ - "ch.qos.logback:logback-classic", - "org.springframework.boot:spring-boot-starter-tomcat", - "org.springframework.boot:spring-boot-starter-logging", - "org.slf4j:slf4j-log4j12" - ], - "file": "v1/https/repo1.maven.org/maven2/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar", - "mirror_urls": [ - "https://packages.confluent.io/maven/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar", - "https://oss.sonatype.org/content/repositories/snapshots/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar", - "https://repo1.maven.org/maven2/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar", - "https://jitpack.io/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar" - ], - "sha256": "a24485517596ae1003dcf2329c044a2a861e5c25d4476a695ccaacf560c74d1a", - "url": "https://repo1.maven.org/maven2/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar" - }, { "coord": "org.ow2.asm:asm:7.3.1", "dependencies": [], @@ -8372,26 +7919,26 @@ { "coord": "org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.1.RELEASE", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE", "org.springframework:spring-jcl:5.2.8.RELEASE", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.springframework:spring-beans:5.2.8.RELEASE", "org.springframework.boot:spring-boot-actuator:2.3.1.RELEASE", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot:2.3.1.RELEASE", "org.springframework:spring-core:5.2.8.RELEASE", "org.springframework:spring-expression:5.2.8.RELEASE", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.springframework:spring-aop:5.2.8.RELEASE", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.springframework:spring-context:5.2.8.RELEASE", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0" ], "directDependencies": [ "org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", "org.springframework.boot:spring-boot-actuator:2.3.1.RELEASE", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot:2.3.1.RELEASE", - "com.fasterxml.jackson.core:jackson-databind:2.11.2" + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0" ], "exclusions": [ "ch.qos.logback:logback-classic", @@ -8492,23 +8039,23 @@ { "coord": "org.springframework.boot:spring-boot-starter-actuator:2.3.1.RELEASE", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE", "org.springframework:spring-jcl:5.2.8.RELEASE", "org.latencyutils:LatencyUtils:2.0.3", "org.yaml:snakeyaml:1.26", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.springframework:spring-beans:5.2.8.RELEASE", "org.springframework.boot:spring-boot-actuator:2.3.1.RELEASE", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot:2.3.1.RELEASE", "org.springframework.boot:spring-boot-starter:2.3.1.RELEASE", "org.springframework:spring-core:5.2.8.RELEASE", "org.springframework:spring-expression:5.2.8.RELEASE", "jakarta.annotation:jakarta.annotation-api:1.3.5", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.springframework:spring-aop:5.2.8.RELEASE", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.springframework:spring-context:5.2.8.RELEASE", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "org.hdrhistogram:HdrHistogram:2.1.12", "io.micrometer:micrometer-core:1.5.1", "org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.1.RELEASE" @@ -8677,31 +8224,31 @@ { "coord": "org.springframework.boot:spring-boot-starter-json:2.3.1.RELEASE", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE", "org.springframework:spring-jcl:5.2.8.RELEASE", "org.yaml:snakeyaml:1.26", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.springframework:spring-beans:5.2.8.RELEASE", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot:2.3.1.RELEASE", "org.springframework.boot:spring-boot-starter:2.3.1.RELEASE", "org.springframework:spring-core:5.2.8.RELEASE", "org.springframework:spring-expression:5.2.8.RELEASE", "jakarta.annotation:jakarta.annotation-api:1.3.5", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.springframework:spring-aop:5.2.8.RELEASE", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.springframework:spring-context:5.2.8.RELEASE", "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "org.springframework:spring-web:5.2.7.RELEASE" ], "directDependencies": [ - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot-starter:2.3.1.RELEASE", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "org.springframework:spring-web:5.2.7.RELEASE" ], "exclusions": [ @@ -8881,25 +8428,25 @@ { "coord": "org.springframework.boot:spring-boot-starter-web:2.3.1.RELEASE", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE", "org.springframework:spring-jcl:5.2.8.RELEASE", "org.yaml:snakeyaml:1.26", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.springframework:spring-beans:5.2.8.RELEASE", "org.springframework.boot:spring-boot-starter-json:2.3.1.RELEASE", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot:2.3.1.RELEASE", "org.springframework.boot:spring-boot-starter:2.3.1.RELEASE", "org.springframework:spring-core:5.2.8.RELEASE", "org.springframework:spring-expression:5.2.8.RELEASE", "jakarta.annotation:jakarta.annotation-api:1.3.5", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.springframework:spring-aop:5.2.8.RELEASE", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.springframework:spring-context:5.2.8.RELEASE", "org.springframework:spring-webmvc:5.2.7.RELEASE", "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "org.springframework:spring-web:5.2.7.RELEASE" ], "directDependencies": [ @@ -8927,13 +8474,13 @@ { "coord": "org.springframework.boot:spring-boot-starter-websocket:2.3.1.RELEASE", "dependencies": [ - "com.fasterxml.jackson.core:jackson-core:2.11.2", "org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE", "org.springframework:spring-jcl:5.2.8.RELEASE", "org.yaml:snakeyaml:1.26", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2", + "com.fasterxml.jackson.core:jackson-annotations:2.11.0", "org.springframework:spring-beans:5.2.8.RELEASE", "org.springframework.boot:spring-boot-starter-json:2.3.1.RELEASE", + "com.fasterxml.jackson.core:jackson-databind:2.11.0", "org.springframework.boot:spring-boot:2.3.1.RELEASE", "org.springframework.boot:spring-boot-starter:2.3.1.RELEASE", "org.springframework:spring-messaging:5.2.7.RELEASE", @@ -8941,12 +8488,12 @@ "org.springframework:spring-expression:5.2.8.RELEASE", "jakarta.annotation:jakarta.annotation-api:1.3.5", "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0", - "com.fasterxml.jackson.core:jackson-annotations:2.11.2", "org.springframework:spring-aop:5.2.8.RELEASE", + "com.fasterxml.jackson.core:jackson-core:2.11.0", "org.springframework:spring-context:5.2.8.RELEASE", "org.springframework:spring-webmvc:5.2.7.RELEASE", "com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0", - "com.fasterxml.jackson.core:jackson-databind:2.11.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0", "org.springframework:spring-web:5.2.7.RELEASE", "org.springframework:spring-websocket:5.2.7.RELEASE", "org.springframework.boot:spring-boot-starter-web:2.3.1.RELEASE" From 01c0b5abe2787ec59c0c1aa8234dde498b547257 Mon Sep 17 00:00:00 2001 From: Pascal Holy <54705263+pascal-airy@users.noreply.github.com> Date: Wed, 27 Jan 2021 09:20:33 +0100 Subject: [PATCH 04/46] Upgrade viper (#747) Fixes #749 --- go_repositories.bzl | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/go_repositories.bzl b/go_repositories.bzl index 05a2847486..56a6c049bb 100644 --- a/go_repositories.bzl +++ b/go_repositories.bzl @@ -1343,8 +1343,20 @@ def go_repositories(): go_repository( name = "com_github_spf13_viper", importpath = "github.com/spf13/viper", - sum = "h1:5+8j8FTpnFV4nEImW/ofkzEt8VoOiLXxdYIDsB73T38=", - version = "v1.3.1", + sum = "h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=", + version = "v1.7.1", + ) + go_repository( + name = "com_github_subosito_gotenv", + importpath = "github.com/subosito/gotenv", + sum = "h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=", + version = "v1.2.0", + ) + go_repository( + name = "in_gopkg_ini_v1", + importpath = "gopkg.in/ini.v1", + sum = "h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=", + version = "v1.62.0", ) go_repository( name = "com_github_streadway_amqp", From c43aadb446c1451c5aa3d54bf362f87c19cd065d Mon Sep 17 00:00:00 2001 From: Kazeem Adetunji Date: Wed, 27 Jan 2021 10:31:07 +0100 Subject: [PATCH 05/46] [#654] Replace scss files with scss modules (#753) * Initial commit * Replaced scss styles with scss modules * Import name changed --- .../src/airyRenderProps/AiryMessage/index.tsx | 8 ++++---- .../{style.module.scss => index.module.scss} | 0 frontend/demo/src/components/IconChannel/index.tsx | 2 +- frontend/demo/src/components/SearchField.tsx | 2 +- .../{style.module.scss => index.module.scss} | 0 .../{index.scss => index.module.scss} | 0 .../demo/src/pages/Inbox/ConversationList/index.tsx | 12 ++++++------ 7 files changed, 12 insertions(+), 12 deletions(-) rename frontend/demo/src/components/IconChannel/{style.module.scss => index.module.scss} (100%) rename frontend/demo/src/components/{style.module.scss => index.module.scss} (100%) rename frontend/demo/src/pages/Inbox/ConversationList/{index.scss => index.module.scss} (100%) diff --git a/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx b/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx index 51bc6d33f9..56cb0c97a6 100644 --- a/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx +++ b/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx @@ -1,7 +1,7 @@ import {h} from 'preact'; import linkifyString from 'linkifyjs/string'; -import style from './index.module.scss'; +import styles from './index.module.scss'; type AiryMessageProps = { message: { @@ -20,12 +20,12 @@ type AiryMessageProps = { const AiryMessage = ({message}: AiryMessageProps) => { const isInbound = message.sender_type === 'source_contact'; const messageDisplay = linkifyString(message.content[0].text, { - className: `${isInbound ? style.messageLinkRight : style.messageLinkLeft}`, + className: `${isInbound ? styles.messageLinkRight : styles.messageLinkLeft}`, }); return ( -
-
+
+
diff --git a/frontend/demo/src/components/IconChannel/style.module.scss b/frontend/demo/src/components/IconChannel/index.module.scss similarity index 100% rename from frontend/demo/src/components/IconChannel/style.module.scss rename to frontend/demo/src/components/IconChannel/index.module.scss diff --git a/frontend/demo/src/components/IconChannel/index.tsx b/frontend/demo/src/components/IconChannel/index.tsx index add9b1e7c5..1648ccc7d7 100644 --- a/frontend/demo/src/components/IconChannel/index.tsx +++ b/frontend/demo/src/components/IconChannel/index.tsx @@ -13,7 +13,7 @@ import {ReactComponent as WhatsappAvatar} from '../../assets/images/icons/whatsa import {ReactComponent as AiryAvatar} from '../../assets/images/icons/airy_avatar.svg'; import {ReactComponent as AiryIcon} from '../../assets/images/icons/airy-icon.svg'; -import styles from './style.module.scss'; +import styles from './index.module.scss'; type IconChannelProps = { channel: Channel; diff --git a/frontend/demo/src/components/SearchField.tsx b/frontend/demo/src/components/SearchField.tsx index d9a65645ef..d10a8a664f 100644 --- a/frontend/demo/src/components/SearchField.tsx +++ b/frontend/demo/src/components/SearchField.tsx @@ -2,7 +2,7 @@ import React, {createRef, useCallback} from 'react'; import closeIcon from '../assets/images/icons/close.svg'; import searchIcon from '../assets/images/icons/search.svg'; -import styles from './style.module.scss'; +import styles from './index.module.scss'; type SearchFieldProps = { id?: string; diff --git a/frontend/demo/src/components/style.module.scss b/frontend/demo/src/components/index.module.scss similarity index 100% rename from frontend/demo/src/components/style.module.scss rename to frontend/demo/src/components/index.module.scss diff --git a/frontend/demo/src/pages/Inbox/ConversationList/index.scss b/frontend/demo/src/pages/Inbox/ConversationList/index.module.scss similarity index 100% rename from frontend/demo/src/pages/Inbox/ConversationList/index.scss rename to frontend/demo/src/pages/Inbox/ConversationList/index.module.scss diff --git a/frontend/demo/src/pages/Inbox/ConversationList/index.tsx b/frontend/demo/src/pages/Inbox/ConversationList/index.tsx index e36e18d76e..373201e0fd 100644 --- a/frontend/demo/src/pages/Inbox/ConversationList/index.tsx +++ b/frontend/demo/src/pages/Inbox/ConversationList/index.tsx @@ -16,7 +16,7 @@ import {SimpleLoader} from '@airyhq/components'; import {StateModel} from '../../../reducers'; import {Conversation} from 'httpclient'; -import './index.scss'; +import styles from './index.module.scss'; type ConversationListProps = ConnectedProps; @@ -85,7 +85,7 @@ const ConversationList = (props: ConversationListProps) => { return ( {({onItemsRendered}) => ( -
+
{!items.length && !loading ? ( ) : ( @@ -105,13 +105,13 @@ const ConversationList = (props: ConversationListProps) => { }; return ( -
-
-
+
+
+
-
{renderConversationList()}
+
{renderConversationList()}
); }; From bf866bfb10a6f04b14dcd61ee4bf2ef7fe84ec39 Mon Sep 17 00:00:00 2001 From: lucapette Date: Wed, 27 Jan 2021 17:20:59 +0100 Subject: [PATCH 06/46] [#691] Support tag_ids filter queries (#760) Fixes #691 --- .../airy/core/api/communication/Mapper.java | 12 +------ .../api/communication/dto/Conversation.java | 12 +++++++ .../communication/dto/ConversationIndex.java | 8 ++--- .../communication/lucene/DocumentMapper.java | 20 +++++------ .../communication/ConversationsListTest.java | 35 +++++++++---------- .../communication/util/TestConversation.java | 25 +++++++------ 6 files changed, 53 insertions(+), 59 deletions(-) diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java index a7583ffe53..612218f121 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java @@ -8,21 +8,17 @@ import co.airy.core.api.communication.payload.MessageResponsePayload; import co.airy.model.channel.ChannelPayload; import co.airy.model.metadata.MetadataKeys; -import co.airy.model.metadata.MetadataRepository; import org.springframework.stereotype.Component; import java.util.Map; import static co.airy.date.format.DateFormat.isoFromMillis; import static co.airy.model.metadata.MetadataRepository.getConversationInfo; -import static java.util.stream.Collectors.toList; @Component public class Mapper { public ConversationResponsePayload fromConversation(Conversation conversation) { - final Map metadata = conversation.getMetadata(); - return ConversationResponsePayload.builder() .channel(ChannelPayload.builder() .id(conversation.getChannelId()) @@ -31,13 +27,7 @@ public ConversationResponsePayload fromConversation(Conversation conversation) { .build()) .id(conversation.getId()) .unreadMessageCount(conversation.getUnreadMessageCount()) - .tags( - MetadataRepository.filterPrefix(metadata, MetadataKeys.TAGS) - .keySet() - .stream() - .map(s -> s.split("\\.")[1]) - .collect(toList()) - ) + .tags(conversation.getTagIds()) .createdAt(isoFromMillis(conversation.getCreatedAt())) .contact(getContact(conversation)) .lastMessage(fromMessage(conversation.getLastMessage())) diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java index 4316714eda..56e6facdc4 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java @@ -3,6 +3,7 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.Message; import co.airy.model.metadata.MetadataKeys; +import co.airy.model.metadata.MetadataRepository; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Builder; @@ -11,8 +12,10 @@ import java.io.Serializable; import java.util.HashMap; +import java.util.List; import java.util.Map; +import static java.util.stream.Collectors.toList; import static org.springframework.util.StringUtils.capitalize; @Data @@ -55,6 +58,15 @@ private String prettifySource(String source) { return capitalize(source); } + @JsonIgnore + public List getTagIds() { + return MetadataRepository.filterPrefix(metadata, MetadataKeys.TAGS) + .keySet() + .stream() + .map(s -> s.split("\\.")[1]) + .collect(toList()); + } + @JsonIgnore public String getId() { return this.lastMessage.getConversationId(); diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/ConversationIndex.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/ConversationIndex.java index 48f8133520..876da12dc8 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/ConversationIndex.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/ConversationIndex.java @@ -6,9 +6,7 @@ import lombok.NoArgsConstructor; import java.io.Serializable; -import java.util.HashMap; import java.util.List; -import java.util.Map; @Data @Builder @@ -21,9 +19,7 @@ public class ConversationIndex implements Serializable { private String source; private Long createdAt; private Integer unreadMessageCount; - - @Builder.Default - private Map metadata = new HashMap<>(); + private List tagIds; public static ConversationIndex fromConversation(Conversation conversation) { return ConversationIndex.builder() @@ -31,8 +27,8 @@ public static ConversationIndex fromConversation(Conversation conversation) { .channelId(conversation.getChannelId()) .source(conversation.getChannel().getSource()) .displayName(conversation.getDisplayNameOrDefault().toString()) - .metadata(new HashMap<>(conversation.getMetadata())) .createdAt(conversation.getCreatedAt()) + .tagIds(conversation.getTagIds()) .unreadMessageCount(conversation.getUnreadMessageCount()) .build(); } diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/lucene/DocumentMapper.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/lucene/DocumentMapper.java index ac2d50e0d0..c8215015d9 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/lucene/DocumentMapper.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/lucene/DocumentMapper.java @@ -10,9 +10,9 @@ import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexableField; -import java.util.Map; +import java.util.List; -import static java.util.stream.Collectors.toMap; +import static java.util.stream.Collectors.toList; public class DocumentMapper { public Document fromConversationIndex(ConversationIndex conversation) { @@ -29,8 +29,8 @@ public Document fromConversationIndex(ConversationIndex conversation) { document.add(new IntPoint("unread_message_count", conversation.getUnreadMessageCount())); document.add(new StoredField("unread_message_count", conversation.getUnreadMessageCount())); - for (Map.Entry entry : conversation.getMetadata().entrySet()) { - document.add(new TextField("metadata." + entry.getKey(), entry.getValue(), Field.Store.YES)); + for (String tagId : conversation.getTagIds()) { + document.add(new TextField("tag_ids", tagId, Field.Store.YES)); } return document; @@ -40,18 +40,16 @@ public ConversationIndex fromDocument(Document document) { final Long createdAt = document.getField("created_at").numericValue().longValue(); final Integer unreadCount = document.getField("unread_message_count").numericValue().intValue(); - final Map metadata = document.getFields().stream() - .filter((field) -> field.name().startsWith("metadata")) - .collect(toMap( - (field) -> field.name().replace("metadata.", ""), - IndexableField::stringValue - )); + final List tagIds = document.getFields().stream() + .filter((field) -> field.name().equals("tag_ids")) + .map(IndexableField::stringValue) + .collect(toList()); return ConversationIndex.builder() .id(document.get("id")) .unreadMessageCount(unreadCount) .createdAt(createdAt) - .metadata(metadata) + .tagIds(tagIds) .displayName(document.get("display_name")) .build(); } diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsListTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsListTest.java index f315b51f3d..13329239e7 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsListTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/ConversationsListTest.java @@ -72,17 +72,21 @@ class ConversationsListTest { .build(); private static final String conversationIdToFind = UUID.randomUUID().toString(); + private static final String tagId = UUID.randomUUID().toString(); + private static final String anotherTagId = UUID.randomUUID().toString(); + private static final String userId = "user-id"; private static final List conversations = List.of( TestConversation.from(UUID.randomUUID().toString(), channelToFind, Map.of(MetadataKeys.Source.Contact.FIRST_NAME, firstNameToFind), 1), - TestConversation.from(UUID.randomUUID().toString(), channelToFind, 1), - TestConversation.from(conversationIdToFind, defaultChannel, 1), + TestConversation.from(UUID.randomUUID().toString(), channelToFind, + Map.of(MetadataKeys.TAGS + "." + tagId, "", MetadataKeys.TAGS + "." + anotherTagId, ""), + 1), + TestConversation.from(conversationIdToFind, defaultChannel, Map.of(MetadataKeys.TAGS + "." + tagId, ""), 1), TestConversation.from(UUID.randomUUID().toString(), defaultChannel, 2), TestConversation.from(UUID.randomUUID().toString(), defaultChannel, 5) ); - @BeforeAll static void beforeAll() throws Exception { kafkaTestHelper = new KafkaTestHelper(sharedKafkaTestResource, getTopics()); @@ -100,7 +104,6 @@ static void afterAll() throws Exception { kafkaTestHelper.afterAll(); } - @BeforeEach void beforeEach() throws Exception { webTestHelper.waitUntilHealthy(); @@ -137,16 +140,21 @@ void canFilterByDisplayName() throws Exception { checkConversationsFound(payload, 1); } + @Test + void canFilterByTagIds() throws Exception { + checkConversationsFound("{\"filters\": \"tag_ids:(" + tagId + ")\"}", 2); + + checkConversationsFound("{\"filters\": \"tag_ids:(" + tagId + " AND " + anotherTagId + ")\"}", 1); + } + @Test void canFilterByUnreadMessageCountRange() throws Exception { - String payload = "{\"filters\": \"unread_message_count:[2 TO *]\"}"; - checkConversationsFound(payload, 2); + checkConversationsFound("{\"filters\": \"unread_message_count:[2 TO *]\"}", 2); } @Test void canFilterByUnreadMessageCount() throws Exception { - String payload = "{\"filters\": \"unread_message_count:2\"}"; - checkConversationsFound(payload, 1); + checkConversationsFound("{\"filters\": \"unread_message_count:2\"}", 1); } @Test @@ -162,16 +170,7 @@ void canFilterByCombinedQueries() throws Exception { @Test void canFilterForUnknownNames() throws Exception { - String payload = "{\"filters\": \"display_name:Ada\"}"; - checkNoConversationReturned(payload); - } - - private void checkNoConversationReturned(String payload) throws Exception { - retryOnException( - () -> webTestHelper.post("/conversations.list", payload, userId) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.data", hasSize(0))), - "Expected no conversations returned"); + checkConversationsFound("{\"filters\": \"display_name:Ada\"}", 0); } private void checkConversationsFound(String payload, int count) throws InterruptedException { diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/util/TestConversation.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/util/TestConversation.java index 7932d61c51..7f7715e1a8 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/util/TestConversation.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/util/TestConversation.java @@ -3,6 +3,7 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; +import co.airy.avro.communication.Metadata; import co.airy.avro.communication.SenderType; import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; @@ -19,6 +20,7 @@ import java.util.Random; import java.util.UUID; +import static co.airy.model.metadata.MetadataRepository.getId; import static co.airy.model.metadata.MetadataRepository.newConversationMetadata; @Data @@ -30,7 +32,6 @@ public class TestConversation { private Channel channel; private String conversationId; private Map metadata; - private int messageCount; private long lastMessageSentAt; private List> records; @@ -38,8 +39,7 @@ public static TestConversation from(String conversationId, Channel channel, int TestConversation testConversation = new TestConversation(); testConversation.setConversationId(conversationId); testConversation.setChannel(channel); - testConversation.setMessageCount(messageCount); - testConversation.setRecords(testConversation.generateRecords()); + testConversation.setRecords(testConversation.generateRecords(messageCount)); return testConversation; } @@ -48,33 +48,32 @@ public static TestConversation from(String conversationId, Channel channel, Map< TestConversation testConversation = new TestConversation(); testConversation.setConversationId(conversationId); testConversation.setChannel(channel); - testConversation.setMessageCount(messageCount); testConversation.setMetadata(metadata); - testConversation.setRecords(testConversation.generateRecords()); + testConversation.setRecords(testConversation.generateRecords(messageCount)); return testConversation; } public static List> generateRecords(String conversationId, Channel channel, int messageCount) { - return TestConversation.from(conversationId, channel, messageCount).generateRecords(); + return TestConversation.from(conversationId, channel, messageCount).generateRecords(messageCount); } - private List> generateRecords() { - final List> messages = getMessages(); + private List> generateRecords(int messageCount) { + final List> messages = getMessages(messageCount); this.lastMessageSentAt = ((Message) messages.get(messages.size() - 1).value()).getSentAt(); List> records = new ArrayList<>(messages); if (metadata != null) { - metadata.forEach((metadataKey, metadataValue) -> - records.add(new ProducerRecord<>(applicationCommunicationMetadata, conversationId, - newConversationMetadata(conversationId, metadataKey, metadataValue) - ))); + metadata.forEach((metadataKey, metadataValue) -> { + final Metadata metadata = newConversationMetadata(conversationId, metadataKey, metadataValue); + records.add(new ProducerRecord<>(applicationCommunicationMetadata, getId(metadata).toString(), metadata)); + }); } return records; } - private List> getMessages() { + private List> getMessages(int messageCount) { List> records = new ArrayList<>(); Random random = new Random(); Instant startDate = Instant.now().minus(Duration.ofDays(random.nextInt(365))); From 2f8d64da675510debbdc8580c9b9caf2dc54f74d Mon Sep 17 00:00:00 2001 From: Pascal Holy <54705263+pascal-airy@users.noreply.github.com> Date: Wed, 27 Jan 2021 17:33:48 +0100 Subject: [PATCH 07/46] [#731] Doc revamp (#758) Fixes #731 --- README.md | 6 +- .../api/communication/dto/Conversation.java | 2 +- docs/docs/api/{http.md => http/endpoints.md} | 64 ++------- docs/docs/api/http/introduction.md | 50 +++++++ docs/docs/api/webhook.md | 4 +- docs/docs/api/websocket.md | 2 +- docs/docs/apps/ui.md | 4 + .../{overview => concepts}/architecture.md | 2 +- .../design-principles.md | 2 +- docs/docs/{overview => concepts}/kafka.md | 0 .../{overview => concepts}/release-process.md | 0 docs/docs/getting-started/cli.md | 13 ++ .../deployment/prod-environment.md} | 4 +- .../deployment/test-environment.md} | 4 +- docs/docs/{ => getting-started}/glossary.md | 0 docs/docs/getting-started/installation.md | 46 ++++++ .../getting-started/introduction/index.md | 39 ++++++ docs/docs/getting-started/quickstart.md | 70 ++++++++++ docs/docs/getting-started/troubleshooting.md | 16 +++ docs/docs/index.md | 132 ------------------ .../airy-core-and-rasa.md | 4 +- docs/docs/sources/chat-plugin.md | 4 +- docs/docs/sources/facebook.md | 4 +- docs/sidebars.js | 46 ++++-- frontend/demo/README.md | 2 +- 25 files changed, 304 insertions(+), 216 deletions(-) rename docs/docs/api/{http.md => http/endpoints.md} (85%) create mode 100644 docs/docs/api/http/introduction.md create mode 100644 docs/docs/apps/ui.md rename docs/docs/{overview => concepts}/architecture.md (98%) rename docs/docs/{overview => concepts}/design-principles.md (97%) rename docs/docs/{overview => concepts}/kafka.md (100%) rename docs/docs/{overview => concepts}/release-process.md (100%) create mode 100644 docs/docs/getting-started/cli.md rename docs/docs/{guides/airy-core-in-production.md => getting-started/deployment/prod-environment.md} (99%) rename docs/docs/{guides/airy-core-in-test-env.md => getting-started/deployment/test-environment.md} (97%) rename docs/docs/{ => getting-started}/glossary.md (100%) create mode 100644 docs/docs/getting-started/installation.md create mode 100644 docs/docs/getting-started/introduction/index.md create mode 100644 docs/docs/getting-started/quickstart.md create mode 100644 docs/docs/getting-started/troubleshooting.md delete mode 100644 docs/docs/index.md rename docs/docs/{guides => integrations}/airy-core-and-rasa.md (96%) diff --git a/README.md b/README.md index 4841d2f2af..4c46e417f3 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ The bootstrap installation requires [Vagrant](https://www.vagrantup.com/downloads) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads). If they are not found, the script will attempt to install them for you. Check out our [test -deployment guide](/docs/docs/guides/airy-core-in-test-env.md) for detailed information. +deployment guide](/docs/docs/getting-started/deployment/test-environment.md) for detailed information. ## Components @@ -95,9 +95,9 @@ The Airy Core Platform contains the following components: Kafka](https://kafka.apache.org) to process incoming webhook data from different sources. We make sense of the data and reshape it into source independent contacts, conversations, and messages (see our - [glossary](/docs/docs/glossary.md) for formal definitions). + [glossary](/docs/getting-started/glossary.md) for formal definitions). -- An [API](/docs/docs/api/http.md) to manage the data sets the platform +- An [API](/docs/docs/api/http/introduction.md) to manage the data sets the platform handles. - A webhook integration server that allows its users to programmatically diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java index 56e6facdc4..bab41bafce 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java @@ -48,7 +48,7 @@ public DisplayName getDisplayNameOrDefault() { } /** - * - Remove the source provider (see docs/docs/glossary.md#source-provider) + * - Remove the source provider (see docs/getting-started/glossary.md#source-provider) * - Capitalize first letter * E.g. twilio.sms -> Sms, facebook -> Facebook */ diff --git a/docs/docs/api/http.md b/docs/docs/api/http/endpoints.md similarity index 85% rename from docs/docs/api/http.md rename to docs/docs/api/http/endpoints.md index 6da580d642..e85b74fbd2 100644 --- a/docs/docs/api/http.md +++ b/docs/docs/api/http/endpoints.md @@ -1,62 +1,16 @@ --- -title: HTTP -sidebar_label: HTTP +title: Endpoints +sidebar_label: Endpoints --- -This documents offers a high-level overview of the different parts that -compose the Airy API. - -## Introduction - -The HTTP endpoints adhere to the following conventions: - -- Endpoints only accept `POST` JSON requests. -- Communication always requires a valid [JWT token](#authentication), except for - `/users.login` and `/users.signup` endpoints. -- We use dots for namespacing URLs (eg `/things.add`). - -## Authentication - -In order to communicate with the API endpoints, you need a valid -[JWT](https://jwt.io/) token. Get a valid token by sending a request to the -login endpoint [login](#login). It returns a short-lived JWT token you can use -for HTTP requests. - -### Login - -As the purpose of this endpoint is to obtain valid JWT tokens, it -does not require a valid token to be present in the headers. - -`POST /users.login` - -**Sample request** - -```json5 -{ - "email": "grace@example.com", - "password": "avalidpassword" -} -``` - -**Sample response** - -```json -{ - "id": "424242-4242-42-4242-4242", - "first_name": "Grace", - "last_name": "Hopper", - "token": "JWT_TOKEN" -} -``` - ## Endpoints The grouping of endpoints reflects the high-level entities of the [Airy Core -Data Model](glossary.md). +Data Model](getting-started/glossary.md). ### Users -Please refer to our [user](glossary.md#users) definition for more +Please refer to our [user](getting-started/glossary.md#users) definition for more information. #### Signup @@ -91,7 +45,7 @@ This endpoint returns the same response as `POST /login`. ### Conversations -Please refer to our [conversation](glossary.md#conversation) definition +Please refer to our [conversation](getting-started/glossary.md#conversation) definition for more information. #### List conversations @@ -278,7 +232,7 @@ status code `200` if successful. ### Messages -Please refer to our [messages](glossary.md#message) definition for more +Please refer to our [messages](getting-started/glossary.md#message) definition for more information. #### List messages @@ -358,7 +312,7 @@ Sends a message to a conversation and returns a payload. Whatever is put on the ### Channels -Please refer to our [channel](glossary.md#channel) definition for more +Please refer to our [channel](getting-started/glossary.md#channel) definition for more information. #### List channels @@ -389,7 +343,7 @@ information. ### Tags -Please refer to our [tag](glossary.md#tag) definition for more +Please refer to our [tag](getting-started/glossary.md#tag) definition for more information. #### Creating a tag @@ -477,7 +431,7 @@ If action is successful, returns HTTP status `200`. ### Metadata -Refer to our [metadata](glossary.md#metadata) definition for more +Refer to our [metadata](getting-started/glossary.md#metadata) definition for more information. ### Setting metadata diff --git a/docs/docs/api/http/introduction.md b/docs/docs/api/http/introduction.md new file mode 100644 index 0000000000..8d83427066 --- /dev/null +++ b/docs/docs/api/http/introduction.md @@ -0,0 +1,50 @@ +--- +title: Introduction +sidebar_label: Introduction +--- + +This documents offers a high-level overview of the different parts that +compose the Airy API. + +## Introduction + +The HTTP endpoints adhere to the following conventions: + +- Endpoints only accept `POST` JSON requests. +- Communication always requires a valid [JWT token](#authentication), except for + `/users.login` and `/users.signup` endpoints. +- We use dots for namespacing URLs (eg `/things.add`). + +## Authentication + +In order to communicate with the API endpoints, you need a valid +[JWT](https://jwt.io/) token. Get a valid token by sending a request to the +login endpoint [login](#login). It returns a short-lived JWT token you can use +for HTTP requests. + +### Login + +As the purpose of this endpoint is to obtain valid JWT tokens, it +does not require a valid token to be present in the headers. + +`POST /users.login` + +**Sample request** + +```json5 +{ + "email": "grace@example.com", + "password": "avalidpassword" +} +``` + +**Sample response** + +```json +{ + "id": "424242-4242-42-4242-4242", + "first_name": "Grace", + "last_name": "Hopper", + "token": "JWT_TOKEN" +} +``` diff --git a/docs/docs/api/webhook.md b/docs/docs/api/webhook.md index 707c93c88c..eb051384d7 100644 --- a/docs/docs/api/webhook.md +++ b/docs/docs/api/webhook.md @@ -10,7 +10,7 @@ integration pattern: - Call the [subscribe](#subscribing) endpoint - Consume on your URL of choice [events](#event-payload) - React to those events by calling the [send - message](api/http.md#send-a-message) endpoint + message](api/http/endpoints.md#send-a-message) endpoint You must de-duplicate messages on arrival as the webhook _does not_ guarantee events uniqueness. @@ -99,4 +99,4 @@ request with the following structure: ``` For possible values of `sender.type` see the [Message model -documentation](glossary.md#fields) +documentation](getting-started/glossary.md#fields) diff --git a/docs/docs/api/websocket.md b/docs/docs/api/websocket.md index 85f16e1e08..319f678327 100644 --- a/docs/docs/api/websocket.md +++ b/docs/docs/api/websocket.md @@ -12,7 +12,7 @@ uses the protocol endpoint at `/ws.communication`. To execute the handshake with `/ws.communicaiton` you need to set an `Authorization` header where the -value is the authorization token obtained [from the API](http.md#authentication). +value is the authorization token obtained [from the API](api/http/introduction.md#authentication). ## Outbound Queues diff --git a/docs/docs/apps/ui.md b/docs/docs/apps/ui.md new file mode 100644 index 0000000000..399d2da48a --- /dev/null +++ b/docs/docs/apps/ui.md @@ -0,0 +1,4 @@ +--- +title: UI +sidebar_label: UI +--- diff --git a/docs/docs/overview/architecture.md b/docs/docs/concepts/architecture.md similarity index 98% rename from docs/docs/overview/architecture.md rename to docs/docs/concepts/architecture.md index d68ccd1eb9..6be016278a 100644 --- a/docs/docs/overview/architecture.md +++ b/docs/docs/concepts/architecture.md @@ -11,7 +11,7 @@ The `backend` system is a streaming platform. Its role is to: - Ingest conversational events from different sources (mostly via webhook integrations), process them, and store them in an Apache Kafka cluster. -- Make the processed events available and accessible through the Airy [API](api/http.md). +- Make the processed events available and accessible through the Airy [API](api/http/introduction.md). - Expose conversational events via a [webhook](api/webhook.md) integration. - Manage authentication and authorization features. diff --git a/docs/docs/overview/design-principles.md b/docs/docs/concepts/design-principles.md similarity index 97% rename from docs/docs/overview/design-principles.md rename to docs/docs/concepts/design-principles.md index bbdda5b1c1..1cc06691d7 100644 --- a/docs/docs/overview/design-principles.md +++ b/docs/docs/concepts/design-principles.md @@ -28,7 +28,7 @@ And here's the second principle: What we mean is that we do not allow services to talk to each other and share state via internal HTTP calls. Let's use an example to clarify: imagine we have a service dealing with `conversations` data that needs `channels` data (see our -[glossary](glossary.md) for more information) to build a JSON response. Many +[glossary](getting-started/glossary.md) for more information) to build a JSON response. Many systems would work like this: - A client asks for `conversations` diff --git a/docs/docs/overview/kafka.md b/docs/docs/concepts/kafka.md similarity index 100% rename from docs/docs/overview/kafka.md rename to docs/docs/concepts/kafka.md diff --git a/docs/docs/overview/release-process.md b/docs/docs/concepts/release-process.md similarity index 100% rename from docs/docs/overview/release-process.md rename to docs/docs/concepts/release-process.md diff --git a/docs/docs/getting-started/cli.md b/docs/docs/getting-started/cli.md new file mode 100644 index 0000000000..ad8a95ef70 --- /dev/null +++ b/docs/docs/getting-started/cli.md @@ -0,0 +1,13 @@ +--- +title: Command Line Interface +sidebar_label: CLI +--- + +CLI +Build, test and manage Airy right from the Terminal. + +The Airy CLI is a developer tool to help you help build, test, and manage Airy directly from your terminal. + +The CLI is easy to install, works on macOS, Windows, and Linux. + +Step 1: Install the Airy CLI diff --git a/docs/docs/guides/airy-core-in-production.md b/docs/docs/getting-started/deployment/prod-environment.md similarity index 99% rename from docs/docs/guides/airy-core-in-production.md rename to docs/docs/getting-started/deployment/prod-environment.md index 989c8bedad..f882df6b37 100644 --- a/docs/docs/guides/airy-core-in-production.md +++ b/docs/docs/getting-started/deployment/prod-environment.md @@ -1,11 +1,11 @@ --- title: Running the Airy Core Platform in production -sidebar_label: Production +sidebar_label: Prod Environment --- This document provides our recommendations on how to run the Airy Core Platform in production environments. If you are not familiar with the architecture of the -system, we suggest you read the [Architecture](/overview/architecture.md) document before +system, we suggest you read the [Architecture](/concepts/architecture.md) document before proceeding. ## Requirements diff --git a/docs/docs/guides/airy-core-in-test-env.md b/docs/docs/getting-started/deployment/test-environment.md similarity index 97% rename from docs/docs/guides/airy-core-in-test-env.md rename to docs/docs/getting-started/deployment/test-environment.md index 7f38ee4162..a0fdeb0603 100644 --- a/docs/docs/guides/airy-core-in-test-env.md +++ b/docs/docs/getting-started/deployment/test-environment.md @@ -1,6 +1,6 @@ --- title: Running the Airy Core Platform in a test environment -sidebar_label: Test +sidebar_label: Test Environment --- The goal of this document is to provide an overview of how to run the Airy Core @@ -16,7 +16,7 @@ Platform. components. ## Getting started -To bootstrap a test installation, refer to the [bootstrapping](/index.md#bootstrapping-the-airy-core-platform) document. +To bootstrap a test installation, refer to the [bootstrapping](getting-started/installation.md) document. ## Manage your Vagrant box diff --git a/docs/docs/glossary.md b/docs/docs/getting-started/glossary.md similarity index 100% rename from docs/docs/glossary.md rename to docs/docs/getting-started/glossary.md diff --git a/docs/docs/getting-started/installation.md b/docs/docs/getting-started/installation.md new file mode 100644 index 0000000000..0152f83736 --- /dev/null +++ b/docs/docs/getting-started/installation.md @@ -0,0 +1,46 @@ +--- +title: Installation +sidebar_label: Installation +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; + +## Bootstrap the Airy Core Platform + +Run the Airy Core Platform locally by entering the following commands: + +```bash +git clone -b main https://github.com/airyhq/airy +cd airy +./scripts/bootstrap.sh +``` + +The bootstrap installation requires +[Vagrant](https://www.vagrantup.com/downloads) and +[VirtualBox](https://www.virtualbox.org/wiki/Downloads). If they are not found, +the script will attempt to install them for you. + +If Vagrant or VirtualBox cannot be installed with the `bootstrap.sh` script, you +need to install them manually. + +The script will also ask for your administrative credentials as we are using the +[Vagrant Host Manager +Plugin](https://github.com/devopsgroup-io/vagrant-hostmanager) to add entries to +your hosts file. You can skip this step and add the following lines to your +hosts file yourself. + +``` +192.168.50.5 demo.airy +192.168.50.5 api.airy +192.168.50.5 chatplugin.airy +``` + +After the bootstrap process finishes, it will download the Kubernetes configiration file to the local host machine under `~/.airy/kube.conf`. +That file is required for the Airy Command Line tool (Airy CLI), in order to access the Kubernetes cluster where the Airy Core Platform is running. +You can also use that configuration file with the `kubectl` utility, for example: + +```sh +kubectl --kubeconfig ~/.airy/kube.conf get pods +``` + +Check out our [guide for running in test environment](getting-started/deployment/test-environment.md) for detailed information. diff --git a/docs/docs/getting-started/introduction/index.md b/docs/docs/getting-started/introduction/index.md new file mode 100644 index 0000000000..c2014306db --- /dev/null +++ b/docs/docs/getting-started/introduction/index.md @@ -0,0 +1,39 @@ +--- +title: 🚀 What Airy is +sidebar_label: What Airy is +slug: / +--- + +Airy Core is an open source, fully-featured, production ready messaging platform. + +#### With Airy you can process conversational data from a variety of sources: + +- Facebook +- WhatsApp +- Google's Business Messages +- SMS +- Website Chat Plugins +- Twilio +- Your own conversational channels + +#### You can then use Airy to: + +- Unify your messaging channels +- Stream your conversational data wherever you want +- Integrate with different NLP frameworks +- Mediate open requests with Agents via our messaging UI +- Analyze your conversations + +Since Airy's infrastructure is built around Apache Kafka, it can process a large amount of conversations and messages simultaneously and stream the relevant conversational data to wherever you need it. + +## Airy’s Components + +#### The core platform contains the following components: + +- An ingestion platform that heavily relies on Apache Kafka to process incoming webhook data from different sources. We make sense of the data and reshape it into source independent contacts, conversations, and messages (see our glossary for formal definitions). + +- An HTTP API that allows you to manage the data sets the platform handles. + +- A webhook integration server that allows you to programmatically participate in conversations by sending messages. The webhook integration exposes events you can "listen" to and react programmatically. + +- A WebSocket server that allows you to receive near real-time updates about the data flowing through the system. diff --git a/docs/docs/getting-started/quickstart.md b/docs/docs/getting-started/quickstart.md new file mode 100644 index 0000000000..1fbc4cc7d2 --- /dev/null +++ b/docs/docs/getting-started/quickstart.md @@ -0,0 +1,70 @@ +--- +title: Quickstart +sidebar_label: Quickstart +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; + +## Connect a Chat Plugin source + +The chat plugin source is well suited for a first integration because it does +not require any configuration. + +Once you [signed up](api/http/endpoints.md#signup), you must [log in](api/http/introduction.md#login) so you +can obtain a valid JWT token for the upcoming API calls: + +```bash +token=$(echo $(curl -H 'Content-Type: application/json' -d \ +"{ \ +\"email\":\"grace@example.com\", \ +\"password\":\"the_answer_is_42\" \ +}" api.airy/users.login) | jq -r '.token') +curl -H "Content-Type: application/json" -H "Authorization: $token" -d \ +"{ + \"name\": \"chat plugin source\" +}" api.airy/chatplugin.connect +``` + +channels_connect + +The ID from the response is the `channel_id`. It is required for +the next steps, so note it down. + +## Send messages via the Chat Plugin + +Pass the `channel_id` as a query parameter when opening the demo page in your +browser. This authenticates the chat plugin and enables you to send messages +immediately: + +``` +http://chatplugin.airy/example?channel_id= +``` + +You can now type a message in the text box and send it 🎉 + +chatplugin working + +To see how messages are flowing through the system, [list +conversations](api/http/endpoints.md#list-conversations) for the channel you have just created. +it should return the message you have just sent. + +conversations.list + +```bash +curl -H "Content-Type: application/json" -H "Authorization: $token" -d "{}" \ +api.airy/conversations.list | jq . +``` + +You can also consume the messages directly from the Kafka +`application.communication.messages` topic: + +``` +cd infrastructure && vagrant ssh +kubectl exec -it kafka-0 -- /bin/bash +kafka-console-consumer \ +--bootstrap-server airy-cp-kafka:9092 \ +--topic application.communication.messages \ +--from-beginning +``` + +Kafka Topic diff --git a/docs/docs/getting-started/troubleshooting.md b/docs/docs/getting-started/troubleshooting.md new file mode 100644 index 0000000000..bf05a352e8 --- /dev/null +++ b/docs/docs/getting-started/troubleshooting.md @@ -0,0 +1,16 @@ +--- +title: Troubleshooting +sidebar_label: Troubleshooting +--- + +Airy Core is offered free and open-source for users who wish to self-host the software. + +# Community Support + +Airy’s Community Slack (https://airy.co/community) is a great first place to reach out for help. Our community and Core developers are often logged in and ready to answer questions. + +# Enterprise Support + +Looking for help & tips running a full scale messaging platform? Airy’s Support engineers can help. + +Fill out the Form https://airy.co/get-a-demo to get quick support. diff --git a/docs/docs/index.md b/docs/docs/index.md deleted file mode 100644 index c01ac13125..0000000000 --- a/docs/docs/index.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -id: index -title: Home -slug: / ---- - -import useBaseUrl from '@docusaurus/useBaseUrl'; - -The Airy Core Platform is a fully-featured, production ready messaging platform -that allows you to process messaging data from a variety of sources (like -Facebook messenger or Google business messages). The core platform contains the -following components: - -- An ingestion platform that heavily relies on [Apache - Kafka](https://kafka.apache.org) to process incoming webhook data from - different sources. We make sense of the data and reshape it into source - independent contacts, conversations, and messages (see our - [glossary](glossary.md) for formal definitions). - -- An [HTTP API](api/http.md) that allows you to manage the data sets the - platform handles. - -- A [webhook](api/webhook) integration server that allows to programmatically - participate in conversations by sending messages. The webhook integration - exposes events you can "listen" to and react programmatically. - -- A [WebSocket](api/websocket) server that allows you to receive near real-time - updates about the data flowing through the system. - -## Bootstrap the Airy Core Platform - -Run the Airy Core Platform locally by entering the following commands: - -```bash -git clone -b main https://github.com/airyhq/airy -cd airy -./scripts/bootstrap.sh -``` - -The bootstrap installation requires -[Vagrant](https://www.vagrantup.com/downloads) and -[VirtualBox](https://www.virtualbox.org/wiki/Downloads). If they are not found, -the script will attempt to install them for you. - -If Vagrant or VirtualBox cannot be installed with the `bootstrap.sh` script, you -need to install them manually. - -The script will also ask for your administrative credentials as we are using the -[Vagrant Host Manager -Plugin](https://github.com/devopsgroup-io/vagrant-hostmanager) to add entries to -your hosts file. You can skip this step and add the following lines to your -hosts file yourself. - -``` -192.168.50.5 demo.airy -192.168.50.5 api.airy -192.168.50.5 chatplugin.airy -``` - -After the bootstrap process finishes, it will download the Kubernetes configiration file to the local host machine under `~/.airy/kube.conf`. -That file is required for the Airy Command Line tool (Airy CLI), in order to access the Kubernetes cluster where the Airy Core Platform is running. -You can also use that configuration file with the `kubectl` utility, for example: - -```sh -kubectl --kubeconfig ~/.airy/kube.conf get pods -``` - -Check out our [guide for running in test environment](guides/airy-core-in-test-env.md) for detailed information. - -## Connect a Chat Plugin source - -The chat plugin source is well suited for a first integration because it does -not require any configuration. - -Once you [signed up](api/http#signup), you must [log in](api/http#login) so you -can obtain a valid JWT token for the upcoming API calls: - -```bash -token=$(echo $(curl -H 'Content-Type: application/json' -d \ -"{ \ -\"email\":\"grace@example.com\", \ -\"password\":\"the_answer_is_42\" \ -}" api.airy/users.login) | jq -r '.token') -curl -H "Content-Type: application/json" -H "Authorization: $token" -d \ -"{ - \"name\": \"chat plugin source\" -}" api.airy/chatplugin.connect -``` - -channels_connect - -The ID from the response is the `channel_id`. It is required for -the next steps, so note it down. - -## Send messages via the Chat Plugin - -Pass the `channel_id` as a query parameter when opening the demo page in your -browser. This authenticates the chat plugin and enables you to send messages -immediately: - -``` -http://chatplugin.airy/example?channel_id= -``` - -You can now type a message in the text box and send it 🎉 - -chatplugin working - -To see how messages are flowing through the system, [list -conversations](api/http.md#list-conversations) for the channel you have just created. -it should return the message you have just sent. - -conversations.list - -```bash -curl -H "Content-Type: application/json" -H "Authorization: $token" -d "{}" \ -api.airy/conversations.list | jq . -``` - -You can also consume the messages directly from the Kafka -`application.communication.messages` topic: - -```bash -cd infrastructure && vagrant ssh -kubectl exec -it kafka-0 -- /bin/bash -kafka-console-consumer \ ---bootstrap-server airy-cp-kafka:9092 \ ---topic application.communication.messages \ ---from-beginning -``` - -Kafka Topic diff --git a/docs/docs/guides/airy-core-and-rasa.md b/docs/docs/integrations/airy-core-and-rasa.md similarity index 96% rename from docs/docs/guides/airy-core-and-rasa.md rename to docs/docs/integrations/airy-core-and-rasa.md index d418115411..b768c36e46 100644 --- a/docs/docs/guides/airy-core-and-rasa.md +++ b/docs/docs/integrations/airy-core-and-rasa.md @@ -1,6 +1,6 @@ --- title: How to connect the Airy Core Platform and Rasa -sidebar_label: Connecting Rasa +sidebar_label: Rasa --- import useBaseUrl from '@docusaurus/useBaseUrl'; @@ -33,7 +33,7 @@ Airy Core Platform to send and receive messages. :::note Prerequisites -- A running Airy Core Platform installation [Get Started](index.md#bootstrapping-the-airy-core-platform) +- A running Airy Core Platform installation [Get Started](getting-started/installation.md) - A local Rasa setup: For convenience, we recommend [the Docker setup](https://rasa.com/docs/rasa/docker/building-in-docker/) or [a demo repository](https://github.com/airyhq/rasa-demo) we created for this guide ::: diff --git a/docs/docs/sources/chat-plugin.md b/docs/docs/sources/chat-plugin.md index 0a2a1b4af6..7d83d6304f 100644 --- a/docs/docs/sources/chat-plugin.md +++ b/docs/docs/sources/chat-plugin.md @@ -3,7 +3,7 @@ title: Chat Plugin sidebar_label: Chat Plugin --- -The Airy Core Chat Plugin is a fully-featured [source](/glossary.md#source) that +The Airy Core Chat Plugin is a fully-featured [source](/getting-started/glossary.md#source) that enables conversations with anonymous website visitors through a web chat plugin. :::tip What you will learn @@ -89,7 +89,7 @@ browser. ## HTTP API The HTTP api adheres to standards laid out in the [core -API](api/http.md#introduction). +API](api/http/endpoints.md#introduction). ### Authenticating web users diff --git a/docs/docs/sources/facebook.md b/docs/docs/sources/facebook.md index ba6ae36229..a3de86f8fb 100644 --- a/docs/docs/sources/facebook.md +++ b/docs/docs/sources/facebook.md @@ -47,7 +47,7 @@ Now you can use the app id and the app secret for the following environment vari :::note -Refer to the [test](/guides/airy-core-in-test-env#connect-sources) guide or the [production](/guides/airy-core-in-production#connect-sources) one to set these variables in your Airy Core Platform instance. +Refer to the [test](getting-started/deployment/test-environment.md#connect-sources) guide or the [production](getting-started/deployment/prod-environment.md#connect-sources) one to set these variables in your Airy Core Platform instance. ::: @@ -60,7 +60,7 @@ a value of your choice. :::note -Refer to the [test](/guides/airy-core-in-test-env#connect-sources) guide or the [production](/guides/airy-core-in-production#connect-sources) one to set these variables in your Airy Core Platform instance. +Refer to the [test](/getting-started/deployment/test-environment.md#connect-sources) guide or the [production](/getting-started/deployment/prod-environment.md#connect-sources) one to set these variables in your Airy Core Platform instance. ::: diff --git a/docs/sidebars.js b/docs/sidebars.js index 4bdeca8203..5fbac64c23 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,11 +1,22 @@ module.exports = { docs: [ - 'index', { - Overview: ['overview/architecture', 'overview/design-principles', 'overview/release-process', 'overview/kafka'], + '🚀 Getting Started': [ + { + Introduction: ['getting-started/introduction/index'], + }, + 'getting-started/installation', + { + Deployment: ['getting-started/deployment/test-environment', 'getting-started/deployment/prod-environment'], + }, + 'getting-started/quickstart', + 'getting-started/cli', + 'getting-started/troubleshooting', + 'getting-started/glossary', + ], }, { - Sources: [ + '💬 Sources': [ 'sources/chat-plugin', 'sources/facebook', 'sources/google', @@ -14,17 +25,34 @@ module.exports = { ], }, { - Guides: [ - 'guides/contributing', + '🔌 API': [ { - Deployment: ['guides/airy-core-in-test-env', 'guides/airy-core-in-production'], + HTTP: ['api/http/introduction', 'api/http/endpoints'], }, - 'guides/airy-core-and-rasa', + 'api/websocket', + 'api/webhook', + ], + }, + { + '✨ Apps': ['apps/ui'], + }, + { + '🛠️ Integrations': [ + { + 'Conversational AI /NLP': ['integrations/airy-core-and-rasa'], + }, + ], + }, + { + '⚙️ Concepts': [ + 'concepts/architecture', + 'concepts/design-principles', + 'concepts/release-process', + 'concepts/kafka', ], }, { - 'API Reference': ['api/http', 'api/websocket', 'api/webhook'], + '📚 Guides': ['guides/contributing'], }, - 'glossary', ], }; diff --git a/frontend/demo/README.md b/frontend/demo/README.md index 4233270460..6d302aa2de 100644 --- a/frontend/demo/README.md +++ b/frontend/demo/README.md @@ -38,7 +38,7 @@ Then open `http://localhost:8080/` in a web browser to access the Airy Demo UI ### Installation The bootstrap installation requires [Vagrant](https://www.vagrantup.com/downloads) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads). If they are not -found, the script ```$ ./scripts/bootstrap.sh``` will attempt to install them for you. Check out our [test deployment guide](/docs/docs/guides/airy-core-in-test-env.md) for detailed information. +found, the script ```$ ./scripts/bootstrap.sh``` will attempt to install them for you. Check out our [test deployment guide](/docs/docs/getting-started/deployment/test-environment.md) for detailed information. ### Authentication From 757d1d300fb35d384217da714839362051aeffb6 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Thu, 28 Jan 2021 11:00:31 +0100 Subject: [PATCH 08/46] Resolving source media without typed mapping (#748) * wip * Fixed all but one tests * Make treeset updatable * Rename last message * Naming improvements --- .../ConversationsController.java | 2 +- .../airy/core/api/communication/Mapper.java | 9 ++- .../api/communication/MessagesController.java | 11 +-- .../communication/SendMessageController.java | 3 +- .../airy/core/api/communication/Stores.java | 54 ++++++++------ .../communication/WebSocketController.java | 6 +- .../api/communication/dto/Conversation.java | 7 +- .../communication/dto/MessageContainer.java | 19 +++++ .../communication/dto/MessagesTreeSet.java | 11 ++- .../core/api/communication/MessagesTest.java | 72 ++++++++++++++----- .../airy/model/message/MessageRepository.java | 15 ++++ 11 files changed, 152 insertions(+), 57 deletions(-) create mode 100644 backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessageContainer.java diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java index 4adf279af0..b97d846583 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/ConversationsController.java @@ -111,7 +111,7 @@ private ResponseEntity queryConversations(ConversationListRequestPayload requ private ResponseEntity listConversations(ConversationListRequestPayload requestPayload) { final List conversations = fetchAllConversations(); int totalSize = conversations.size(); - conversations.sort(comparing(conversation -> ((Conversation) conversation).getLastMessage().getSentAt()).reversed()); + conversations.sort(comparing(conversation -> ((Conversation) conversation).getLastMessageContainer().getMessage().getSentAt()).reversed()); final Paginator paginator = new Paginator<>(conversations, Conversation::getId) .from(requestPayload.getCursor()).perPage(requestPayload.getPageSize()); diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java index 612218f121..106822b9c5 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/Mapper.java @@ -3,6 +3,7 @@ import co.airy.avro.communication.Message; import co.airy.core.api.communication.dto.Conversation; import co.airy.core.api.communication.dto.DisplayName; +import co.airy.core.api.communication.dto.MessageContainer; import co.airy.core.api.communication.payload.ContactResponsePayload; import co.airy.core.api.communication.payload.ConversationResponsePayload; import co.airy.core.api.communication.payload.MessageResponsePayload; @@ -14,6 +15,7 @@ import static co.airy.date.format.DateFormat.isoFromMillis; import static co.airy.model.metadata.MetadataRepository.getConversationInfo; +import static co.airy.model.message.MessageRepository.resolveContent; @Component public class Mapper { @@ -30,7 +32,7 @@ public ConversationResponsePayload fromConversation(Conversation conversation) { .tags(conversation.getTagIds()) .createdAt(isoFromMillis(conversation.getCreatedAt())) .contact(getContact(conversation)) - .lastMessage(fromMessage(conversation.getLastMessage())) + .lastMessage(fromMessageContainer(conversation.getLastMessageContainer())) .build(); } @@ -45,9 +47,10 @@ private ContactResponsePayload getContact(Conversation conversation) { .build(); } - public MessageResponsePayload fromMessage(Message message) { + public MessageResponsePayload fromMessageContainer(MessageContainer messageContainer) { + final Message message = messageContainer.getMessage(); return MessageResponsePayload.builder() - .content(message.getContent()) + .content(resolveContent(message, messageContainer.getMetadataMap())) .senderType(message.getSenderType().toString().toLowerCase()) .deliveryState(message.getDeliveryState().toString().toLowerCase()) .id(message.getId()) diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/MessagesController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/MessagesController.java index 452bbaca25..c8740bf41d 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/MessagesController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/MessagesController.java @@ -1,6 +1,6 @@ package co.airy.core.api.communication; -import co.airy.avro.communication.Message; +import co.airy.core.api.communication.dto.MessageContainer; import co.airy.core.api.communication.payload.MessageListRequestPayload; import co.airy.core.api.communication.payload.MessageListResponsePayload; import co.airy.pagination.Page; @@ -41,18 +41,19 @@ ResponseEntity messageList(@RequestBody @Valid Messa } private MessageListResponsePayload fetchMessages(String conversationId, int pageSize, String cursor) { - final List messages = stores.getMessages(conversationId); + final List messages = stores.getMessages(conversationId); if (messages == null) { return null; } - Paginator paginator = new Paginator<>(messages, Message::getId).perPage(pageSize).from(cursor); + Paginator paginator = new Paginator<>(messages, (message) -> message.getMessage().getId()) + .perPage(pageSize).from(cursor); - Page page = paginator.page(); + Page page = paginator.page(); return MessageListResponsePayload.builder() - .data(page.getData().stream().map(mapper::fromMessage).collect(toList())) + .data(page.getData().stream().map(mapper::fromMessageContainer).collect(toList())) .responseMetadata(MessageListResponsePayload.ResponseMetadata.builder() .nextCursor(page.getNextCursor()) .previousCursor(cursor) diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/SendMessageController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/SendMessageController.java index 572d415816..fa8601faef 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/SendMessageController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/SendMessageController.java @@ -6,6 +6,7 @@ import co.airy.avro.communication.Message; import co.airy.avro.communication.SenderType; import co.airy.core.api.communication.dto.Conversation; +import co.airy.core.api.communication.dto.MessageContainer; import co.airy.core.api.communication.payload.SendMessageRequestPayload; import co.airy.kafka.schema.application.ApplicationCommunicationMessages; import co.airy.spring.web.payload.EmptyResponsePayload; @@ -72,6 +73,6 @@ public ResponseEntity sendMessage(@RequestBody @Valid SendMessageRequestPaylo producer.send(new ProducerRecord<>(applicationCommunicationMessages.name(), message.getId(), message)).get(); - return ResponseEntity.ok(mapper.fromMessage(message)); + return ResponseEntity.ok(mapper.fromMessageContainer(new MessageContainer(message, Map.of()))); } } diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/Stores.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/Stores.java index 15c56269ca..8392f8b3bd 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/Stores.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/Stores.java @@ -7,6 +7,7 @@ import co.airy.avro.communication.SenderType; import co.airy.core.api.communication.dto.Conversation; import co.airy.core.api.communication.dto.CountAction; +import co.airy.core.api.communication.dto.MessageContainer; import co.airy.core.api.communication.dto.MessagesTreeSet; import co.airy.core.api.communication.dto.UnreadCountState; import co.airy.core.api.communication.lucene.IndexingProcessor; @@ -43,11 +44,13 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ExecutionException; import static co.airy.model.metadata.MetadataRepository.getId; import static co.airy.model.metadata.MetadataRepository.getSubject; import static co.airy.model.metadata.MetadataRepository.isConversationMetadata; +import static co.airy.model.metadata.MetadataRepository.isMessageMetadata; import static java.util.stream.Collectors.toCollection; @Component @@ -82,16 +85,16 @@ private void startStream() { builder.addStateStore(new LuceneDiskStore.Builder(conversationsLuceneStore, luceneProvider)); - final KStream messageStream = builder.stream(new ApplicationCommunicationMessages().name()) - .selectKey((messageId, message) -> message.getConversationId()) - .peek((conversationId, message) -> webSocketController.onNewMessage(message)); + final KStream messageStream = builder.stream(new ApplicationCommunicationMessages().name()); final KTable channelTable = builder.stream(new ApplicationCommunicationChannels().name()) .peek((channelId, channel) -> webSocketController.onChannelUpdate(channel)) .toTable(); + // conversation/message metadata keyed by conversation/message id final KTable> metadataTable = builder.table(applicationCommunicationMetadata) - .filter((metadataId, metadata) -> isConversationMetadata(metadata)) + .filter((metadataId, metadata) -> isConversationMetadata(metadata) + || isMessageMetadata(metadata)) .groupBy((metadataId, metadata) -> KeyValue.pair(getSubject(metadata).getIdentifier(), metadata)) .aggregate(HashMap::new, (conversationId, metadata, aggregate) -> { aggregate.put(metadata.getKey(), metadata.getValue()); @@ -106,6 +109,8 @@ private void startStream() { // unread counts final KTable unreadCountTable = messageStream + .selectKey((messageId, message) -> message.getConversationId()) + .peek((conversationId, message) -> webSocketController.onNewMessage(message)) .mapValues(message -> CountAction.increment(message.getSentAt())) .merge(resetStream) .groupByKey() @@ -124,33 +129,41 @@ private void startStream() { unreadCountTable.toStream().peek(webSocketController::onUnreadCount); - final KGroupedStream messageGroupedStream = messageStream.groupByKey(); + final KGroupedStream messageGroupedStream = messageStream.toTable() + .leftJoin(metadataTable, (message, metadataMap) -> MessageContainer.builder() + .message(message) + .metadataMap(Optional.ofNullable(metadataMap).orElse(new HashMap<>())) + .build()) + .toStream() + .filter((messageId, messageContainer) -> messageContainer != null) + .groupBy((messageId, messageContainer) -> messageContainer.getMessage().getConversationId()); + // messages store messageGroupedStream.aggregate(MessagesTreeSet::new, ((key, value, aggregate) -> { - aggregate.add(value); + aggregate.update(value); return aggregate; }), Materialized.as(messagesStore)); // conversations store messageGroupedStream .aggregate(Conversation::new, - (conversationId, message, aggregate) -> { - if (aggregate.getLastMessage() == null) { + (conversationId, container, aggregate) -> { + if (aggregate.getLastMessageContainer() == null) { aggregate = Conversation.builder() - .lastMessage(message) - .createdAt(message.getSentAt()) // Set this only once for the sent time of the first message + .lastMessageContainer(container) + .createdAt(container.getMessage().getSentAt()) // Set this only once for the sent time of the first message .build(); } // equals because messages can be updated - if (message.getSentAt() >= aggregate.getLastMessage().getSentAt()) { - aggregate.setLastMessage(message); + if (container.getMessage().getSentAt() >= aggregate.getLastMessageContainer().getMessage().getSentAt()) { + aggregate.setLastMessageContainer(container); } - if (SenderType.SOURCE_CONTACT.equals(message.getSenderType())) { - aggregate.setSourceConversationId(message.getSenderId()); + if (SenderType.SOURCE_CONTACT.equals(container.getMessage().getSenderType())) { + aggregate.setSourceConversationId(container.getMessage().getSenderId()); } return aggregate; @@ -165,12 +178,10 @@ private void startStream() { } return conversation; }) - .leftJoin(unreadCountTable, (conversation, unreadCountState) -> { - if (unreadCountState != null) { - return conversation.toBuilder().unreadMessageCount(unreadCountState.getUnreadCount()).build(); - } - return conversation; - }, Materialized.as(conversationsStore)) + .leftJoin(unreadCountTable, (conversation, unreadCountState) -> conversation.toBuilder() + .unreadMessageCount(Optional.ofNullable(unreadCountState) + .map(UnreadCountState::getUnreadCount).orElse(0) + ).build(), Materialized.as(conversationsStore)) .toStream() .process(IndexingProcessor.getSupplier(conversationsLuceneStore), conversationsLuceneStore); @@ -201,9 +212,8 @@ public void deleteMetadata(Subject subject, String key) throws ExecutionExceptio producer.send(new ProducerRecord<>(applicationCommunicationMetadata, getId(subject, key).toString(), null)).get(); } - public List getMessages(String conversationId) { + public List getMessages(String conversationId) { final ReadOnlyKeyValueStore messagesStore = getMessagesStore(); - final MessagesTreeSet messagesTreeSet = messagesStore.get(conversationId); return messagesTreeSet == null ? null : new ArrayList<>(messagesTreeSet); diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java index 9ed1561b11..cdd75fbc91 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/WebSocketController.java @@ -2,13 +2,15 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.Message; +import co.airy.model.channel.ChannelPayload; +import co.airy.core.api.communication.dto.MessageContainer; import co.airy.core.api.communication.dto.UnreadCountState; import co.airy.core.api.communication.payload.MessageUpsertPayload; import co.airy.core.api.communication.payload.UnreadCountPayload; -import co.airy.model.channel.ChannelPayload; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; +import java.util.Map; import java.time.Instant; import static co.airy.avro.communication.ChannelConnectionState.CONNECTED; @@ -34,7 +36,7 @@ public void onNewMessage(Message message) { final MessageUpsertPayload messageUpsertPayload = MessageUpsertPayload.builder() .channelId(message.getChannelId()) .conversationId(message.getConversationId()) - .message(mapper.fromMessage(message)) + .message(mapper.fromMessageContainer(new MessageContainer(message, Map.of()))) .build(); messagingTemplate.convertAndSend(QUEUE_MESSAGE, messageUpsertPayload); } diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java index bab41bafce..d9ec5ec611 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/Conversation.java @@ -1,7 +1,6 @@ package co.airy.core.api.communication.dto; import co.airy.avro.communication.Channel; -import co.airy.avro.communication.Message; import co.airy.model.metadata.MetadataKeys; import co.airy.model.metadata.MetadataRepository; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -24,7 +23,7 @@ @AllArgsConstructor public class Conversation implements Serializable { private Long createdAt; - private Message lastMessage; + private MessageContainer lastMessageContainer; private String sourceConversationId; private Channel channel; @@ -69,11 +68,11 @@ public List getTagIds() { @JsonIgnore public String getId() { - return this.lastMessage.getConversationId(); + return this.lastMessageContainer.getMessage().getConversationId(); } @JsonIgnore public String getChannelId() { - return this.lastMessage.getChannelId(); + return this.lastMessageContainer.getMessage().getChannelId(); } } diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessageContainer.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessageContainer.java new file mode 100644 index 0000000000..afaa63ebf7 --- /dev/null +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessageContainer.java @@ -0,0 +1,19 @@ +package co.airy.core.api.communication.dto; + +import co.airy.avro.communication.Message; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Map; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MessageContainer implements Serializable { + private Message message; + private Map metadataMap; +} diff --git a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessagesTreeSet.java b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessagesTreeSet.java index 582d0f5340..1d205b3da0 100644 --- a/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessagesTreeSet.java +++ b/backend/api/communication/src/main/java/co/airy/core/api/communication/dto/MessagesTreeSet.java @@ -1,14 +1,19 @@ package co.airy.core.api.communication.dto; -import co.airy.avro.communication.Message; import com.fasterxml.jackson.annotation.JsonCreator; import java.util.Comparator; import java.util.TreeSet; -public class MessagesTreeSet extends TreeSet { +public class MessagesTreeSet extends TreeSet { @JsonCreator public MessagesTreeSet() { - super(Comparator.comparing(Message::getSentAt).reversed()); + super(Comparator.comparing((MessageContainer container) -> container.getMessage().getSentAt()).reversed()); + } + + // TreeSet does not support updating objects + public void update(MessageContainer container) { + remove(container); + add(container); } } diff --git a/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java b/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java index e2746910b0..6e0758d169 100644 --- a/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java +++ b/backend/api/communication/src/test/java/co/airy/core/api/communication/MessagesTest.java @@ -2,7 +2,9 @@ import co.airy.avro.communication.Channel; import co.airy.avro.communication.ChannelConnectionState; +import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; +import co.airy.avro.communication.SenderType; import co.airy.core.api.communication.util.TestConversation; import co.airy.date.format.DateFormat; import co.airy.kafka.test.KafkaTestHelper; @@ -11,6 +13,7 @@ import co.airy.spring.test.WebTestHelper; import org.apache.avro.specific.SpecificRecordBase; import org.apache.kafka.clients.producer.ProducerRecord; +import org.hamcrest.core.StringContains; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -23,16 +26,24 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.time.Duration; +import java.time.Instant; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.concurrent.TimeUnit; import static co.airy.core.api.communication.util.Topics.applicationCommunicationChannels; +import static co.airy.core.api.communication.util.Topics.applicationCommunicationMessages; +import static co.airy.core.api.communication.util.Topics.applicationCommunicationMetadata; import static co.airy.core.api.communication.util.Topics.getTopics; +import static co.airy.model.metadata.MetadataRepository.newMessageMetadata; import static co.airy.test.Timing.retryOnException; import static java.util.Comparator.reverseOrder; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.core.StringContains.containsString; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -43,17 +54,25 @@ public class MessagesTest { @RegisterExtension public static final SharedKafkaTestResource sharedKafkaTestResource = new SharedKafkaTestResource(); - private static KafkaTestHelper kafkaTestHelper; @Autowired private WebTestHelper webTestHelper; + private static final String channelId = "channel-id"; + private static final Channel channel = Channel.newBuilder() + .setConnectionState(ChannelConnectionState.CONNECTED) + .setId(channelId) + .setName("channel-name") + .setSource("facebook") + .setSourceChannelId("ps-id") + .build(); + @BeforeAll static void beforeAll() throws Exception { kafkaTestHelper = new KafkaTestHelper(sharedKafkaTestResource, getTopics()); - kafkaTestHelper.beforeAll(); + kafkaTestHelper.produceRecord(new ProducerRecord<>(applicationCommunicationChannels.name(), channelId, channel)); } @AfterAll @@ -69,27 +88,14 @@ void beforeEach() throws Exception { @Test void canFetchMessages() throws Exception { final String conversationId = UUID.randomUUID().toString(); - final String channelId = "channelId"; - final String userId = "user-id"; - - final Channel channel = Channel.newBuilder() - .setConnectionState(ChannelConnectionState.CONNECTED) - .setId(channelId) - .setName("channel-name") - .setSource("facebook") - .setSourceChannelId("ps-id") - .build(); - kafkaTestHelper.produceRecord(new ProducerRecord<>(applicationCommunicationChannels.name(), channelId, channel)); int messageCount = 10; final List> records = TestConversation.generateRecords(conversationId, channel, messageCount); - kafkaTestHelper.produceRecords(records); final String payload = "{\"conversation_id\":\"" + conversationId + "\"}"; - retryOnException( - () -> webTestHelper.post("/messages.list", payload, userId) + () -> webTestHelper.post("/messages.list", payload, "user-id") .andExpect(status().isOk()) .andExpect(jsonPath("$.data", hasSize(messageCount))) .andExpect(jsonPath("$.data[*].sent_at").value(contains( @@ -100,4 +106,38 @@ void canFetchMessages() throws Exception { "/messages.list endpoint error"); } + @Test + void canReplaceMessageContentUrl() throws Exception { + final String conversationId = UUID.randomUUID().toString(); + + final String sourceUrl = "http://source.example.org/file.jpg?cache=1&tracking=all#section"; + final String persistentUrl = "http://airy.customer.org/data.jpg"; + + final String messageId = UUID.randomUUID().toString(); + kafkaTestHelper.produceRecords(List.of( + new ProducerRecord<>(applicationCommunicationMessages.name(), messageId, Message.newBuilder() + .setId(messageId) + .setSentAt(Instant.now().toEpochMilli()) + .setSenderId("source-conversation-id") + .setDeliveryState(DeliveryState.DELIVERED) + .setSource("facebook") + .setSenderType(SenderType.SOURCE_CONTACT) + .setConversationId(conversationId) + .setHeaders(Map.of()) + .setChannelId(channel.getId()) + .setContent(String.format("{\"url\":\"%s\"}", sourceUrl)) + .build()), + new ProducerRecord<>(applicationCommunicationMetadata.name(), "metadata-id", + newMessageMetadata(messageId, "data_" + sourceUrl, persistentUrl)) + )); + + final String payload = "{\"conversation_id\":\"" + conversationId + "\"}"; + retryOnException( + () -> webTestHelper.post("/messages.list", payload, "user-id") + .andExpect(status().isOk()) + .andExpect(jsonPath("$.data", hasSize(1))) + .andExpect(jsonPath("$.data[0].content", containsString(persistentUrl))), + "/messages.list content url was not replaced by metadata"); + } + } diff --git a/backend/model/message/src/main/java/co/airy/model/message/MessageRepository.java b/backend/model/message/src/main/java/co/airy/model/message/MessageRepository.java index 6166a7ad4f..8ecbbe7b23 100644 --- a/backend/model/message/src/main/java/co/airy/model/message/MessageRepository.java +++ b/backend/model/message/src/main/java/co/airy/model/message/MessageRepository.java @@ -3,6 +3,7 @@ import co.airy.avro.communication.DeliveryState; import co.airy.avro.communication.Message; +import java.util.Map; import java.time.Instant; public class MessageRepository { @@ -15,4 +16,18 @@ public static Message updateDeliveryState(Message message, DeliveryState state) public static boolean isNewMessage(Message message) { return message.getUpdatedAt() == null; } + + public static String resolveContent(Message message, Map metadata) { + final String content = message.getContent(); + + return metadata.entrySet() + .stream() + .filter((entry) -> entry.getKey().startsWith("data_")) + .reduce(content, (updatedContent, entry) -> { + final String key = entry.getKey(); + final String urlToReplace = key.replace("data_", ""); + + return updatedContent.replace(urlToReplace, entry.getValue()); + }, (oldValue, newValue) -> newValue); + } } From a4166c7fbeca0289bd97f21d00e1662a1a96b52a Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Thu, 28 Jan 2021 11:52:52 +0100 Subject: [PATCH 09/46] Untrack .ijwb since it makes importing the project more difficult (#766) --- .gitignore | 2 -- .ijwb/.idea/fileTemplates/Stream App.java | 41 ----------------------- 2 files changed, 43 deletions(-) delete mode 100644 .ijwb/.idea/fileTemplates/Stream App.java diff --git a/.gitignore b/.gitignore index 91a60c8ca6..1c9fbbb797 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ # Editors and IDE's -!.ijwb/.idea/fileTemplates/ - .idea/ .code/ .vscode/ diff --git a/.ijwb/.idea/fileTemplates/Stream App.java b/.ijwb/.idea/fileTemplates/Stream App.java deleted file mode 100644 index 489b70dcd7..0000000000 --- a/.ijwb/.idea/fileTemplates/Stream App.java +++ /dev/null @@ -1,41 +0,0 @@ -#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end - -import co.airy.kafka.streams.KafkaStreamsWrapper; -import co.airy.log.AiryLoggerFactory; -import org.apache.kafka.streams.KafkaStreams; -import org.apache.kafka.streams.StreamsBuilder; -import org.slf4j.Logger; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -@Component -public class ${NAME} implements ApplicationListener, DisposableBean { - private final Logger log = AiryLoggerFactory.getLogger(Resolver.class); - private static final String appId = "#[[$AppId$]]#"; - private final KafkaStreamsWrapper streams; - - public ${NAME}(KafkaStreamsWrapper streams) { - this.streams = streams; - } - - @Override - public void onApplicationEvent(ApplicationStartedEvent event) { - final StreamsBuilder builder = new StreamsBuilder(); - #[[$END$]]# - streams.start(builder.build(), appId); - } - - @Override - public void destroy() { - if (streams != null) { - streams.close(); - } - } - - // Visible for testing - KafkaStreams.State getStreamState() { - return streams.state(); - } -} From a9f595b6784a279ddb2115153f3b944d622f60b2 Mon Sep 17 00:00:00 2001 From: AudreyKj <38159391+AudreyKj@users.noreply.github.com> Date: Thu, 28 Jan 2021 12:37:00 +0100 Subject: [PATCH 10/46] Feat/611 infinite scroll for conversations list and messages (#720) * added infinite scroll for messages * made changes to infinite scroll v1 refactoring * refactored code of infinite scroll * fixed infinite scroll for messages * refactored for right pagination of messages * fixed linting * added metadata of messages in redux state in conversations * fixed linting * fixed type errors * fixed access of metadata in action * refactored code for ui * fixed how messages are stored in redux and fixed order * fixed storage of metadata in conversation and fixed storage of messages * fixed types btw camelcase and snakecase --- .../demo/src/actions/conversations/index.ts | 11 +- frontend/demo/src/actions/messages/index.ts | 41 +++++ .../pages/Inbox/ConversationList/index.tsx | 4 +- .../Inbox/Messenger/MessageList/index.tsx | 167 +++++++++++++----- .../Messenger/MessengerListItem/index.tsx | 2 +- .../src/reducers/data/conversations/index.ts | 52 +++++- .../demo/src/reducers/data/messages/index.ts | 38 ++-- .../payload/ResponseMetadataPayload.ts | 4 +- 8 files changed, 250 insertions(+), 69 deletions(-) diff --git a/frontend/demo/src/actions/conversations/index.ts b/frontend/demo/src/actions/conversations/index.ts index 6edca80f17..ee9384f332 100644 --- a/frontend/demo/src/actions/conversations/index.ts +++ b/frontend/demo/src/actions/conversations/index.ts @@ -13,6 +13,7 @@ export const CONVERSATION_REMOVE_ERROR = '@@conversations/REMOVE_ERROR_FROM_CONV export const CONVERSATION_READ = '@@conversations/CONVERSATION_READ'; export const CONVERSATION_ADD_TAG = '@@conversations/CONVERSATION_ADD_TAG'; export const CONVERSATION_REMOVE_TAG = '@@conversations/CONVERSATION_REMOVE_TAG'; +export const CONVERSATION_UPDATE_METADATA = '@@conversation/UPDATE_METADATA'; export const loadingConversationAction = createAction(CONVERSATION_LOADING, resolve => (conversationId: string) => resolve(conversationId) @@ -50,6 +51,11 @@ export const removeTagFromConversationAction = createAction( resolve => (conversationId: string, tagId: string) => resolve({conversationId, tagId}) ); +export const updateMessagesMetadataAction = createAction( + CONVERSATION_UPDATE_METADATA, + resolve => (conversationId: string, metadata: ResponseMetadataPayload) => resolve({conversationId, metadata}) +); + export function listConversations() { return async (dispatch: Dispatch) => { dispatch(loadingConversationsAction()); @@ -65,8 +71,9 @@ export function listConversations() { } export function listNextConversations() { - return async (dispatch: Dispatch, state: StateModel) => { - const cursor = state.data.conversations.all.metadata.nextCursor; + return async (dispatch: Dispatch, state: () => StateModel) => { + const cursor = state().data.conversations.all.metadata.next_cursor; + dispatch(loadingConversationsAction()); return HttpClientInstance.listConversations({cursor: cursor}) .then((response: {data: Conversation[]; metadata: ResponseMetadataPayload}) => { diff --git a/frontend/demo/src/actions/messages/index.ts b/frontend/demo/src/actions/messages/index.ts index 5ad971f9b6..18e3cb046f 100644 --- a/frontend/demo/src/actions/messages/index.ts +++ b/frontend/demo/src/actions/messages/index.ts @@ -2,6 +2,8 @@ import {Dispatch} from 'redux'; import {createAction} from 'typesafe-actions'; import {Message, ResponseMetadataPayload} from 'httpclient'; import {HttpClientInstance} from '../../InitializeAiryApi'; +import {StateModel} from '../../reducers'; +import {updateMessagesMetadataAction, loadingConversationAction} from '../conversations'; export const MESSAGES_LOADING = '@@messages/LOADING'; @@ -23,6 +25,11 @@ export function listMessages(conversationId: string) { messages: response.data, }) ); + + if (response.metadata) { + dispatch(updateMessagesMetadataAction(conversationId, response.metadata)); + } + return Promise.resolve(true); }) .catch((error: Error) => { @@ -30,3 +37,37 @@ export function listMessages(conversationId: string) { }); }; } + +export function listPreviousMessages(conversationId: string) { + return async (dispatch: Dispatch, state: () => StateModel) => { + const metadata = state().data.conversations.all.items[conversationId].metadata; + const cursor = metadata && metadata.next_cursor; + const loading = metadata && metadata.loading; + + if (cursor && !loading) { + dispatch(loadingConversationAction(conversationId)); + return HttpClientInstance.listMessages({ + conversationId, + pageSize: 10, + cursor: cursor, + }) + .then((response: {data: Message[]; metadata: ResponseMetadataPayload}) => { + dispatch( + loadingMessagesAction({ + conversationId, + messages: response.data, + }) + ); + + if (response.metadata) { + dispatch(updateMessagesMetadataAction(conversationId, response.metadata)); + } + + return Promise.resolve(true); + }) + .catch((error: Error) => { + return Promise.reject(error); + }); + } + }; +} diff --git a/frontend/demo/src/pages/Inbox/ConversationList/index.tsx b/frontend/demo/src/pages/Inbox/ConversationList/index.tsx index 373201e0fd..351c4463e0 100644 --- a/frontend/demo/src/pages/Inbox/ConversationList/index.tsx +++ b/frontend/demo/src/pages/Inbox/ConversationList/index.tsx @@ -69,9 +69,11 @@ const ConversationList = (props: ConversationListProps) => { const renderConversationList = () => { const {conversations, conversationsMetadata, loading, listNextConversations} = props; + const {next_cursor: nextCursor} = conversationsMetadata; + const items = conversations; const metadata = conversationsMetadata; - const hasMoreData = metadata.nextCursor && metadata.nextCursor.length > 0; + const hasMoreData = nextCursor && nextCursor.length > 0; const isItemLoaded = (index: number) => index < items.length; const itemCount = hasMoreData ? items.length + 1 : items.length; diff --git a/frontend/demo/src/pages/Inbox/Messenger/MessageList/index.tsx b/frontend/demo/src/pages/Inbox/Messenger/MessageList/index.tsx index ff781e0a90..1cbd4a15ba 100644 --- a/frontend/demo/src/pages/Inbox/Messenger/MessageList/index.tsx +++ b/frontend/demo/src/pages/Inbox/Messenger/MessageList/index.tsx @@ -1,52 +1,90 @@ -import React, {useEffect, createRef} from 'react'; +import React, {useEffect, useState, createRef, useRef} from 'react'; import _, {connect, ConnectedProps} from 'react-redux'; import _redux from 'redux'; +import {debounce} from 'lodash-es'; import {Conversation, Message, SenderType} from 'httpclient'; import {StateModel} from '../../../../reducers'; -import {MessageById} from '../../../../reducers/data/messages'; import MessageListItem from '../MessengerListItem'; -import {listMessages} from '../../../../actions/messages'; +import {listMessages, listPreviousMessages} from '../../../../actions/messages'; import styles from './index.module.scss'; import {formatDateOfMessage} from '../../../../services/format/date'; type MessageListProps = {conversation: Conversation} & ConnectedProps; -const messagesMapToArray = ( - messageInfo: {[conversationId: string]: MessageById}, - conversationId: string -): Message[] => { - const messageById = messageInfo[conversationId]; - if (messageById) { - return Object.keys(messageById).map((cId: string) => ({...messageById[cId]})); - } - return []; -}; - const mapStateToProps = (state: StateModel, ownProps: {conversation: Conversation}) => { return { - messages: messagesMapToArray(state.data.messages.all, ownProps.conversation && ownProps.conversation.id), + messages: state.data.messages.all[ownProps.conversation && ownProps.conversation.id], + item: state.data.conversations.all.items[ownProps.conversation && ownProps.conversation.id], }; }; const mapDispatchToProps = { listMessages, + listPreviousMessages, }; const connector = connect(mapStateToProps, mapDispatchToProps); +function usePrevious(value: [] | string) { + const ref = useRef(null); + useEffect(() => { + ref.current = value; + }); + return ref.current; +} + const MessageList = (props: MessageListProps) => { - const {listMessages, messages, conversation} = props; + const {listMessages, listPreviousMessages, messages, conversation, item} = props; + + const [stickBottom, setStickBottom] = useState(true); + + const prevMessages = usePrevious(messages); + const prevCurrentConversationId = usePrevious(conversation && conversation.id); + const messageListRef = createRef(); useEffect(() => { - conversation && listMessages(conversation.id); - scrollBottom(); - }, [conversation && conversation.id]); + if (!messages || messages.length === 0) { + conversation && listMessages(conversation.id); + scrollBottom(); + } + }, [conversation && conversation.id, messages]); + + useEffect(() => { + if (stickBottom) { + scrollBottom(); + } + }, [stickBottom]); + + useEffect(() => { + if (hasPreviousMessages() && !scrollbarVisible() && !isLoadingConversation()) { + debouncedListPreviousMessages(conversation.id); + } + }, [item]); + + useEffect(() => { + if (prevMessages && messages && prevMessages.length < messages.length) { + if ( + conversation && + conversation.id && + prevCurrentConversationId && + prevCurrentConversationId === conversation.id && + messages && + prevMessages && + prevMessages[0] && + prevMessages[0].id !== messages[0].id + ) { + scrollToMessage(prevMessages[0].id); + } else { + scrollBottom(); + } + } + }, [messages, conversation && conversation.id]); const scrollBottom = () => { messageListRef.current.scrollTop = messageListRef.current.scrollHeight; @@ -66,30 +104,75 @@ const MessageList = (props: MessageListProps) => { return new Date(firstDate).setHours(0, 0, 0, 0) === new Date(secondDate).setHours(0, 0, 0, 0); }; + const isLoadingConversation = () => { + return item && item.metadata && item.metadata.loading; + }; + + const hasPreviousMessages = () => { + return !!(item && item.metadata && item.metadata.next_cursor); + }; + + const scrollbarVisible = () => { + return messageListRef.current.scrollHeight > messageListRef.current.clientHeight; + }; + + const scrollToMessage = id => { + const element = document.querySelector(`#message-item-${id}`); + + if (element && messageListRef) { + messageListRef.current.scrollTop = element.offsetTop - messageListRef.current.offsetTop; + } + }; + + const debouncedListPreviousMessages = debounce(currentConversationId => { + listPreviousMessages(currentConversationId); + }, 200); + + const handleScroll = debounce( + () => { + if (messageListRef) { + if (hasPreviousMessages() && messageListRef.current.scrollTop === 0 && !isLoadingConversation()) { + debouncedListPreviousMessages(conversation.id); + } + + const entireHeightScrolled = + messageListRef.current.scrollHeight - 1 <= + messageListRef.current.clientHeight + messageListRef.current.scrollTop; + + if (stickBottom !== entireHeightScrolled) { + setStickBottom(entireHeightScrolled); + } + } + }, + 100, + {leading: true} + ); + return ( -
- {messages.map((message: Message, index: number) => { - const prevMessage = messages[index - 1]; - const nextMessage = messages[index + 1]; - const prevWasContact = prevMessage ? isContact(prevMessage) : false; - const nextIsSameUser = nextMessage ? isContact(message) == isContact(nextMessage) : false; - - return ( -
- {hasDateChanged(prevMessage, message) && ( -
- {formatDateOfMessage(message)} -
- )} - -
- ); - })} +
+ {messages && + messages.map((message: Message, index: number) => { + const prevMessage = messages[index - 1]; + const nextMessage = messages[index + 1]; + const prevWasContact = prevMessage ? isContact(prevMessage) : false; + const nextIsSameUser = nextMessage ? isContact(message) == isContact(nextMessage) : false; + + return ( +
+ {hasDateChanged(prevMessage, message) && ( +
+ {formatDateOfMessage(message)} +
+ )} + +
+ ); + })}
); }; diff --git a/frontend/demo/src/pages/Inbox/Messenger/MessengerListItem/index.tsx b/frontend/demo/src/pages/Inbox/Messenger/MessengerListItem/index.tsx index fc270daa9f..fde55eb1fd 100644 --- a/frontend/demo/src/pages/Inbox/Messenger/MessengerListItem/index.tsx +++ b/frontend/demo/src/pages/Inbox/Messenger/MessengerListItem/index.tsx @@ -25,7 +25,7 @@ const MessengerListItem = (props: MessengerListItemProps) => { return (
-
+
{!isUser ? (
{messageText}
diff --git a/frontend/demo/src/reducers/data/conversations/index.ts b/frontend/demo/src/reducers/data/conversations/index.ts index 81a2406e33..67a2deba1c 100644 --- a/frontend/demo/src/reducers/data/conversations/index.ts +++ b/frontend/demo/src/reducers/data/conversations/index.ts @@ -18,7 +18,7 @@ type MergedConversation = Conversation & { export type AllConversationMetadata = ResponseMetadataPayload & { loading?: boolean; loaded?: boolean; - filteredTotal?: number; + filtered_total?: number; }; export type ConversationMap = { @@ -50,12 +50,22 @@ function mergeConversations( }); const conversations = cloneDeep(oldConversation); + newConversations.forEach((conversation: MergedConversation) => { - conversations[conversation.id] = { - ...newConversations[conversation.id], - ...conversation, - message: getLatestMessage(newConversations[conversation.id], conversation), - }; + if (conversations[conversation.id] && conversations[conversation.id].metadata) { + conversations[conversation.id] = { + ...newConversations[conversation.id], + ...conversation, + message: getLatestMessage(newConversations[conversation.id], conversation), + metadata: conversations[conversation.id].metadata, + }; + } else { + conversations[conversation.id] = { + ...newConversations[conversation.id], + ...conversation, + message: getLatestMessage(newConversations[conversation.id], conversation), + }; + } }); return conversations; @@ -89,10 +99,10 @@ const initialState: AllConversationsState = { metadata: { loading: false, loaded: false, - previousCursor: null, - nextCursor: null, + previous_cursor: null, + next_cursor: null, total: 0, - filteredTotal: 0, + filtered_total: 0, }, }; @@ -143,6 +153,7 @@ function allReducer(state: AllConversationsState = initialState, action: Action) items: mergeConversations(state.items, action.payload.conversations as MergedConversation[]), metadata: {...state.metadata, ...action.payload.responseMetadata, loading: false, loaded: true}, }; + case getType(actions.loadingConversationsAction): return { ...state, @@ -156,6 +167,10 @@ function allReducer(state: AllConversationsState = initialState, action: Action) return { ...state, items: setLoadingOfConversation(state.items, action.payload, true), + metadata: { + ...state.metadata, + loading: true, + }, }; case getType(actions.readConversationsAction): @@ -180,6 +195,25 @@ function allReducer(state: AllConversationsState = initialState, action: Action) case getType(actions.removeTagFromConversationAction): return removeTagFromConversation(state, action.payload.conversationId, action.payload.tagId); + case getType(actions.updateMessagesMetadataAction): + if (state.items[action.payload.conversationId]) { + return { + ...state, + items: { + ...state.items, + [action.payload.conversationId]: { + ...state.items[action.payload.conversationId], + metadata: { + ...state.items[action.payload.conversationId].metadata, + ...action.payload.metadata, + loading: false, + }, + }, + }, + }; + } + return state; + default: return state; } diff --git a/frontend/demo/src/reducers/data/messages/index.ts b/frontend/demo/src/reducers/data/messages/index.ts index 66bed466c5..d00f2df17d 100644 --- a/frontend/demo/src/reducers/data/messages/index.ts +++ b/frontend/demo/src/reducers/data/messages/index.ts @@ -3,7 +3,7 @@ import {ActionType, getType} from 'typesafe-actions'; import * as actions from '../../../actions/messages'; import {Message} from 'httpclient'; import {DataState} from '..'; -import _ from 'lodash-es'; +import {sortBy} from 'lodash-es'; type Action = ActionType; @@ -16,27 +16,41 @@ export type MessageById = { }; export type Messages = { - all: {[conversationId: string]: MessageById}; + all: Message[]; }; const initialState = { - all: {}, + all: [], }; -function organiseMessages(messages: Message[]): MessageById { - return _.keyBy(messages, 'id'); +function organiseMessages(messages: Message[]): Message[] { + return sortBy(messages, message => message.sentAt); } export default function messagesReducer(state = initialState, action: Action): any { switch (action.type) { case getType(actions.loadingMessagesAction): - return { - ...state, - all: { - ...state.all, - [action.payload.conversationId]: organiseMessages(action.payload.messages), - }, - }; + if (state.all[action.payload.conversationId]) { + return { + ...state, + all: { + ...state.all, + [action.payload.conversationId]: [ + ...organiseMessages([...action.payload.messages]), + ...state.all[action.payload.conversationId], + ], + }, + }; + } else { + return { + ...state, + all: { + ...state.all, + [action.payload.conversationId]: [...organiseMessages([...action.payload.messages])], + }, + }; + } + default: return state; } diff --git a/lib/typescript/httpclient/payload/ResponseMetadataPayload.ts b/lib/typescript/httpclient/payload/ResponseMetadataPayload.ts index f1f03b2f5f..f739fd02b9 100644 --- a/lib/typescript/httpclient/payload/ResponseMetadataPayload.ts +++ b/lib/typescript/httpclient/payload/ResponseMetadataPayload.ts @@ -1,5 +1,5 @@ export interface ResponseMetadataPayload { - previousCursor: string; - nextCursor: string; + previous_cursor: string; + next_cursor: string; total: number; } From dbeb2af6e6bb072e9378560202d72621f650c7ff Mon Sep 17 00:00:00 2001 From: AudreyKj <38159391+AudreyKj@users.noreply.github.com> Date: Thu, 28 Jan 2021 12:37:21 +0100 Subject: [PATCH 11/46] fixed read conversation when it is active (#759) --- .../demo/src/pages/Inbox/ConversationListItem/index.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/demo/src/pages/Inbox/ConversationListItem/index.tsx b/frontend/demo/src/pages/Inbox/ConversationListItem/index.tsx index e6d35dc8eb..9176492f7a 100644 --- a/frontend/demo/src/pages/Inbox/ConversationListItem/index.tsx +++ b/frontend/demo/src/pages/Inbox/ConversationListItem/index.tsx @@ -1,4 +1,4 @@ -import React, {CSSProperties} from 'react'; +import React, {CSSProperties, useEffect} from 'react'; import {Link} from 'react-router-dom'; import _, {connect, ConnectedProps} from 'react-redux'; @@ -49,6 +49,12 @@ const ConversationListItem = (props: ConversationListItemProps) => { const participant = conversation.contact; const unread = conversation.unreadMessageCount > 0; + useEffect(() => { + if (active && unread) { + return readConversations(conversation.id); + } + }, [active, conversation]); + return (
readConversations(conversation.id)}> From c3f211bbe5fc531e8eff2323c9b402d2fefebed9 Mon Sep 17 00:00:00 2001 From: lucapette Date: Thu, 28 Jan 2021 15:07:37 +0100 Subject: [PATCH 12/46] [#731] Follow up on revamp of the structure (#767) --- docs/docs/api/websocket.md | 17 ++++--- docs/docs/concepts/architecture.md | 15 +++--- docs/docs/concepts/design-principles.md | 22 ++++----- docs/docs/concepts/kafka.md | 2 +- docs/docs/concepts/release-process.md | 8 +-- .../deployment/prod-environment.md | 46 +++++++++--------- .../deployment/test-environment.md | 42 ++++++++-------- docs/docs/getting-started/glossary.md | 27 +++++----- docs/docs/getting-started/installation.md | 16 +++--- .../index.md => introduction.md} | 26 ++++++---- docs/docs/getting-started/troubleshooting.md | 11 +++-- docs/docs/guides/contributing.md | 2 +- .../{airy-core-and-rasa.md => rasa.md} | 43 ++++++++-------- docs/docs/sources/chat-plugin.md | 8 +-- docs/docs/sources/facebook.md | 20 ++++---- docs/docs/sources/google.md | 6 +-- docs/docs/sources/sms-twilio.md | 2 +- docs/docs/sources/whatsapp-twilio.md | 4 +- docs/sidebars.js | 6 +-- .../success.jpg | Bin .../webhook_success.jpg | Bin infrastructure/cli/cmd/api/api.go | 2 +- infrastructure/cli/cmd/api/login.go | 2 +- infrastructure/cli/cmd/api/signup.go | 2 +- infrastructure/cli/cmd/config/config.go | 8 +-- infrastructure/cli/cmd/root.go | 6 +-- infrastructure/cli/cmd/status/status.go | 4 +- infrastructure/cli/cmd/ui/ui.go | 4 +- .../cli/integration/golden/cli.no-args.golden | 14 +++--- .../cli/integration/golden/cli.yaml | 2 +- 30 files changed, 193 insertions(+), 174 deletions(-) rename docs/docs/getting-started/{introduction/index.md => introduction.md} (58%) rename docs/docs/integrations/{airy-core-and-rasa.md => rasa.md} (64%) rename docs/static/img/{guides/airy-core-and-rasa => integrations}/success.jpg (100%) rename docs/static/img/{guides/airy-core-and-rasa => integrations}/webhook_success.jpg (100%) diff --git a/docs/docs/api/websocket.md b/docs/docs/api/websocket.md index 319f678327..0e54b02e7c 100644 --- a/docs/docs/api/websocket.md +++ b/docs/docs/api/websocket.md @@ -5,25 +5,27 @@ sidebar_label: WebSocket ## Introduction -The Airy Core Platform offers a WebSocket server that allows clients to connect +The Airy Core offers a WebSocket server that allows clients to connect and receive near real-time updates on communication data. The WebSocket server uses the [STOMP](https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol) protocol endpoint at `/ws.communication`. -To execute the handshake with `/ws.communicaiton` you need to set an `Authorization` header where the -value is the authorization token obtained [from the API](api/http/introduction.md#authentication). +To execute the handshake with `/ws.communicaiton` you need to set an +`Authorization` header where the value is the authorization token obtained [from +the API](api/http/introduction.md#authentication). ## Outbound Queues -Outbound queues follow the pattern `/queue/:event_type[/:action}]` and -deliver JSON encoded payloads. +Outbound queues follow the pattern `/queue/:event_type[/:action}]` and deliver +JSON encoded payloads. ### Message `/queue/message` -Incoming payloads notify connected clients that a message was created or updated. +Incoming payloads notify connected clients that a message was created or +updated. **Sample payload** @@ -71,7 +73,8 @@ the value only for a more recent count. `/queue/channel/connected` -Incoming payloads notify connected clients whenever a channel was connected or updated. +Incoming payloads notify connected clients whenever a channel was connected or +updated. **Sample payload** diff --git a/docs/docs/concepts/architecture.md b/docs/docs/concepts/architecture.md index 6be016278a..3efbb314a4 100644 --- a/docs/docs/concepts/architecture.md +++ b/docs/docs/concepts/architecture.md @@ -1,11 +1,11 @@ --- -title: The Airy Core Platform architecture +title: The Airy Core architecture sidebar_label: Architecture --- ## Overview -The Airy Core Platform is a messaging platform that contains a backend and frontend system. +Airy Core is a messaging platform that contains a backend and frontend system. The `backend` system is a streaming platform. Its role is to: @@ -19,7 +19,7 @@ The `frontend` system contains a demo application and the JavaScript integration of the [Chat Plugin](sources/chat-plugin.md). Having that in mind, these are the docker containers – or the `Airy apps` – -which run as part of the Airy Core Platform: +which run as part of Airy Core: ## Sources @@ -46,10 +46,11 @@ which run as part of the Airy Core Platform: ## Airy Controller -The Airy Core Platform ships with a Kubernetes controller, which is responsible for starting and reloading the appropriate Airy apps based on the provided configuration. -The controller as a deployment named `airy-controller`. +Airy Core ships with a Kubernetes controller, which is responsible for starting +and reloading the appropriate Airy apps based on the provided configuration. The +controller as a deployment named `airy-controller`. ## Airy CLI -Every release features a command line binary, used to configure and fetch status information from the Airy Core Platform. -This tool is referred to as the `Airy CLI` throughout the documentation. +Every release features a command line binary, used to configure and fetch status +information from your Airy Core instance. This tool is referred to as the `Airy CLI` throughout the documentation. diff --git a/docs/docs/concepts/design-principles.md b/docs/docs/concepts/design-principles.md index 1cc06691d7..645f5b0b18 100644 --- a/docs/docs/concepts/design-principles.md +++ b/docs/docs/concepts/design-principles.md @@ -3,22 +3,22 @@ title: Design Principles sidebar_label: Design Principles --- -The design of the Airy Core Platform heavily relies on a few core ideas. The +The design of the Airy Core platform heavily relies on a few core ideas. The goal of this document is to provide context about these ideas and how they affected the way the platform is built. ## One source of truth, no shared state -The most central idea behind the design of the Airy Core Platform is composed of +The most central idea behind the Airy Core design is composed of two connected principles. Here's the first one: > There's one source of truth for data and that place is a [Apache > Kafka](https://kafka.apache.org). -We mean that _all_ of the data the Airy Core Platform lives in Kafka. One way of -thinking about the Airy Core Platform as a strongly typed (via -[Avro](https://avro.apache.org)) data pipeline. The HTTP endpoints the platform -provide also solely rely on Kafka via a feature called [interactive +We mean _all_ of the data of an Airy Core instance lives in Kafka. One way of +thinking about it: as a strongly typed (via [Avro](https://avro.apache.org)) +data pipeline. The HTTP endpoints the platform provide also solely rely on Kafka +via a feature called [interactive queries](https://kafka.apache.org/documentation/streams/developer-guide/interactive-queries.html). And here's the second principle: @@ -36,7 +36,7 @@ systems would work like this: - Once it obtains a response, it merges the data with the `conversations` - It returns the data to the client -In the Airy Core Platform, it works like this: +In Airy Core, it works like this: - A client asks for `conversations` - the service in charge has both `conversations` and `channels` data @@ -51,11 +51,11 @@ we avoid any dependencies between services. Our _default_ choice for testing is high-level integration tests. As "integration tests" may mean different things to different people, we explain in -the following what it means for the Airy Core Platform. +the following what it means for us. -Most components of the Airy Core Platform have multiple dependencies. For -example, our HTTP endpoints are Kafka Streams applications that expose data via -interactive queries. These endpoints depend on: +Most components of Airy Core have multiple dependencies. For example, our HTTP +endpoints are Kafka Streams applications that expose data via interactive +queries. These endpoints depend on: - Apache Kafka - Apache Zookeeper (indirectly as Kafka depends on it) diff --git a/docs/docs/concepts/kafka.md b/docs/docs/concepts/kafka.md index e81b9fd1a6..a7a2523b45 100644 --- a/docs/docs/concepts/kafka.md +++ b/docs/docs/concepts/kafka.md @@ -4,7 +4,7 @@ sidebar_label: Kafka --- The goal of this document is to provide information about how we use Kafka in -the Airy Core Platform. +Airy Core. ## Topic naming conventions diff --git a/docs/docs/concepts/release-process.md b/docs/docs/concepts/release-process.md index 7f11157026..0b96370ef9 100644 --- a/docs/docs/concepts/release-process.md +++ b/docs/docs/concepts/release-process.md @@ -3,10 +3,10 @@ title: Release Process sidebar_label: Release Process --- -The Airy Core Platform follows a scheduled release process: we release a new -version every two-weeks. This approach allows us to ship smaller releases which -ease the risk of breaking changes and brings new features and bug-fixes to our -users in a timely manner. +Airy Core follows a scheduled release process: we release a new version every +two-weeks. This approach allows us to ship smaller releases which ease the risk +of breaking changes and brings new features and bug-fixes to our users in a +timely manner. Here's an outline of the process: diff --git a/docs/docs/getting-started/deployment/prod-environment.md b/docs/docs/getting-started/deployment/prod-environment.md index f882df6b37..5aabeb151d 100644 --- a/docs/docs/getting-started/deployment/prod-environment.md +++ b/docs/docs/getting-started/deployment/prod-environment.md @@ -1,24 +1,24 @@ --- -title: Running the Airy Core Platform in production -sidebar_label: Prod Environment +title: Running Airy Core in production +sidebar_label: Production --- -This document provides our recommendations on how to run the Airy Core Platform +This document provides our recommendations on how to run the Airy Core in production environments. If you are not familiar with the architecture of the system, we suggest you read the [Architecture](/concepts/architecture.md) document before proceeding. ## Requirements -The `Airy apps` are the services which comprise the `Airy Core Platform`. They -run as docker containers and require access to several other services to be in -place before they can be started: +The `Airy apps` are the services which comprise `Airy Core`. They run as docker +containers and require access to several other services to be in place before +they can be started: - `Kafka cluster`: Kafka, Zookeeper and the Confluent Schema registry. These three services comprise the Kafka store. They are the default storage system - of the Airy Core Platform. Kafka requires Zookeeper to work. The Confluent - Schema registry facilitates Avro typed data pipelines. All our Kafka based - applications require the registry to work. + of Airy Core. Kafka requires Zookeeper to work. The Confluent Schema registry + facilitates Avro typed data pipelines. All our Kafka based applications + require the registry to work. - `PostgreSQL`: Where we store authentication data. - `Redis`: The queuing system used by our webhook system relies on Redis. @@ -64,7 +64,7 @@ following environment variables to run: - `PARTITIONS` (default: 10) - `REPLICAS` (default: 1) - `AIRY_CORE_NAMESPACE` (default: ''). Helpful to namespace your topics in case - you are installing the Airy Core Platform in an existing Kafka cluster + you are installing the Airy Core in an existing Kafka cluster We do not recommend running Kafka on docker for production environments. However, we provide a way to deploy the whole Kafka cluster on top of Kubernetes @@ -134,16 +134,15 @@ helm template ./infrastructure/helm-chart ## Running the Airy apps -So far the Airy Core Platform has been tested on K3s, Minikube and AWS EKS. The -following configuration and deployment instructions are applicable to any -Kubernetes implementation as they depend on widely supported Kubernetes -features. In order to proceed with deploying the apps, we assume that you have a -running Kubernetes cluster, properly configured KUBECONF file and properly set -context. +So far Airy Core has been tested on K3s, Minikube and AWS EKS. The following +configuration and deployment instructions are applicable to any Kubernetes +implementation as they depend on widely supported Kubernetes features. In order +to proceed with deploying the apps, we assume that you have a running Kubernetes +cluster, properly configured KUBECONF file and properly set context. -The Airy Core Platform ships with a Kubernetes controller, which is responsible for -starting and reloading the appropriate Airy apps based on the provided configuration. -The controller as a deployment named `airy-controller`. +Airy Core ships with a Kubernetes controller, which is responsible for starting +and reloading the appropriate Airy apps based on the provided configuration. The +controller as a deployment named `airy-controller`. ### Configuration @@ -180,8 +179,9 @@ Most message sources allow users to send rich data such as images, videos and au the Urls that host this data expire which is why after some time you may find that conversations have inaccessible content. -The Airy Core Platform allows you to persist this data to a storage of your choice. To take advantage of this -you must provide access credentials to your storage. The platform currently supports [s3](https://aws.amazon.com/s3/): +Airy Core allows you to persist this data to a storage of your choice. To take +advantage of this you must provide access credentials to your storage. The +platform currently supports [s3](https://aws.amazon.com/s3/): ```yaml apps: @@ -205,7 +205,7 @@ helm install core ./helm-chart/charts/apps/ --values ./airy.yaml --timeout 1000s The API `Airy apps`, the Frontend UI and the Frontend Chatplugin start by default, while all the other apps are optional and are started if there is provided configuration for them in the `airy.yaml` file. -At this point you should have a running `Airy Core Platform` in your environment 🎉. +At this point you should have a running `Airy Core` in your environment 🎉. If afterwards you need to modify or add other config parameters in the `airy.yaml` file, after editing the file run: @@ -216,7 +216,7 @@ airy config apply --config ./airy.yaml --kube-config /path/to/your/kube.conf Make sure you point the `--kube-config` flag to your Kubernetes configuration file. -If you want to deploy the Airy Core Platform with a specific version, you must set the version in your +If you want to deploy the Airy Core with a specific version, you must set the version in your `airy.yaml` file, under the `global.appImageTag` configuration key. ## Network diff --git a/docs/docs/getting-started/deployment/test-environment.md b/docs/docs/getting-started/deployment/test-environment.md index a0fdeb0603..4c9a57d4c7 100644 --- a/docs/docs/getting-started/deployment/test-environment.md +++ b/docs/docs/getting-started/deployment/test-environment.md @@ -1,27 +1,28 @@ --- -title: Running the Airy Core Platform in a test environment +title: Running Airy Core in a test environment sidebar_label: Test Environment --- -The goal of this document is to provide an overview of how to run the Airy Core -Platform on your local machine. +The goal of this document is to provide an overview of how to run Airy Core on +your local machine. -To facilitate bootstrapping the Airy Core Platform on a single machine, we -included a [Vagrant](https://www.vagrantup.com) configuration, inside the -`infrastructure` directory. +To facilitate bootstrapping Airy Core on a single machine, we included a +[Vagrant](https://www.vagrantup.com) configuration, inside the `infrastructure` +directory. The Vagrant box is based on Alpine Linux and contains a pre-configured -Kubernetes cluster [K3OS](https://k3os.io/) to deploy and run the Airy Core -Platform. components. +Kubernetes cluster [K3OS](https://k3os.io/) to deploy and run Airy Core +components. ## Getting started -To bootstrap a test installation, refer to the [bootstrapping](getting-started/installation.md) document. +To bootstrap a test installation, refer to the +[bootstrapping](getting-started/installation.md) document. ## Manage your Vagrant box -You can ssh inside the Airy Core Platform box for testing and debugging purposes -with `vagrant ssh` or run commands directly with `vagrant ssh -c COMMAND` +You can ssh inside the Airy Core box for testing and debugging purposes with +`vagrant ssh` or run commands directly with `vagrant ssh -c COMMAND` ### Status @@ -51,7 +52,7 @@ ${GOOGLE_WEBHOOK_PUBLIC_URL}/google "Your public url for the Twilio Webhook is:" ${TWILIO_WEBHOOK_PUBLIC_URL}/twilio -"You can access the API of the Airy Core Platform at:" +"You can access the API of Airy Core at:" "http://api.airy/" "Example:" @@ -68,7 +69,7 @@ kubectl get pods ### Start, stop, restart -You can stop, start or restart the Airy Core Platform box with the following +You can stop, start or restart the Airy Core box with the following commands: ```sh @@ -160,13 +161,13 @@ helm upgrade core ~/airy-core/helm-chart/charts/apps/ --values /vagrant/airy.yam ## Connect sources -Integrating sources into the `Airy Core Platform` often requires specific +Integrating sources into the `Airy Core` often requires specific configuration settings, refer to the source specific docs for details. You must provide the settings in `infrastructure/airy.yaml` configuration file. An example of the configuration can be found in `airy.tpl.yaml`. After setting the configuration, you need the Airy command line binary (Airy CLI), to communicate with the core installation and apply the installation. -Building and releasing the Airy CLI is part of the regular release process of the Airy Core Platform. +Building and releasing the Airy CLI is part of the regular release process of the Airy Core. You can download the Airy CLI from the releases page on Github https://github.com/airyhq/airy/releases. After downloading, run the following commands: @@ -178,13 +179,14 @@ airy apply config --config ./airy.yaml Make sure that the argument `` points to your `airy.yaml` configuration file. -The Airy CLI considers that the kubernetes configuration file is located under `~/.airy/kube.conf`. -If you modified the location of the file, make sure to set the appropriate path with the `--kube-config` flag. +The Airy CLI considers that the Kubernetes configuration file is located under +`~/.airy/kube.conf`. If you modified the location of the file, make sure to set +the appropriate path with the `--kube-config` flag. -## Uninstall the Airy Core Platform +## Uninstall Airy Core -You can remove the Airy Core Platform Box from your machine completely running -the following commands: +You can remove Airy Core Box from your machine completely running the following +commands: ```sh cd infrastructure diff --git a/docs/docs/getting-started/glossary.md b/docs/docs/getting-started/glossary.md index c4bc3c2ae6..85c6bdded4 100644 --- a/docs/docs/getting-started/glossary.md +++ b/docs/docs/getting-started/glossary.md @@ -4,7 +4,7 @@ title: Glossary sidebar_label: Glossary --- -This document aims to provide an high-level overview of the Airy Core Platform +This document aims to provide an high-level overview of the Airy Core technical vocabulary. It provides definition of the most important terms used both in the code and in the rest of the documentation. @@ -16,12 +16,11 @@ model and glossary do not correspond exactly. The former is the exact machine representation of the data we store and the latter is a conceptual artifact we created to discuss and solve problems. -The Airy Core Platform allows its [users](#user) to process messaging data from -a variety of [sources](#source), which are integrated via [source -providers](#provider). Users] connect sources via [channels](#channel). -Once the channel is connected, the Airy Core Platform ingests source data and -transforms them into [conversations](#conversation), [contacts](#contact), and -[messages](#message). +Airy Core allows its [users](#user) to process messaging data from a variety of +[sources](#source), which are integrated via [source providers](#provider). +Users connect sources via [channels](#channel). Once the channel is connected, +Airy Core ingests source data and transforms them into +[conversations](#conversation), [contacts](#contact), and [messages](#message). ## Channel @@ -119,20 +118,20 @@ e.g. A tag is a specialized metadata, which is used to tag [conversations](#conversation). As the use case of tagging conversations is so -common, the Airy Core Platform provides specialized endpoints and filters for -tagging conversations. +common, Airy Core provides specialized endpoints and filters for tagging +conversations. ## Source A source represents a system that generates messaging data that a user wants to -process with the Airy Core Platform. +process with Airy Core. ### Provider -Source providers are API platforms that allow the Airy Core Platform to connect -to one or more of their sources typically via a webhook. E.g. Twilio is a source -provider for the Twilio SMS and WhatsApp sources. +Source providers are API platforms that allow Airy Core to connect to one or +more of their sources typically via a webhook. E.g. Twilio is a source provider +for the Twilio SMS and WhatsApp sources. ## User -A user represents one authorized agent in the Airy Core Platform. +A user represents one authorized agent in Airy Core. diff --git a/docs/docs/getting-started/installation.md b/docs/docs/getting-started/installation.md index 0152f83736..4347fa3c36 100644 --- a/docs/docs/getting-started/installation.md +++ b/docs/docs/getting-started/installation.md @@ -5,9 +5,9 @@ sidebar_label: Installation import useBaseUrl from '@docusaurus/useBaseUrl'; -## Bootstrap the Airy Core Platform +## Bootstrap Airy Core -Run the Airy Core Platform locally by entering the following commands: +Create an Airy Core instance locally by entering the following commands: ```bash git clone -b main https://github.com/airyhq/airy @@ -35,12 +35,16 @@ hosts file yourself. 192.168.50.5 chatplugin.airy ``` -After the bootstrap process finishes, it will download the Kubernetes configiration file to the local host machine under `~/.airy/kube.conf`. -That file is required for the Airy Command Line tool (Airy CLI), in order to access the Kubernetes cluster where the Airy Core Platform is running. -You can also use that configuration file with the `kubectl` utility, for example: +After the bootstrap process finishes, it will download the Kubernetes +configuration file to the local host machine under `~/.airy/kube.conf`. That +file is required for the Airy Command Line tool (Airy CLI), in order to access +the Kubernetes cluster where your Airy Core instance is running. You can also +use that configuration file with the `kubectl` utility, for example: ```sh kubectl --kubeconfig ~/.airy/kube.conf get pods ``` -Check out our [guide for running in test environment](getting-started/deployment/test-environment.md) for detailed information. +Check out our [guide for running in test +environment](getting-started/deployment/test-environment.md) for detailed +information. diff --git a/docs/docs/getting-started/introduction/index.md b/docs/docs/getting-started/introduction.md similarity index 58% rename from docs/docs/getting-started/introduction/index.md rename to docs/docs/getting-started/introduction.md index c2014306db..65d7b4194b 100644 --- a/docs/docs/getting-started/introduction/index.md +++ b/docs/docs/getting-started/introduction.md @@ -1,12 +1,14 @@ --- -title: 🚀 What Airy is -sidebar_label: What Airy is +title: Introduction +sidebar_label: Introduction slug: / --- +## What is Airy Core? + Airy Core is an open source, fully-featured, production ready messaging platform. -#### With Airy you can process conversational data from a variety of sources: +With Airy you can process conversational data from a variety of sources: - Facebook - WhatsApp @@ -16,7 +18,7 @@ Airy Core is an open source, fully-featured, production ready messaging platform - Twilio - Your own conversational channels -#### You can then use Airy to: +You can then use Airy to: - Unify your messaging channels - Stream your conversational data wherever you want @@ -26,14 +28,20 @@ Airy Core is an open source, fully-featured, production ready messaging platform Since Airy's infrastructure is built around Apache Kafka, it can process a large amount of conversations and messages simultaneously and stream the relevant conversational data to wherever you need it. -## Airy’s Components +## Airy Core Components -#### The core platform contains the following components: +The core platform contains the following components: -- An ingestion platform that heavily relies on Apache Kafka to process incoming webhook data from different sources. We make sense of the data and reshape it into source independent contacts, conversations, and messages (see our glossary for formal definitions). +- An ingestion platform that heavily relies on Apache Kafka to process incoming + webhook data from different sources. We make sense of the data and reshape it + into source independent contacts, conversations, and messages (see our + glossary for formal definitions). - An HTTP API that allows you to manage the data sets the platform handles. -- A webhook integration server that allows you to programmatically participate in conversations by sending messages. The webhook integration exposes events you can "listen" to and react programmatically. +- A webhook integration server that allows you to programmatically participate + in conversations by sending messages. The webhook integration exposes events + you can "listen" to and react programmatically. -- A WebSocket server that allows you to receive near real-time updates about the data flowing through the system. +- A WebSocket server that allows you to receive near real-time updates about the + data flowing through the system. diff --git a/docs/docs/getting-started/troubleshooting.md b/docs/docs/getting-started/troubleshooting.md index bf05a352e8..930da36b62 100644 --- a/docs/docs/getting-started/troubleshooting.md +++ b/docs/docs/getting-started/troubleshooting.md @@ -3,14 +3,17 @@ title: Troubleshooting sidebar_label: Troubleshooting --- -Airy Core is offered free and open-source for users who wish to self-host the software. +Airy Core is free and open-source for users who wish to self-host the software. # Community Support -Airy’s Community Slack (https://airy.co/community) is a great first place to reach out for help. Our community and Core developers are often logged in and ready to answer questions. +Airy’s Community Slack (https://airy.co/community) is a great place to reach out +for help. Our community and Core developers are often logged in and ready to +answer questions. # Enterprise Support -Looking for help & tips running a full scale messaging platform? Airy’s Support engineers can help. +Looking for help & tips running a full scale messaging platform? Airy’s Support +engineers can help. -Fill out the Form https://airy.co/get-a-demo to get quick support. +Fill out the form https://airy.co/get-a-demo to get quick support. diff --git a/docs/docs/guides/contributing.md b/docs/docs/guides/contributing.md index e817bdfd75..faca35cd21 100644 --- a/docs/docs/guides/contributing.md +++ b/docs/docs/guides/contributing.md @@ -11,7 +11,7 @@ started. ## Work with the code -The Airy Core Platform uses [Bazel](https://bazel.build/) to build and test +The Airy Core uses [Bazel](https://bazel.build/) to build and test itself. We suggest you to install [bazelisk](https://github.com/bazelbuild/bazelisk), a small utility that will install the right version of Bazel for you. diff --git a/docs/docs/integrations/airy-core-and-rasa.md b/docs/docs/integrations/rasa.md similarity index 64% rename from docs/docs/integrations/airy-core-and-rasa.md rename to docs/docs/integrations/rasa.md index b768c36e46..dda5a3f0a4 100644 --- a/docs/docs/integrations/airy-core-and-rasa.md +++ b/docs/docs/integrations/rasa.md @@ -1,5 +1,5 @@ --- -title: How to connect the Airy Core Platform and Rasa +title: Rasa integration sidebar_label: Rasa --- @@ -7,13 +7,14 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; :::tip What you will learn -- How to forward Airy Core Platform messages to Rasa +- How to forward Airy Core messages to Rasa - How to configure Rasa to receive and reply to messages using Airy ::: -> Rasa is an open source machine learning framework for automated text and voice-based conversations. -> Understand messages, hold conversations, and connect to messaging channels and APIs. +> Rasa is an open source machine learning framework for automated text and +> voice-based conversations. Understand messages, hold conversations, and +> connect to messaging channels and APIs. > > \- From the [Rasa documentation](https://rasa.com/docs/rasa/) @@ -23,26 +24,26 @@ This is perfectly fine for simple use cases, but as your platform grows and you want to scale your bot interactions across many channels you will need a dedicated solution for storing and routing messages. -This is where the Airy Core Platform can provide great scale benefits: You can -connect a wide array of messaging channels and service them in a single inbox. -For Rasa, you can think of it as a forward messaging router that will persist -your data and make it available for export to anywhere within your organization. +This is where Airy Core can provide great scale benefits: You can connect a wide +array of messaging channels and service them in a single inbox. For Rasa, you +can think of it as a forward messaging router that will persist your data and +make it available for export to anywhere within your organization. This guide covers how to configure your Rasa installation so that it can use the -Airy Core Platform to send and receive messages. +Airy Core to send and receive messages. :::note Prerequisites -- A running Airy Core Platform installation [Get Started](getting-started/installation.md) +- A running Airy Core installation [Get Started](getting-started/installation.md) - A local Rasa setup: For convenience, we recommend [the Docker setup](https://rasa.com/docs/rasa/docker/building-in-docker/) or [a demo repository](https://github.com/airyhq/rasa-demo) we created for this guide ::: ## Configuring Airy -The Airy Core Platform can forward messages from your sources (Messenger, +The Airy Core can forward messages from your sources (Messenger, WhatsApp etc.) to downstream messaging frameworks like Rasa, which can in turn -reply using the Airy Core Platform API. +reply using the Airy Core API. To do this we follow the [webhook documentation](api/webhook.md) to forward in- and outbound messages to Rasa. When doing so set the `url` parameter so that it @@ -63,25 +64,25 @@ should look like so: } ``` -Once you have done this, the Airy Core Platform will start sending messages to -the url you specified. +Once you have done this, the Airy Core will start sending messages to the url +you specified. -successful webhook connection log +successful webhook connection log ## Configuring Rasa We will be implementing a [custom connector](https://rasa.com/docs/rasa/connectors/custom-connectors/) as we want -to make use of the Airy Core Platform API. +to make use of the Airy Core API. The first step is to create a new directory `channels/` in our Rasa project and copy this [connector file](https://github.com/airyhq/rasa-demo/blob/master/channels/airy.py) into it. The connector requires the following configuration values: -- `auth_token` the Airy Core Platform JWT token you used +- `auth_token` the Airy Core JWT token you used to connect the webhook. -- `api_host` The url where you host your Airy Core Platform API (`http://api.airy` for a local installation). +- `api_host` The url where you host your Airy Core API (`http://api.airy` for a local installation). Add them to your existing Rasa `credentials.yml`: @@ -95,7 +96,7 @@ Now you should have a working integration 🎉. To test the connection write a message to one of your channels: The Airy Core Platform will forward it to your Rasa installation, which will respond using the -Airy Core Platform API. This is what you should see in the logs of the demo -repository: +Airy Core API. This is what you should see in the logs of the demo repository: -send message successful connection log +send message successful connection log diff --git a/docs/docs/sources/chat-plugin.md b/docs/docs/sources/chat-plugin.md index 7d83d6304f..4f6b343dd7 100644 --- a/docs/docs/sources/chat-plugin.md +++ b/docs/docs/sources/chat-plugin.md @@ -1,9 +1,9 @@ --- -title: Chat Plugin -sidebar_label: Chat Plugin +title: Airy Live Chat Plugin +sidebar_label: Airy LIve Chat Plugin --- -The Airy Core Chat Plugin is a fully-featured [source](/getting-started/glossary.md#source) that +The Airy Live Chat Plugin is a fully-featured [source](/getting-started/glossary.md#source) that enables conversations with anonymous website visitors through a web chat plugin. :::tip What you will learn @@ -16,7 +16,7 @@ enables conversations with anonymous website visitors through a web chat plugin. ## Connect -Connects a Chat Plugin source to the Airy Core Platform. +Connects a Chat Plugin source to Airy Core. ``` POST /chatplugin.connect diff --git a/docs/docs/sources/facebook.md b/docs/docs/sources/facebook.md index a3de86f8fb..28effe214e 100644 --- a/docs/docs/sources/facebook.md +++ b/docs/docs/sources/facebook.md @@ -11,7 +11,7 @@ Core Platform instance. :::tip What you will learn - The required steps to configure the Facebook source -- How to connect a Facebook page to the Airy Core Platform +- How to connect a Facebook page to Airy Core ::: @@ -47,7 +47,7 @@ Now you can use the app id and the app secret for the following environment vari :::note -Refer to the [test](getting-started/deployment/test-environment.md#connect-sources) guide or the [production](getting-started/deployment/prod-environment.md#connect-sources) one to set these variables in your Airy Core Platform instance. +Refer to the [test](getting-started/deployment/test-environment.md#connect-sources) guide or the [production](getting-started/deployment/prod-environment.md#connect-sources) one to set these variables in your Airy Core instance. ::: @@ -60,7 +60,7 @@ a value of your choice. :::note -Refer to the [test](/getting-started/deployment/test-environment.md#connect-sources) guide or the [production](/getting-started/deployment/prod-environment.md#connect-sources) one to set these variables in your Airy Core Platform instance. +Refer to the [test](/getting-started/deployment/test-environment.md#connect-sources) guide or the [production](/getting-started/deployment/prod-environment.md#connect-sources) one to set these variables in your Airy Core instance. ::: @@ -71,24 +71,24 @@ click on "Edit subscription". You will see something like this: Facebook edit subscription Once the verification process has been completed, Facebook will immediately -start sending events to your Airy Core Platform instance. +start sending events to your Airy Core instance. ### Obtain a page token -The next step is to obtain a page token, so the Airy Core Platform can send messages -on behalf of your page. The fastest way to get one is to use the graph explorer that -Facebook provides [Graph +The next step is to obtain a page token, so that Airy Core can send messages on +behalf of your page. The fastest way to get one is to use the graph explorer +that Facebook provides [Graph Explorer](https://developers.facebook.com/tools/explorer/). On the `User or Page` option, select `Get Page Token` and click on `Generate Access Token`: Facebook token page -You're now ready to connect a Facebook page to the Airy Core Platform 🎉. +You're now ready to connect a Facebook page to your Airy Core instace 🎉. ## Connect -Connects a Facebook page to the Airy Core Platform. +Connects a Facebook page to Airy Core. ``` POST /facebook.connect @@ -124,7 +124,7 @@ POST /facebook.connect ## Disconnect -Disconnects a Facebook page from the Airy Core Platform +Disconnects a Facebook page from Airy Core ``` POST /facebook.disconnect diff --git a/docs/docs/sources/google.md b/docs/docs/sources/google.md index fc23eeb091..d8402d6495 100644 --- a/docs/docs/sources/google.md +++ b/docs/docs/sources/google.md @@ -4,7 +4,7 @@ sidebar_label: Google --- The Google source provides a channel of communication between your Google -Business Location and your running instance of the Airy Core Platform. +Business Location and your running instance of Airy Core. :::tip What you will learn @@ -27,11 +27,11 @@ against your partner key. You must also set the environment variable `GOOGLE_PARTNER_KEY` to your partner key Once the verification process has been completed, Google will immediately start -sending events to your Airy Core Platform instance. +sending events to your Airy Core instance. ## Connect -Connects a Google Business Account to the Airy Core Platform. +Connects a Google Business Account to Airy Core. ``` POST /google.connect diff --git a/docs/docs/sources/sms-twilio.md b/docs/docs/sources/sms-twilio.md index a930c9c39d..e18aa9cff7 100644 --- a/docs/docs/sources/sms-twilio.md +++ b/docs/docs/sources/sms-twilio.md @@ -22,7 +22,7 @@ import TwilioSource from './twilio-source.mdx' After you created a Twilio phone number you must [point its webhook integration](https://www.twilio.com/docs/sms/tutorials/how-to-receive-and-reply-java#configure-your-webhook-url) -to your running Airy Core Platform instance. +to your running Airy Core instance. Next call the Platform API: diff --git a/docs/docs/sources/whatsapp-twilio.md b/docs/docs/sources/whatsapp-twilio.md index 5fdc57e2e8..27985c41ce 100644 --- a/docs/docs/sources/whatsapp-twilio.md +++ b/docs/docs/sources/whatsapp-twilio.md @@ -23,9 +23,9 @@ import TwilioSource from './twilio-source.mdx' After you created a Twilio phone number, you must [point its webhook integration](https://www.twilio.com/docs/sms/tutorials/how-to-receive-and-reply-java#configure-your-webhook-url) -to your Airy Core Platform running instance. +to your Airy Core running instance. -Next call the Airy Core Platform API for connecting channels: +Next call the Airy Core API for connecting channels: ``` POST /twilio.whatsapp.connect diff --git a/docs/sidebars.js b/docs/sidebars.js index 5fbac64c23..f5d44f8643 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -2,9 +2,7 @@ module.exports = { docs: [ { '🚀 Getting Started': [ - { - Introduction: ['getting-started/introduction/index'], - }, + 'getting-started/introduction', 'getting-started/installation', { Deployment: ['getting-started/deployment/test-environment', 'getting-started/deployment/prod-environment'], @@ -39,7 +37,7 @@ module.exports = { { '🛠️ Integrations': [ { - 'Conversational AI /NLP': ['integrations/airy-core-and-rasa'], + 'Conversational AI /NLP': ['integrations/rasa'], }, ], }, diff --git a/docs/static/img/guides/airy-core-and-rasa/success.jpg b/docs/static/img/integrations/success.jpg similarity index 100% rename from docs/static/img/guides/airy-core-and-rasa/success.jpg rename to docs/static/img/integrations/success.jpg diff --git a/docs/static/img/guides/airy-core-and-rasa/webhook_success.jpg b/docs/static/img/integrations/webhook_success.jpg similarity index 100% rename from docs/static/img/guides/airy-core-and-rasa/webhook_success.jpg rename to docs/static/img/integrations/webhook_success.jpg diff --git a/infrastructure/cli/cmd/api/api.go b/infrastructure/cli/cmd/api/api.go index bc364ed762..0d08795680 100644 --- a/infrastructure/cli/cmd/api/api.go +++ b/infrastructure/cli/cmd/api/api.go @@ -8,7 +8,7 @@ import ( var APICmd = &cobra.Command{ Use: "api", TraverseChildren: true, - Short: "Interacts with the Airy Core Platform HTTP API", + Short: "Interacts with the Airy Core HTTP API", Long: ``, } diff --git a/infrastructure/cli/cmd/api/login.go b/infrastructure/cli/cmd/api/login.go index 4fd812a491..dcbbea15e6 100644 --- a/infrastructure/cli/cmd/api/login.go +++ b/infrastructure/cli/cmd/api/login.go @@ -13,7 +13,7 @@ import ( var loginCmd = &cobra.Command{ Use: "login", - Short: "Logs you in in the Airy Core Platform", + Short: "Login into an Airy Core instance", Long: ``, Run: login, } diff --git a/infrastructure/cli/cmd/api/signup.go b/infrastructure/cli/cmd/api/signup.go index 6470d19878..8296cab5bc 100644 --- a/infrastructure/cli/cmd/api/signup.go +++ b/infrastructure/cli/cmd/api/signup.go @@ -13,7 +13,7 @@ import ( var signupCmd = &cobra.Command{ Use: "signup", - Short: "Signs users up in the Airy Core Platform", + Short: "Signs users up in Airy Core", Long: ``, Run: signup, } diff --git a/infrastructure/cli/cmd/config/config.go b/infrastructure/cli/cmd/config/config.go index ebf92fc2bc..da5707e623 100644 --- a/infrastructure/cli/cmd/config/config.go +++ b/infrastructure/cli/cmd/config/config.go @@ -16,7 +16,7 @@ var configFile string var ConfigCmd = &cobra.Command{ Use: "config", TraverseChildren: true, - Short: "Manages your Airy Core Platform instance via airy.yaml", + Short: "Manages an Airy Core instance via airy.yaml", } func applyConfig(cmd *cobra.Command, args []string) { @@ -46,13 +46,13 @@ func applyConfig(cmd *cobra.Command, args []string) { var applyConfigCmd = &cobra.Command{ Use: "apply", TraverseChildren: true, - Short: "Applies configuration values from airy.yaml configuration to the Airy Core Platform", + Short: "Applies configuration values from airy.yaml configuration to an Airy Core instance", Run: applyConfig, } func init() { - ConfigCmd.PersistentFlags().StringVar(&kubeConfigFile, "kube-config", "", "Kubernetes config file for the cluster where the Airy Core Platform is running (default \"~/.airy/kube.conf\")") - ConfigCmd.PersistentFlags().StringVar(&configFile, "config", "./airy.yaml", "Configuration file for the Airy Core Platform") + ConfigCmd.PersistentFlags().StringVar(&kubeConfigFile, "kube-config", "", "Kubernetes config file for the cluster of an Airy Core instance (default \"~/.airy/kube.conf\")") + ConfigCmd.PersistentFlags().StringVar(&configFile, "config", "./airy.yaml", "Configuration file for an Airy Core instance") if kubeConfigFile == "" { home, err := homedir.Dir() if err != nil { diff --git a/infrastructure/cli/cmd/root.go b/infrastructure/cli/cmd/root.go index 777763d2bb..525a5b4bcd 100644 --- a/infrastructure/cli/cmd/root.go +++ b/infrastructure/cli/cmd/root.go @@ -24,7 +24,7 @@ var CommitSHA1 string var rootCmd = &cobra.Command{ Use: "airy", - Short: "airy controls your Airy Core Platform instance", + Short: "airy controls an Airy Core instance", Long: ``, TraverseChildren: true, PersistentPreRun: func(cmd *cobra.Command, args []string) { @@ -45,7 +45,7 @@ var versionCmd = &cobra.Command{ var initCmd = &cobra.Command{ Use: "init", - Short: "Inits your Airy CLI configuration", + Short: "Inits your airy configuration", Long: ``, Run: func(cmd *cobra.Command, args []string) { home, err := homedir.Dir() @@ -107,7 +107,7 @@ func initConfig() { func init() { apiHost := "" - rootCmd.PersistentFlags().StringVar(&apiHost, "apihost", "http://api.airy", "Airy Core Platform HTTP API host") + rootCmd.PersistentFlags().StringVar(&apiHost, "apihost", "http://api.airy", "Airy Core HTTP API host") viper.BindPFlag("apihost", rootCmd.PersistentFlags().Lookup("apihost")) viper.SetDefault("apihost", "http://api.airy") diff --git a/infrastructure/cli/cmd/status/status.go b/infrastructure/cli/cmd/status/status.go index f39437ac89..94a7a2fa6a 100644 --- a/infrastructure/cli/cmd/status/status.go +++ b/infrastructure/cli/cmd/status/status.go @@ -10,10 +10,10 @@ import ( "github.com/spf13/viper" ) -// StatusCmd reports the status of your Airy Core Platform +// StatusCmd reports the status of an Airy Core instance var StatusCmd = &cobra.Command{ Use: "status", - Short: "Reports the status of your Airy Core Platform", + Short: "Reports the status of an Airy Core instance", Long: ``, Run: status, } diff --git a/infrastructure/cli/cmd/ui/ui.go b/infrastructure/cli/cmd/ui/ui.go index 25c7e91f35..65305d2f8a 100644 --- a/infrastructure/cli/cmd/ui/ui.go +++ b/infrastructure/cli/cmd/ui/ui.go @@ -9,11 +9,11 @@ import ( "github.com/spf13/cobra" ) -// UICmd opens the Airy Core Platform UI +// UICmd opens the Airy Core UI var UICmd = &cobra.Command{ Use: "ui", TraverseChildren: true, - Short: "Opens the Airy Core Platform UI in your local browser", + Short: "Opens the Airy Core UI in your local browser", Long: ``, Run: demo, } diff --git a/infrastructure/cli/integration/golden/cli.no-args.golden b/infrastructure/cli/integration/golden/cli.no-args.golden index 340de9711e..292722d790 100644 --- a/infrastructure/cli/integration/golden/cli.no-args.golden +++ b/infrastructure/cli/integration/golden/cli.no-args.golden @@ -1,19 +1,19 @@ -airy controls your Airy Core Platform instance +airy controls an Airy Core instance Usage: airy [command] Available Commands: - api Interacts with the Airy Core Platform HTTP API - config Manages your Airy Core Platform instance via airy.yaml + api Interacts with the Airy Core HTTP API + config Manages an Airy Core instance via airy.yaml help Help about any command - init Inits your Airy CLI configuration - status Reports the status of your Airy Core Platform - ui Opens the Airy Core Platform UI in your local browser + init Inits your airy configuration + status Reports the status of an Airy Core instance + ui Opens the Airy Core UI in your local browser version Prints version information Flags: - --apihost string Airy Core Platform HTTP API host (default "http://api.airy") + --apihost string Airy Core HTTP API host (default "http://api.airy") --cli-config string config file (default is $HOME/.airy/cli.yaml) -h, --help help for airy diff --git a/infrastructure/cli/integration/golden/cli.yaml b/infrastructure/cli/integration/golden/cli.yaml index 1fec8f3a3e..ac6c1115a1 100644 --- a/infrastructure/cli/integration/golden/cli.yaml +++ b/infrastructure/cli/integration/golden/cli.yaml @@ -1,2 +1,2 @@ -apihost: http://localhost:50926 +apihost: http://localhost:50069 apijwttoken: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDM1MmU3NC00MjEyLTQyODItYWM3NC0wZjU4ZjgzYzJkYjUiLCJzdWIiOiIxMDM1MmU3NC00MjEyLTQyODItYWM3NC0wZjU4ZjgzYzJkYjUiLCJpYXQiOjE2MDc2MTk0ODksInVzZXJfaWQiOiIxMDM1MmU3NC00MjEyLTQyODItYWM3NC0wZjU4ZjgzYzJkYjUiLCJleHAiOjE2MDc3MDU4ODl9.ZuIv_t0D358n04gamNwz3U_tkxr4IO36gXuZyU9X3e4 From 6eaae574600ed4eee1bf36a2cd18a1d940a028bc Mon Sep 17 00:00:00 2001 From: Bodo Tasche Date: Thu, 28 Jan 2021 16:11:17 +0100 Subject: [PATCH 13/46] =?UTF-8?q?[#742]=20Chatplugin=20example=20page=20cr?= =?UTF-8?q?ashes=20when=E2=80=A6=20(#768)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …channel_id missing closes #742 --- frontend/chat-plugin/src/defaultScript.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/chat-plugin/src/defaultScript.tsx b/frontend/chat-plugin/src/defaultScript.tsx index a8bf7a4f92..2fcf678e2a 100644 --- a/frontend/chat-plugin/src/defaultScript.tsx +++ b/frontend/chat-plugin/src/defaultScript.tsx @@ -30,6 +30,12 @@ declare const window: { }; }; -new AiryWidget({ - channel_id: window.airy.cid, -}).render(anchor); +if (window.airy.cid.length) { + new AiryWidget({ + channel_id: window.airy.cid, + }).render(anchor); +} else { + console.log( + 'The Airy Chat Plugin is missing the channel id parameter. Please check the docs at http://docs.airy.co to find out more.' + ); +} From ab1a59da5fea0cd507cfcf7ae8ed7d582f753ec5 Mon Sep 17 00:00:00 2001 From: lucapette Date: Thu, 28 Jan 2021 16:25:49 +0100 Subject: [PATCH 14/46] [#752] airy version command should work without loading the config (#769) Fixes #752 --- .bazelrc | 5 ++++- VERSION | 2 +- infrastructure/cli/BUILD | 8 ++++++++ infrastructure/cli/cmd/root.go | 2 +- infrastructure/cli/integration/golden/cli.yaml | 2 +- infrastructure/cli/integration/runner.go | 12 +++++++++--- infrastructure/cli/integration/version_test.go | 13 ++++++++++--- lib/java/mapping/BUILD | 1 - scripts/release.sh | 2 +- 9 files changed, 35 insertions(+), 12 deletions(-) diff --git a/.bazelrc b/.bazelrc index 4175338085..dff2436979 100644 --- a/.bazelrc +++ b/.bazelrc @@ -3,7 +3,10 @@ build --strategy=TypeScriptCompile=worker # Use java 11 -build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11 --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11 --workspace_status_command=tools/build/bazel_status.sh +build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11 --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11 + +# Stamp version and commit +build --stamp --workspace_status_command=tools/build/bazel_status.sh # Output test errors by default test --test_output=errors diff --git a/VERSION b/VERSION index 88e5277ec8..630bf599c8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.0.alpha +0.7.0-alpha diff --git a/infrastructure/cli/BUILD b/infrastructure/cli/BUILD index 7d1cb16920..e36c0ed38d 100644 --- a/infrastructure/cli/BUILD +++ b/infrastructure/cli/BUILD @@ -14,6 +14,10 @@ go_binary( out = "airy", embed = [":cli_lib"], visibility = ["//visibility:public"], + x_defs = { + "cmd.CommitSHA1": "{STABLE_GIT_COMMIT}", + "cmd.Version": "{STABLE_VERSION}", + }, ) os_list = [ @@ -30,6 +34,10 @@ os_list = [ goarch = "amd64", goos = os, visibility = ["//visibility:public"], + x_defs = { + "cmd.CommitSHA1": "{STABLE_GIT_COMMIT}", + "cmd.Version": "{STABLE_VERSION}", + }, ) for os in os_list ] diff --git a/infrastructure/cli/cmd/root.go b/infrastructure/cli/cmd/root.go index 525a5b4bcd..d89bc82a31 100644 --- a/infrastructure/cli/cmd/root.go +++ b/infrastructure/cli/cmd/root.go @@ -28,7 +28,7 @@ var rootCmd = &cobra.Command{ Long: ``, TraverseChildren: true, PersistentPreRun: func(cmd *cobra.Command, args []string) { - if cmd.Name() != "init" { + if cmd.Name() != "init" && cmd.Name() != "version" { initConfig() } }, diff --git a/infrastructure/cli/integration/golden/cli.yaml b/infrastructure/cli/integration/golden/cli.yaml index ac6c1115a1..635d769f8b 100644 --- a/infrastructure/cli/integration/golden/cli.yaml +++ b/infrastructure/cli/integration/golden/cli.yaml @@ -1,2 +1,2 @@ -apihost: http://localhost:50069 +apihost: http://localhost:51018 apijwttoken: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDM1MmU3NC00MjEyLTQyODItYWM3NC0wZjU4ZjgzYzJkYjUiLCJzdWIiOiIxMDM1MmU3NC00MjEyLTQyODItYWM3NC0wZjU4ZjgzYzJkYjUiLCJpYXQiOjE2MDc2MTk0ODksInVzZXJfaWQiOiIxMDM1MmU3NC00MjEyLTQyODItYWM3NC0wZjU4ZjgzYzJkYjUiLCJleHAiOjE2MDc3MDU4ODl9.ZuIv_t0D358n04gamNwz3U_tkxr4IO36gXuZyU9X3e4 diff --git a/infrastructure/cli/integration/runner.go b/infrastructure/cli/integration/runner.go index 442dfbe771..24cdb679f8 100644 --- a/infrastructure/cli/integration/runner.go +++ b/infrastructure/cli/integration/runner.go @@ -13,12 +13,18 @@ type test struct { wantErr bool } +func runCLI(args []string) (string, error) { + cmd := exec.Command("../airy", args...) + output, err := cmd.CombinedOutput() + actual := string(output) + + return actual, err +} + func runner(t *testing.T, tests []test) { for _, tt := range tests { t.Run(tt.name, func(testing *testing.T) { - cmd := exec.Command("../airy", tt.args...) - output, err := cmd.CombinedOutput() - actual := string(output) + actual, err := runCLI(tt.args) if (err != nil) != tt.wantErr { if tt.wantErr { t.Fatalf("Test %s expected to fail but did not. Error message: %v Output: %s\n", tt.name, err, actual) diff --git a/infrastructure/cli/integration/version_test.go b/infrastructure/cli/integration/version_test.go index e2db0ae45e..160ae16692 100644 --- a/infrastructure/cli/integration/version_test.go +++ b/infrastructure/cli/integration/version_test.go @@ -1,13 +1,20 @@ package integration import ( + "regexp" "testing" ) func TestVersion(t *testing.T) { - tests := []test{ - {"version", []string{"version", "--cli-config", "golden/cli.yaml"}, "cli.version", false}, + actual, err := runCLI([]string{"version"}) + if err != nil { + t.Error("expected version not to fail but did", err) } - runner(t, tests) + // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string + validVersionString := regexp.MustCompile(`^Version: (0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?, GitCommit: [0-9a-f]{5,40}$`) + + if !validVersionString.MatchString(actual) { + t.Errorf("expected %s to be a valid version but was not", actual) + } } diff --git a/lib/java/mapping/BUILD b/lib/java/mapping/BUILD index 0aaaa7a767..01ba64db51 100644 --- a/lib/java/mapping/BUILD +++ b/lib/java/mapping/BUILD @@ -1,5 +1,4 @@ load("//tools/build:java_library.bzl", "custom_java_library") -load("@rules_java//java:defs.bzl", "java_binary") load("//tools/build:junit5.bzl", "junit5") lib_deps = [ diff --git a/scripts/release.sh b/scripts/release.sh index 2f87070569..2378960ef6 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -61,7 +61,7 @@ create_alpha_version() { minor="${BASH_REMATCH[2]}" patch="${BASH_REMATCH[3]}" fi - alpha_version=$(printf "%s.%s.%s.alpha\n" $major $((minor+1)) $patch) + alpha_version=$(printf "%s.%s.%s-alpha\n" $major $((minor+1)) $patch) command echo ${alpha_version}> VERSION command git add VERSION command git commit -m "Bump version to ${alpha_version}" From b5c29280c18940b5ac73bfaf592ee825f8155b50 Mon Sep 17 00:00:00 2001 From: lucapette Date: Fri, 29 Jan 2021 10:10:37 +0100 Subject: [PATCH 15/46] [#491] Do not show the edit button for docs (#771) Until we sort out how we want to handle versioned docs Fixes #491 --- docs/docusaurus.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 7eb2bec065..28e91b0b56 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -39,7 +39,6 @@ module.exports = { docs: { routeBasePath: '/', sidebarPath: require.resolve('./sidebars.js'), - editUrl: 'https://github.com/airyhq/airy/edit/main/docs/', }, theme: { customCss: require.resolve('./src/css/custom.css'), From eefd78d5bb4cf45c0c7ff5325c31894fe3d43462 Mon Sep 17 00:00:00 2001 From: lucapette Date: Fri, 29 Jan 2021 11:00:20 +0100 Subject: [PATCH 16/46] [#774] Better favicon (#776) Fixes #774 --- docs/static/img/favicon.ico | Bin 13251 -> 1301 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico index 6c9f5a055326c7d2e2e4463af6f8df3fb7d81dff..1e4eaa436937f74b7d9d5cf1a07a90080fb32a8f 100644 GIT binary patch literal 1301 zcmV+w1?u{VP)7Zf@@V#Vu{`n`@4xmSq@`PN!}&S%$EtYr~BO|=7w+pglH{5mS18^IkWAVfZxU-GY+2Lq7P1ndcf#A}t_;|G8w}nI z2|(-xAkPipm2e}3VArSNgK~?}8L02^o@RBvvi&S?GP>>g`*drzl7cNyeawuq6tBN+2O500kpcu&>CO)}zIWo(aug9;Hr>f$iCf{>iXa zklc^RpWWf0${t^v3J>Kw5i?doQ8Iko;k^tG7b;?+!je&}!ZMA;AEv^dO;xTU-o^Ms zWr`n$yfbWE1)DSBYIrhku#EEg+RQv8$HM-#i|e^%wXzd5_IZQYldo)*46_W`mQg=X zld++`GA4xVhO^os)xlDy+=m+j?E5M}Q@^IR z80z;~v<&)_aYqDXlvSPd`zU)qD*;Yj(R7SxijqYEMQj!#u8D_J9h#%}F3%#0dA3X2 zWc0x>DFAwnJT5YkU2VblgK%?BbD_q&SWlKJj$hVzr3jL-{Ti%}_Z;4DnKrr1WbIZ) z!G{$V*@=qB>op_O%l)=xDZ9j9cl(nugfg~SrUNcAaqgXjO__?yTsXNy5f=qJzX(wG z=ki2C(lebt(j1zM4FcdIFzkLi8^GT4wZ#jtPgW>iyH9brQS*9>UUd4AWsu!6;6cWu z7}%Yw>~BkoAcxT}1%P1tH27AWq}%PvRd!#;JfFUzX}Rk315v=*I?ay;c3LbHCOKsE zG7+tWXlG(BJ1ry(o{B#L4$41rkdXZ?C!EA+?9zTapy`{0)EI|MLeSsGoE~xHPQ}yf z6`iB-OjCfmC1h>xhfDpM=6-E2t?S4p0@xQ6*DCj*yd?OfL-W(Hwh1I#ZJjyg1b_KS zFg^<>S~cw>@XmvZvUFuDqp0M$E=@zPrft~q7anM{wShMzxn1$S=jUY${@Yvypj2vX z8sb+#Y?SZu$~l-S=o)p}^zHGA?g>q_g4Q8OiFMA5GHX{1xhIqbAEW~JyMqRIvjhdW*^BYWA|<$4D-xrNDE*W9D)Z ziAjSy1H2vXa{6Dc=W<`%Bl2&`DL0%H!`V@@bnWI&c>x#-8xi;i1E7~_f^=O+00000 LNkvXXu0mjfCe3NX literal 13251 zcmbWdc|4T;_dhnt>tru$ z*0D2V-)F3|&v)GK_kDl9-|s)a<;Clo>)~4FIeU||7J0ssI40Imox054~ca|%F;GXVgePh0>V&L`L2-#&5wbCe74 ziRXXz_fBN50(5V9!XLpOdcyrrXq-I<(7kA8!Mk@i&iH#@{_owx{nD?7;{e6Hi%<8z zTcKP;v3~-D1@`XG!*vS4EzHFu%*Ad3fH>dD$MyI4`!ddki<^g+Zy&$Fe!&Br6Uq() zxVdsy~a*5RkoCR4-=TLz2_D8}NL; zptywOQ7QS;3W{fxG_|yKboDM=x@>G>dd2Lj%}rZ7sQoPmS2y>29-dy_4<7|Sei9TM z680keWkh6DbVB0Wq~w%$?^83gvU76tKIeZaE-5W5ulP|})zH|~+|v5%cUx~?|G*%A zXn2G`oSvDTn_pO5B5!PNZSU+-sI)!1_U!y;{KvBY%PwJ#UEI99JiPpSc5!h(*)v?2 zm+$2HeIiCy{C6H4Ii>zgK=fjKMp6BKSq*EF*xi60L2)@vf;@T8w7)I;e`nb9|6i8< zYuNwTH43-{;Qo8?aC7tU@$m5Q?c?K&eFFRThJc{J-$U@fA5LwL|{cs=%$$2|9~n>;b)H0FM?`%BBY6>ttJX?2F7_qw$` z<$y)mq+1=_vY)h>E?4hPo@>5owlj{qT*d?z{1!ZL{-?A>Feb9@JVKAuwN*EGH}w%4 zkZd=JL(rt(3!*1Z;lKzhvO>$mc@L?z0+sLQ*?=1n?Jv-ynhhU9K43x!1>3#_4U)s= z#~f!to9G#oSz1u5@{cJ`#w^R6(OtHU9VxjQ6A%=7DRsJM&CNan?+x!}ZYg&JLPp?3 zdBUj{eM7_0;0F@$re7TpBbdGwEHG^9cy4s>b2uH3PRBeW*-svR7_#oLsPPunjMGHxCNUNiRh+V*XPJ*KLP1F>S_xDg(A_rUNb?8$`@Ziv!PTO zKBrx2onU<0b|M>~@xw9-CoHR<(o_`%-n9nJwUn)*G#FOJdJ#=JLTrFDw>cY-Q2>2s zbv@TSEIlDhf(^Kj-4HWaKgJ&fO<)5mFw}H5AeYsPIigauldq};xIq2G*UhAz$7e50 zmU&C(6NLbAw^ZG`XJYwT5wK%DE@w5K1*Eo5d`iigrrPhGLm<=sP#$o;E4r7lhDxTO zrz;vEhecm&S><)G0UKT9Yr3?`4m4#uq+g@)p-4CURQr)v1t$+?hdkHSqL7_+A`tFG z%>FI~(psKjeAm^id)kmylYnoOFc>g3=+afQc7EHu5eIDTEo>#`Nm5X&ovP_EW37n` zkjimLE$C}Mw8ce;`FY;N-14{=@$wY%%bzk3GdF$g{4vRVZtfTcY2 zQpZ>KkwQsE;~CmB*xPw0<=FN~x&`D()c}$Wn7@ZAiznaXIS*SIFkGJvfmAaJW22)L zvFYGfikZ=XeJ6D6(gg#z9j*yd|1ZJHa=*gpOXJ$?dR zHd2S6V92d7@@RX`VovG!;RJ&u-Gn>K%0MRI!SaWDHR?Dx0d^ouv|!EwHv^+TWJ*kQ zHw2Y5dzn=oy%$5BU;}oR7MEDFmAw>9GfR&An%s{tMas|AtRD1_4;wyw=O&VWu=0x{ zc3AO7xT4Y{VuGW5CPW|(&S}awJRH7 zaRWKIn-X_h5Bqg>&2Rlg>{737>d~9(7tXo68w$ui2Yy2t;J-4oD78dL#1m!S>+nYr zzU`i?8?UxKyY-JP)~{WF&N$f;!Y}0G+iQo>YNm_BRKEpObAyYLZT7&y_KCR7K$lv4 zIxBDSqgWdS(t-k!yWXU>MyweOb@4`ynH^yR0`Wym;EgMVUvT@I?kriS<=Ls4-A|ui z|A8>R@WMszx=N~VbGq^)s1=UN5wcx&)6-$~3^G_yU+O^^j zKpQ0l?JLi?7e%8T@o$E%16uF3Tizdb%m6znhAOUEJ~qJQ0>WCsI)gRH!uD^=B7tp< z0uZ_L^DnFz-PXZct4$eh=;WnB4MU>B}i*`Ht* z7$WPSsbGColsJkM|2pqQZj~!6x|}oK#r-V7Y=sZ$LjVomry)~ZwEB&U{Vi&9Wh}F< zGez(9O33{Pfu>?4t)*(VgPc3Jgiu=;18Z znfJ8oW(1czQKe+@Jdh!53}+V?UL#B5A@WCSJ2^WFNp)6kp4})krJo04AnSbmgLN6C zxRvE8$f1=V16F12W%Gfphr?D6Ps?;T)b2zx()7qc^%fT;MEt5WM4Ama77W6=r5~St zr)<`k?mUYfD`%+9-5Xn=`3)v&zuZ|U*J%2qc_jnd?tk+$&$D`Lo24iPwcJp5s^7pc zxTE}tW^jv+;;iFB`*Uy^Z4@TP>Q6tsp;o#sHIgf`fJ~T)qb@ux^+mSLpnn>Nx`=z+ zkJYxnRjY(vG>0|ANCuYT>hg{}$8EK~L74Ijta*4+cl<(TG%E^{_B>kg6E|lbDygs2 z#Md17YWj6SgBoyfzwCY2B>gPx16u5-FjzJW2tK)h5!STr-)h+?Jk>BZdcM739zS47 zszBcr03~bnQ}ml@-Osj%v{pqdikllV=m{;T4c#^1g1_krXagC;*W0ledNst>5zMmO zLIP{2(sc@w26h6qGIyP8@Jm%Jg=J~6UqPUjD$_UwWM6HzHV>n?$+G)k*19ZGUuJq= z6^-TAMEGKruVibR{V^4ie{Lu>FȗdRObD7b~JP+Buf3Fhm0|f=4%3koZGxoQi zNtsEd=2zlCYQd7|U^3+(&>D%~Nv6E|lZgQL z$~RsScigf0Wz+Eh1qrS#r=?Qba7a>XxR{dp`NG;o1lSx`z^JvH$B9zP2ES~K0LSB+ z=jb77-G4Z7orz%h{uAE!K9#pY1aS2oq8h+U>h+8BqpSsE6)UAoxgG{K+=(kehikzY z^&lv&o`!p=QtGp6rrr9@A?EXsg`7x1MYr>MQCft5Liu>ppz zl5c>IuYo8+C=Vi-TX&^oSyP&sR`;WIuEw_1i^G zdc3^J+5YX3Knn_#EJY`DNA^<9&2q<*VmE{tR`ctMESiTbSy~8{Y7e`$^!SGN1w?^i zS({4yue_7-FO5LqCRz|2)gg^h=0v!l(pLH% zqfj!XW_oe}{m~q^wd^y(`C@Jo9)9jVS>C;dm8wi?d4DeN0B7Ym19Q2?_oZ z&M-x`-D~b9UXwiLKs)+pL=F-p z=oWXb)us^_5gek*V%FZ;baGBtsphf~sZ-5jDO8N(GQrS+K=X09P1V5mnS&M31kK{} zYh3|opwW;WQWUyfb0YKY-LLTsq+X?2+x1n>E4+Ed%2*VzH=%ISd_zDGz9qyX;^*n3 z*+4x|BQIJr!mxNBf2CLxbQE2@9>)5e1EcgVo|oT5rjEt40V-K~@ew6pe#X8!k5?Ml z&+gmGdFy^4DCb#z(PD*uLrOKI9!c#!Ny(gCADw&529!#KCAv^Tc9X5R9(;;_AZf+9 z$6upLaeqm0@ER93%s`oV03%3=yG|C$Q@6iXeEUJA5jAC@{SB&&)?;vZtX{sXVgIS5 zs~6HQDIYwH%EX;P1QOoYNE62`8x!XJvYSjS?V{>DN6FS2>o80ZG}WX|rrg=l(YvOv z*L%@Xl>3*oQLu z5xEDQ$BdOCO!;nI`E`P1Bu2eOmS{)_QfqO*MEp7>DX+=}X+DV2^e|-Egslmo)(NKr zJFn+*!|mzqJ?p#rkoOdcS4S089fDtoC+xZ}mD30CzlffkQ1X^>|f#Noj!;~@nZZSh;DzVuwRvbYti?lpcNRlqPHhvQ;v4|T6^s~16b|98 zZ5T!t4%QuJzDKx?K%?#(oP2UxwJcEm;(o&YQ%9$nTf89aFUo5)mc{h(7&-)WL73uF zw1u9n_{FN3s$m1@rfT8AkYF!0TUH3;_fRqP~acSQ^3 z3tg8HcK6owo|Y?vCxxiOCPwISKMn47Iu%&g8!w7=FkNES%$NiYhFFOp)*Fl7;QH^} z_cAfpdD$T+H|}=Y8r=PgD`-_uP-C@Qi`Go&Jk;0dAoTLtUC4twf|v6${IZh4D*=|3 z*l0H39)zC_@D55{ZcZ^vL!Q*WXnE;@qO2^lznl0IKR&>q66>Cw758C3fL1K+_iO&9?-#|FrWk-Jwd2x`=QL4yO3#jcsSW+De%#&M&b*R>Q{wt|mF zw17qW8G2_mg7*t2_PE1RwHe2`kp)Cu8(mr~IQe9)n#aNxdVT}E9uok^&Tjj+6TO!Q zym9Sw2tJZ>GmaFExLCY7>6e?&iqH-LYQBC=(RB$uh+nio8FY&7JOT2y-A(0J`blbQ z^Ed66VqT%R66>cedA&lWwU=MUwf)#W(!5cJR5u~47^7YjCoH|JTN^#raGj7UHXs0^ zMGDiquN6Rxvt3vFjjijR>!NYuZ*%wP-vPMJocWn?a_6ItCHdQzd*&KDj?eiS#Sh;N z(UmzMBOK{v@1pR>4`D@MUTWOMEnx{kQ7w-Xz;-fAL$YJg>c(5uKd1BWhA3dOdRY9= znyBinQ{DuZRj;KoSlkrqiWRiX@WT3){`;i`GaGBZvq5e!(~CFbI&7s_wJ-V;-nzVE z>3%rw_$v7`$Ne+^NeMzi3O3a}f%+CM_2o{tt|powj|$vj6l`Z*8u%8tD%I*(toNKI zIcIr$=@|c*$3EQ2<*g$-US!}7_UW-JNhN3F{K?NI+fsHT(ds{u${R58;vAd(mJ(uL zr7>A-Kp4D+lLihB_ciy||6bGzTn14j=yB`;<~e3TV5Y|(gu&~EuNBs6g+yT>Ap#q> zJcjf9c4d-bRTuVn_WMf#iP0GmVQM8-2)le%pq_rP0C;GL4WNkQ@)=RB_IQ|flVxco znj{VRi<4KD;u8MlK>)caE0=nbemxsNN(o~9RCScyqc%lo z^@%mjWbJKJuD2|cLg;2kCUGPb(^Hg?VBsrjWo%}|2@m}BpwjLakRpa7f7GgtIIS18 zDb3gPmoif4Y~R{Lm=<&q-vSXpH+W1*Uu+Pa4E6>O_>EEHxgW@&4Ep@}nwOXv{h9I>*Qy<{-<* zmXftVF_j`w(`B%`2~v@;%$ADf?FS} zeuoCMF1finZKFMAODoT9O;s7I{bb2^ENv3KJGT?jk(_57@&A{6p~6^QGCSQApWn*2 zJH@3&qT&lhEn%6N2La%x&}o*c2deAExpN`y(1mjPr`J0}Kh-!Mf0XEmc#ys?b&IImh<*;H^Zx`0oCq(>TlDHK&{UOUWfSoRhJP z6e0@xky86IC+PO=IeM)G759^_+=3}xi~io77i4L1A@1GRmpHc!@UicMM4X>- zx~o`^@XBQsjiXix4;s16W~QIPGG`Kg7q=DggnzEh9#60ED_GlcNd=|N$9HXBRRcxm zGCzn7MxRmeOJ2vrY!=jp3plt2buh6JuU0jGIq~j%{&S~dlxYARpu8}`=%XAXPEszj zP7Kwo7x!7S0hcfePvvD@L0RFyw>nYD&}o$H%;e3E99`_=yqek&)&)lQh=EpDT}85q z2x=P=NK?fLfjKJ(S`Yg4x67bh5$+uLbFvQHuX4vC`H9D>-O%D}o0*bfQibA<7>%=- zSbZ{wSwo~(GN;R~jV)j|rvm(DPdc)wetARpv40G7y6W=ZwS2%-+l-@XA<|%v`SjCn zXvcPUYvqZ&bv4T}iq8g^pA!^m{w#-oqv8bVThDj0NgN{2tD>gj4ag$l3@a(j#u1lf z5CELIjh4Ly&CT0yv~5zVq3x#ULE|gn1oYlg9(us{UyTBEi`5l!?=@jm z+LEXfwU+Vy>0HeL9>1u#~( zPNK?4qwOk@@zo_Nw_orkh#pA*tp4r{fxJKoQ#M;d<$JdVU-qy8vvbqC=cfCQv;%jI zuw9!d;h&aA3|ch{9_?6cG|LySO?E^7Fl7~{k2gr#yARtcYgL=4TGVoc>+9{GyTuu| z$dj*inhTaJr3=`A_A=aBMr(%cYy`atFOlsT(t>+jE+zjKj~8Mb&IsVoZ#7yA!j>Dz z($7(REQSM#qZI>r$KSbjoa0%zqCdKvM1%IEnnYzSh{xQ?ymiU-KCWJn_vp6n60%!s zYP#lX`}Z3=N8Oc2+mj)4tl6bd3h>}Vl}F4vFUMpSqL&Sj-^E=bVgy(nV7dNsCrUY4 z^WF9RFI6n`cI2dEw%d`)OF#jJ90?SrZJy&*pgMwX?`&Pa*Zo-`9J2PzCCM0d=L5OW zHMXk2x`$=Ifa_$8LT>)nl~w)ea5H}b)~O1kswEgXRlKgz0=_ahlTQio1(siIdljOR zHTN3F55U_PBL-z^7H__`*Viq@e*t5JBf=d5a{kL%4K4YalRA>|f_KyT6_)B^4stCPjSN=Nr-d8VYl;V_3qKZUN>_+30&Xl{8fyDWN+ z>LWcu zCep9E&r|uJ_<~Z~i`P}J>SucJ$xX{=LF5otpPYjnn=V8|V9|p^*Lpl8$38K>8ou{8 zE&3`&8{NqwMGS8XL0Zc5UsQwKD`i{ zUe^DOV;q=Za)2QAGx+8nB~rG=UmjS0G+KMNx6AD7*Q+WUnF&SjH7XuRbJfr1VXbZj z((aI8^-%;!M7bUG0kF(l>3*SY1o_&&!(q(+hWO=F>e+L|$XWZKf!VpY9}_l~DJWIY zo%#=FR7QoBoW_cx{cvDR+|+w&4}lr5*%(q=UUoa)%&_3TZK_rhu*i;oQ&P5QAMRq^ zQHBp`KCaggJoQ@VR*O(cMf*wVYbvN+IxZ;mS?VSxiVY}9%FUVgL2=oZR_S>ZDfp^` zXl|AQ=wXOjE=O6Hbh+hyL6tr{c}f1`Yyly@-b^^cQ1`^H*e2z}S!mM`DkNYwUyKca zoBl2=pjm(}y==Z$qZa9(FXL^E-dU;XTi{e((j%6)#mJyW;E4A6^^HHj{DUu~d_s=w$nwB_1 zFpHIREbxKJ5sjSHbG-v_iK=bbmp_#ppXkP1<{&IU(34d@f*QrF4m9TSS6bng>&_2y ze@hmJ5_{}XVnC3Oa}}vIQj-lhd<*^U`+IpF-7!%{8}gkS2l9POXg*Fh&`=DT`7d3j z;b%>ofCqk0bxV4uOZy|Lz06)q|$jS=QnJbH-<7Bt>E&5dh{Vw2d?g7LNxm4|KGk`lJzMyOqz0yORT*dI46WUY8 zA7+}B1q7cnPqzGB0lX7UyNEm49l+57lK!g&c(<+uAM!c=_)xME#0%N|g{sdF#XTPcuhhy+KJ1$dau>CNRb!s+Jpx|{rrttx2`8#4a6bNE%frxubfp)~x-qylKn*yZW5qX1_VlFor3|xKfB${4?Xz$@@ z&Qwe{>)h-itwqn~&ub3kcdYbq*D9bQraFCC)= zTOEFkx#z1k4a*zYG+pVOVgpv<1f7C%7tcTZS|{6W1s6Vn)X|<^<4&cy;NBaUad6DL zst2f5NZ=kiw~S|+5|T}~ua(&*?0yOD?pt9=F&b*-iTn+0z(K_2l8tRoMA{Jk@OTp- z$&ib+!3Gqg56bxTe8xuBPkR%Vl=?Z*w#0ON+F$d5=0_>Aba59S+C<8*tAjCx` zqwXc@B!)`O`Iuc1$;$^#z;+_0!>;Si4ofwhuAdzk@3Gqvl6tGmXJnbI}v*k zq|a(Ef)tO8ALm4n@-slD7S9XFDli4_hiDZK@`4J5P!4o~+ILd&0x7gLq@@5Q!}N$R z82krghD=!=X33<1?5!+J&4k@vhh;rA;y)4gC+s@54T$Hi`-_>6kgpTc;AEx_kCi8K z=tr}eu3P%gz*A8Cc1KWOqkj;tVFVL#_8i}e%IDV1UtrHs7Wb4C?T~nv3_r+RxJMsi z%3t(cTr;u^w^Chz@k*>;;3+-q+IZ z4Jrf|hfvMvrJ#3r!DS@7nC$W8k=o>#yVZqixmRrZ9==gWM%b*vzS6W){4%|?9kkvw ziJxl~L|03NAKjf!WyCet4A?aEH5f1JJmG*fmgx%ku>09urCfFME6Qq6miZ=RuO5Sq zKzn}_8SHD4(yl!u?q{<9?%P9iV}*m@8MC;|XnJ%V7c(yqTS1`-$saqDGjb|^Q7-!z zTI&ofg8~zb(~b%2IRon*WQ;)c$ksVpZ!IjmXOD$&a%O@@m!_35`WmJ^!*N3L&sl~I zQ5w=X2wR5F**|M}oDb0exjQAUDDUIIjT8gWP7L!>3*KzQA+C5-1TvfT)a}k%!8101 zTWgA}?f+d;>Ro!i*U}b8n+j#9B^sc>$r4#1G*uXZf^l6;4a|+tb6B)HGdp^#=}k*r z^l# zmLZ_%NCDV4^x4_>`}EI!ByEjhs~0!nmQAd$ow^ZRDMl*B#>afC7zub1I7i`l>V~BR z!jFO^NRup4S_hhbZK$4C=2__c7_)Z3W28=$3~xqDQ~D4gE!m6SoYsg{{{LWq+|=dN z%~U4zH0ianCCHk^QR#JPYVWCMpG+V8NJ#0e*v+BI({S-y5ggVGmt1ySt}BUgyT? zp6|+0>nzRGx+Z0}+oH2_mb9x{(tN%Q)zL$LC3ubw9N!1ZC>UUD>*`h&5hmi0}^&wD|$p=r4(@)%0Xs25gUTjA%0V2uDgO zWRGwJS8@nP+c1c95+;gA64#?9w8=%D+pA_1!?CDN(At!w9_SQlXvI-s;)fI~m2fam z_}R}!p{N8um%)XK^4hrBiSwPD;|Q|7eQA!*WPt>Kuy^ z^}JA0`4jXJDVLr3A*}~=UO-PvvY;G!o_;>)+>!$m|Eh4hvo1MTasTmSQT!dI^hh*$ z%4aQP#(tM;T=MPZ$WC%`jRz~$?<7R~6i&fsXOf>Jg>Qx^Vmnz8gmm@kt&DJ&0Cd9N9A~t< z;dyOU>vUYCfgV9$ZGX^(3DvX8Zl}zj^OpQp{@69`Kk_NT|6J3-hs{B+#p>hQNR%8& z;)(3UDoY=lFUun%W$wo-*|*>O9t7C=!QsyMU%dl?uN|GLeVF$)9G4@O<+_~f-pfse z+WCn>eb2OvYpRZp6)y)*bQ0U$65;zafSz>JIYQ97QJ$0#i8>%U3InK zLqde=v6eCTjVC-~Zf>r;44{yIm%{0e<9DeGH+z{j4u$T!1>dw5P+?6BtCwBHvuDm; z-5Ou*$;+BWKP2eD0dL8gpYb;(Ievp)V1Zgaaaw zUl14Yj!u2DW+PWzB%&`~Ja^yZL3i6vP~WS8NpXh#e+8QB$yhev>>t$9@enZ=M;5O| z(D3d{Tk@@>tEFyP*B!>!pVX!l*6JA6gf&Y^UMv16)e}%4tx{e*vfg(cdua_Pf$-(z z0wL0vH#du{!HV;Wasr6Y~oKRcH5N{)cKz zbCi}zwDS5LKG7^OHx#G#taC>HduFs!lpr0n<4w75f;zcGo?bV;{S`8$rn70w20Q~@ zC9S`}2;FC$qD0+}cQ8ENQ7~~;ml|r4NAG?WdN6$mk~5f`JShHsX!!E?(b3FSDaD2_ zia!A%T(J0{kIm7q6;f`Xw(8X6M+aCgc`GjBq?m8E_w2*hObMGvro{Y$JqON^cxaNG zGUQ`st`>G>J;K$(q;aXj>arZyL~+OxaWYW1>I$EGoKMdy-ysYu*dAsZmh5o545;D6in_87|l z(^STiOrMuwWPJWCglHlvI#sd}Z(1%?gJ$&8`5-@8eE1sl*WCDw<~Qf=y)T))h?#iE zh_D&KU19J|sU9KhM5cmc(>{Lh>uTKPG-u6i@lc?jWT*;LKk%=;W=qGF90o(rPQbUE zk-$H?vd@<00>vD@^xLiD5|}Vc>)o)Lli5Kaql!P8o;%IJv-9iiC+S`Dm5@(Aj|(n& zX5!u#Nk$EP_;T|};y?*41{e{p^dQH~LHTmZ9-qJKi)Ihdd8WZ-%xbcRbCq3(zvYhG z7WbGy7dXd^;nTjn#SI&d`}su2dcxUT>O=3fm6dDXUzHqBY?7^YirDd@cz`C&f1@Wb zY(SJ1tVa?g67WG==A*!-mS{@juwwxvjXZJm9_54a)y>)K7Py#d++|d74=npIs~aNd zN~hgS;9%{CI;=Kg*-6SVQZBHPKAD(rzNu!!_P@kxQOb4df`oO#z z>oTJ~6K9o4F(vhaDhcfxtgTSomdfA<*dY|Co`r36@RY4Ajl^_(3+QfUC=6$*{alU+ z3+gU&fy6O*Hd3RR_rM284_-AqQsy}p2rF(5qxfMl;8Up15SLuJeuhAM-guyPtmT_| z=F6Fkomup_*l-f1;29P=j1S90VQn{89?VUMOnvy{&ASLcE-}QJ;7zEZ;O1hU^ zddFeieI_i8m2=(1OLQQ!+}w@hfNtJ<$p+0H{HM+F-)3(f31`w=I5AYbuZ%8< z{nkxts~kbz+_qU0(AwyJg>(Ovt?m*8y0H=UTfD+8iKddJupkL~jQy^N4V5SQ-shSW zvdS3^+(i}G%x~67{G1amS4xG~bt2dR(+uh*BAhFzv3^68ES{v5$@A=tbI+00Q?tN6 zy+RY*UANcrCb71MUY#>K%F9uMlY=6rFpY2#@#J|^bF)#FgToQ7?!p1;{#_*>POo?K zlAq$V=kRVUj-vu=qs-HS^sIDL#N6;+UKH$x>70ew&dU<|nOl_}Bv!55C5mfRBxG)Z z(+Tw#R-+$x4;>|bOB>_b&ktAf%Vq;62aIU=u_?;tnQtV#`QY+qF&KD^z=9jm`#JKf zP!3hQJADCbT}?SdzWOU(CnC=m-K`x9V{)YyWmDYA;u>W&TAveF{bbSdT5C34B%498 zOr{*JgXHZNG^Bt11^z3HdR$9vtd-PGl#4h(_;wlT=LVb0ELTMdGOTM_lL(7=$YxJg z45xtPo|zjM_Okffo&u@1DHtrHeg98}&Y}d%G{p*Lv^ZH}+LYFd^AS%5Y;WEhGv)L| z&AX&zq1x=ew6RX&(~Tzd?VqEr&*HWON#qZ~Z+l#}A2H9e0m@n9_5S Date: Fri, 29 Jan 2021 11:11:30 +0100 Subject: [PATCH 17/46] [#775] Add ga config (#777) Fixes #775 --- docs/docusaurus.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 28e91b0b56..0d3388a598 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -12,6 +12,9 @@ module.exports = { apiKey: '768788b65303eb29ca1f195847ed1e78', indexName: 'airy', }, + googleAnalytics: { + trackingID: 'UA-74312428-5', + }, hideableSidebar: true, prism: { theme: require('prism-react-renderer/themes/github'), From 22192864e6910ccc62d5cc4cb121e8968914fdca Mon Sep 17 00:00:00 2001 From: Aitor Algorta Date: Fri, 29 Jan 2021 12:29:20 +0100 Subject: [PATCH 18/46] fixed display of messages (#779) --- .../src/airyRenderProps/AiryMessage/index.tsx | 12 +++++++----- frontend/chat-plugin/src/components/chat/index.tsx | 8 +------- lib/typescript/types/content.ts | 3 +-- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx b/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx index 56cb0c97a6..239c18e04d 100644 --- a/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx +++ b/frontend/chat-plugin/src/airyRenderProps/AiryMessage/index.tsx @@ -7,19 +7,21 @@ type AiryMessageProps = { message: { id: string; sender_type: string; - content: { - text: string; - type: string; - }[]; + content: string; delivery_state: string; sent_at: string; state: string; }; }; +interface TextMessageContext { + text: string; +} + const AiryMessage = ({message}: AiryMessageProps) => { const isInbound = message.sender_type === 'source_contact'; - const messageDisplay = linkifyString(message.content[0].text, { + const content: TextMessageContext = JSON.parse(message.content); + const messageDisplay = linkifyString(content.text, { className: `${isInbound ? styles.messageLinkRight : styles.messageLinkLeft}`, }); diff --git a/frontend/chat-plugin/src/components/chat/index.tsx b/frontend/chat-plugin/src/components/chat/index.tsx index 08015e82d0..8456477ada 100644 --- a/frontend/chat-plugin/src/components/chat/index.tsx +++ b/frontend/chat-plugin/src/components/chat/index.tsx @@ -21,12 +21,7 @@ let ws: WebSocket; const welcomeMessage = { id: '19527d24-9b47-4e18-9f79-fd1998b95059', sender_type: 'app_user', - content: [ - { - text: 'Hello! How can we help you?', - type: 'text', - }, - ], + content: JSON.stringify({text: 'Hello! How can we help you?'}), delivery_state: 'undefined', sent_at: 'undefined', state: 'delivered', @@ -80,7 +75,6 @@ const Chat = (props: Props) => { sendMessage: (text: string) => { ws.onSend({ text, - type: 'text', }); }, }; diff --git a/lib/typescript/types/content.ts b/lib/typescript/types/content.ts index 1ad4c12925..68e727ed7d 100644 --- a/lib/typescript/types/content.ts +++ b/lib/typescript/types/content.ts @@ -28,8 +28,7 @@ export interface SourceTemplate extends Content { payload: any; } -export interface Text extends Content { - type: 'text'; +export interface Text { text: string; } From 0b6e6b1208f6dba7c332833a1b78862e3f58527a Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Fri, 29 Jan 2021 16:29:45 +0100 Subject: [PATCH 19/46] [#706] Make NGrok optional (#756) --- .../deployment/prod-environment.md | 11 +- .../deployment/test-environment.md | 10 +- infrastructure/Vagrantfile | 2 +- infrastructure/airy.tpl.yaml | 104 +++++++++--------- infrastructure/cli/cmd/config/configmaps.go | 8 +- infrastructure/cli/cmd/config/parser.go | 36 +++--- .../helm-chart/charts/apps/Chart.yaml | 4 +- .../charts/airy-config/templates/api.yaml | 13 --- .../charts/airy-config/templates/sources.yaml | 19 ---- .../apps/charts/airy-config/values.yaml | 31 ------ .../charts/apps/charts/api/Chart.yaml | 5 + .../{ => api/charts}/api-admin/Chart.yaml | 2 +- .../api-admin/templates/deployment.yaml | 0 .../charts}/api-admin/templates/service.yaml | 0 .../{ => api/charts}/api-admin/values.yaml | 0 .../{ => api/charts}/api-auth/Chart.yaml | 2 +- .../api-auth/templates/deployment.yaml | 0 .../charts}/api-auth/templates/service.yaml | 0 .../{ => api/charts}/api-auth/values.yaml | 0 .../charts}/api-communication/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../api-communication/templates/service.yaml | 0 .../charts}/api-communication/values.yaml | 0 .../charts/apps/charts/api/templates/api.yaml | 13 +++ .../charts/apps/charts/api/values.yaml | 7 ++ .../charts/apps/charts/frontend/Chart.yaml | 5 + .../charts}/frontend-chat-plugin/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../templates/service.yaml | 0 .../charts}/frontend-chat-plugin/values.yaml | 0 .../charts}/frontend-demo/Chart.yaml | 2 +- .../frontend-demo/templates/deployment.yaml | 0 .../frontend-demo/templates/service.yaml | 0 .../charts}/frontend-demo/values.yaml | 0 .../apps/charts/media-resolver/Chart.yaml | 2 +- .../templates/user-storage.yaml | 2 - .../apps/charts/media-resolver/values.yaml | 7 ++ .../charts/apps/charts/sources/Chart.yaml | 5 + .../charts/chatplugin}/Chart.yaml | 4 +- .../chatplugin}/templates/deployment.yaml | 0 .../charts/chatplugin}/templates/service.yaml | 0 .../charts/chatplugin}/values.yaml | 0 .../charts/sources/charts/facebook/Chart.yaml | 5 + .../charts/facebook-connector}/Chart.yaml | 2 +- .../templates/deployment.yaml | 2 + .../templates/service.yaml | 0 .../charts/facebook-connector}/values.yaml | 0 .../charts/facebook-events-router}/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../facebook-events-router}/values.yaml | 0 .../charts/sources/charts/google/Chart.yaml | 5 + .../charts/google-connector}/Chart.yaml | 2 +- .../templates/deployment.yaml | 2 + .../google-connector}/templates/service.yaml | 0 .../charts/google-connector}/values.yaml | 0 .../charts/google-events-router}/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../charts/google-events-router}/values.yaml | 0 .../charts/sources/charts/twilio/Chart.yaml | 5 + .../charts/twilio-connector}/Chart.yaml | 2 +- .../templates/deployment.yaml | 2 + .../twilio-connector}/templates/service.yaml | 0 .../charts/twilio-connector}/values.yaml | 0 .../charts/twilio-events-router}/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../charts/twilio-events-router}/values.yaml | 0 .../charts/apps/charts/webhook/Chart.yaml | 5 + .../charts}/webhook-publisher/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../webhook-publisher/templates/service.yaml | 0 .../charts}/webhook-publisher/values.yaml | 0 .../{ => webhook}/webhook-consumer/Chart.yaml | 2 +- .../templates/deployment.yaml | 0 .../webhook-consumer/templates/service.yaml | 0 .../webhook-consumer/values.yaml | 0 .../helm-chart/charts/controller/Chart.yaml | 2 +- .../helm-chart/charts/ingress/Chart.yaml | 5 - .../charts/ingress/templates/configmap.yaml | 9 -- .../helm-chart/charts/ingress/values.yaml | 4 - .../charts/kafka/charts/kafka/Chart.yaml | 2 +- .../kafka/charts/schema-registry/Chart.yaml | 2 +- .../charts/kafka/charts/zookeeper/Chart.yaml | 2 +- .../helm-chart/charts/postgres/Chart.yaml | 2 +- .../airy-config => prerequisites}/Chart.yaml | 4 +- .../templates/kafka.yaml | 0 .../templates/postgresql.yaml | 0 .../templates/redis.yaml | 0 .../charts/prerequisites/values.yaml | 11 ++ .../helm-chart/charts/redis/Chart.yaml | 2 +- infrastructure/helm-chart/index.yaml | 13 --- .../helm-chart/templates/configmap.yaml | 10 ++ infrastructure/helm-chart/templates/core.yaml | 10 ++ .../ingress => }/templates/ingress.yaml | 30 ++++- .../helm-chart/templates/ngrok.yaml | 11 ++ infrastructure/helm-chart/values.yaml | 6 + infrastructure/index.yaml | 3 - infrastructure/scripts/provision/core.sh | 8 +- infrastructure/scripts/status.sh | 21 +++- scripts/bootstrap.sh | 8 +- 99 files changed, 283 insertions(+), 222 deletions(-) delete mode 100644 infrastructure/helm-chart/charts/apps/charts/airy-config/templates/api.yaml delete mode 100644 infrastructure/helm-chart/charts/apps/charts/airy-config/templates/sources.yaml delete mode 100644 infrastructure/helm-chart/charts/apps/charts/airy-config/values.yaml create mode 100644 infrastructure/helm-chart/charts/apps/charts/api/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-admin/Chart.yaml (87%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-admin/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-admin/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-admin/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-auth/Chart.yaml (87%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-auth/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-auth/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-auth/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-communication/Chart.yaml (88%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-communication/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-communication/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => api/charts}/api-communication/values.yaml (100%) create mode 100644 infrastructure/helm-chart/charts/apps/charts/api/templates/api.yaml create mode 100644 infrastructure/helm-chart/charts/apps/charts/api/values.yaml create mode 100644 infrastructure/helm-chart/charts/apps/charts/frontend/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-chat-plugin/Chart.yaml (89%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-chat-plugin/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-chat-plugin/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-chat-plugin/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-demo/Chart.yaml (88%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-demo/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-demo/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => frontend/charts}/frontend-demo/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{airy-config => media-resolver}/templates/user-storage.yaml (88%) create mode 100644 infrastructure/helm-chart/charts/apps/charts/sources/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{sources-chatplugin => sources/charts/chatplugin}/Chart.yaml (69%) rename infrastructure/helm-chart/charts/apps/charts/{sources-chatplugin => sources/charts/chatplugin}/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-chatplugin => sources/charts/chatplugin}/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-chatplugin => sources/charts/chatplugin}/values.yaml (100%) create mode 100644 infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-connector => sources/charts/facebook/charts/facebook-connector}/Chart.yaml (89%) rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-connector => sources/charts/facebook/charts/facebook-connector}/templates/deployment.yaml (98%) rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-connector => sources/charts/facebook/charts/facebook-connector}/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-connector => sources/charts/facebook/charts/facebook-connector}/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-events-router => sources/charts/facebook/charts/facebook-events-router}/Chart.yaml (90%) rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-events-router => sources/charts/facebook/charts/facebook-events-router}/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-facebook-events-router => sources/charts/facebook/charts/facebook-events-router}/values.yaml (100%) create mode 100644 infrastructure/helm-chart/charts/apps/charts/sources/charts/google/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{sources-google-connector => sources/charts/google/charts/google-connector}/Chart.yaml (88%) rename infrastructure/helm-chart/charts/apps/charts/{sources-google-connector => sources/charts/google/charts/google-connector}/templates/deployment.yaml (98%) rename infrastructure/helm-chart/charts/apps/charts/{sources-google-connector => sources/charts/google/charts/google-connector}/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-google-connector => sources/charts/google/charts/google-connector}/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-google-events-router => sources/charts/google/charts/google-events-router}/Chart.yaml (90%) rename infrastructure/helm-chart/charts/apps/charts/{sources-google-events-router => sources/charts/google/charts/google-events-router}/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-google-events-router => sources/charts/google/charts/google-events-router}/values.yaml (100%) create mode 100644 infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-connector => sources/charts/twilio/charts/twilio-connector}/Chart.yaml (88%) rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-connector => sources/charts/twilio/charts/twilio-connector}/templates/deployment.yaml (98%) rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-connector => sources/charts/twilio/charts/twilio-connector}/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-connector => sources/charts/twilio/charts/twilio-connector}/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-events-router => sources/charts/twilio/charts/twilio-events-router}/Chart.yaml (90%) rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-events-router => sources/charts/twilio/charts/twilio-events-router}/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{sources-twilio-events-router => sources/charts/twilio/charts/twilio-events-router}/values.yaml (100%) create mode 100644 infrastructure/helm-chart/charts/apps/charts/webhook/Chart.yaml rename infrastructure/helm-chart/charts/apps/charts/{ => webhook/charts}/webhook-publisher/Chart.yaml (88%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook/charts}/webhook-publisher/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook/charts}/webhook-publisher/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook/charts}/webhook-publisher/values.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook}/webhook-consumer/Chart.yaml (88%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook}/webhook-consumer/templates/deployment.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook}/webhook-consumer/templates/service.yaml (100%) rename infrastructure/helm-chart/charts/apps/charts/{ => webhook}/webhook-consumer/values.yaml (100%) delete mode 100644 infrastructure/helm-chart/charts/ingress/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/ingress/templates/configmap.yaml delete mode 100644 infrastructure/helm-chart/charts/ingress/values.yaml rename infrastructure/helm-chart/charts/{apps/charts/airy-config => prerequisites}/Chart.yaml (71%) rename infrastructure/helm-chart/charts/{apps/charts/airy-config => prerequisites}/templates/kafka.yaml (100%) rename infrastructure/helm-chart/charts/{apps/charts/airy-config => prerequisites}/templates/postgresql.yaml (100%) rename infrastructure/helm-chart/charts/{apps/charts/airy-config => prerequisites}/templates/redis.yaml (100%) create mode 100644 infrastructure/helm-chart/charts/prerequisites/values.yaml delete mode 100644 infrastructure/helm-chart/index.yaml create mode 100644 infrastructure/helm-chart/templates/configmap.yaml create mode 100644 infrastructure/helm-chart/templates/core.yaml rename infrastructure/helm-chart/{charts/ingress => }/templates/ingress.yaml (89%) create mode 100644 infrastructure/helm-chart/templates/ngrok.yaml delete mode 100644 infrastructure/index.yaml diff --git a/docs/docs/getting-started/deployment/prod-environment.md b/docs/docs/getting-started/deployment/prod-environment.md index 5aabeb151d..87af46f0f1 100644 --- a/docs/docs/getting-started/deployment/prod-environment.md +++ b/docs/docs/getting-started/deployment/prod-environment.md @@ -73,7 +73,7 @@ with Helm as we use this approach for test installations. The default commit interval is set to 1000 ms (1 second). This is _not_ recommended for production usage. You change the `commitInterval` to a more suitable production value in the configuration file -`infrastructure/helm-chart/charts/apps/charts/airy-config/values.yaml`. +`infrastructure/helm-chart/charts/prerequisites/values.yaml`. To deploy Kafka on Kubernetes with Helm, you can run: @@ -256,20 +256,21 @@ Ingress resources. You can choose an [Kubernetes ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) in accordance to your needs or preferences. If you are using the [Traefik](https://traefik.io/) ingress controller, you can edit the -`infrastructure/helm-chart/charts/ingress/templates/ingress.yaml` file to modify the `host` records and apply the ingress helm chart, which is already included in the repository: +`infrastructure/helm-chart/templates/ingress.yaml` file to modify the `host` records and apply the Kubernetes manifest: -```sh -helm install ingress infrastructure/helm-chart/charts/ingress/ +```bash script +kubectl apply -f infrastructure/helm-chart/templates/ingress.yaml ``` You must set appropriate `host` attributes in the rules for: - API endpoints (defaults to `api.airy`) +- Webhooks endpoints (defaults to `webhooks.airy`) - Demo (defaults to `demo.airy`) - Chat plugin (defaults to `chatplugin.airy`) If you are not using Traefik, you can use the -`infrastructure/helm-chart/charts/ingress/templates/ingress.yaml` file as a guide to create your own +`infrastructure/helm-chart/templates/ingress.yaml` file as a guide to create your own Kubernetes manifest for your preferred ingress controller. If your Kubernetes cluster is not directly reachable on the Internet, you will diff --git a/docs/docs/getting-started/deployment/test-environment.md b/docs/docs/getting-started/deployment/test-environment.md index 4c9a57d4c7..e786926798 100644 --- a/docs/docs/getting-started/deployment/test-environment.md +++ b/docs/docs/getting-started/deployment/test-environment.md @@ -136,11 +136,17 @@ If you prefer to use your own ngrok implementation or point the ngrok client to connect to the service provided by the ngrok company at `https://ngrok.io`, change the setting for `server_addr` in the ConfigMap or in this helm chart document -`infrastructure/helm-chart/charts/apps/charts/airy-config/templates/sources.yaml`. +`infrastructure/helm-chart/templates/ngrok.yaml`. + +Ngrok can be disabled during the bootstrap process, by running + +```bash +NGROK_ENABLED=false ./scripts/bootstrap.sh +``` The bootstrap process creates a random URL which is then provisioned inside the Helm chart. To configure these URLs, you can specify them in the -`infrastructure/helm-chart/charts/apps/charts/airy-config/values.yaml` document. +`infrastructure/helm-chart/values.yaml` document. Alternatively you can edit the `airy.yaml` file by setting the following parameter (see `airy.tpl.yaml` for more examples): diff --git a/infrastructure/Vagrantfile b/infrastructure/Vagrantfile index 52f9e6cea1..68087f46f3 100644 --- a/infrastructure/Vagrantfile +++ b/infrastructure/Vagrantfile @@ -17,7 +17,7 @@ Vagrant.configure("2") do |config| airy_core.vm.provision "pre-requisites", type: "shell" do |p| p.inline = "/vagrant/scripts/provision/prerequisites.sh" end - airy_core.vm.provision "core", type: "shell", env: {"AIRY_VERSION" => ENV['AIRY_VERSION']} do |c| + airy_core.vm.provision "core", type: "shell", env: {"AIRY_VERSION"=>ENV['AIRY_VERSION'], "NGROK_ENABLED"=>ENV['NGROK_ENABLED']} do |c| c.inline = "/vagrant/scripts/provision/core.sh" end airy_core.trigger.before [:halt, :reload] do |stop| diff --git a/infrastructure/airy.tpl.yaml b/infrastructure/airy.tpl.yaml index b5efdf06cf..a3e629e8e9 100644 --- a/infrastructure/airy.tpl.yaml +++ b/infrastructure/airy.tpl.yaml @@ -3,54 +3,56 @@ global: appImageTag: develop containerRegistry: ghcr.io/airyhq namespace: default -core: - apps: - # Configuration for the Kafka cluster - kafka: - brokers: "kafka-headless:9092" - schemaRegistryUrl: "http://schema-registry:8081" - commitInterval: 30000 - # Configuration for the Redis database - redis: - hostname: "redis-cluster" - port: 6379 - # Configuration for the PostgreSQL database - postgresql: - endpoint: "postgres:5432" - dbName: "admin" - username: "postgresadmin" - password: "changeme" - # Specific configurations for sources - sources: - facebook: - appId: "changeme" - appSecret: "changeme" - webhookSecret: "changeme" - google: - partnerKey: "changeme" - saFile: '{"type":"service_account","project_id":"airy","private_key_id":"no","private_key":"nokey","client_email":"no","client_id":"no","auth_uri":"no","token_uri":"no","no":"no","client_x509_cert_url":"no"}' - twilio: - authToken: "changeme" - accountSid: "changeme" - webhooks: - name: "Airy-web" - # Specific configuration for the API apps - api: - mailFrom: "changeme" - mailPort: 587 - mailUrl: "changeme" - mailUsername: "changeme" - mailPassword: "changeme" - jwtSecret: "long-random-generated-jwt-secret" - allowedOrigins: "*" - storage: - s3: - key: "changeme" - secret: "changeme" - bucket: "changeme" - region: "changeme" - path: "path" -ingress: - apiHost: api.airy - uiHost: demo.airy - chatpluginHost: chatplugin.airy + ingress: + apiHost: api.airy + webhooksHost: "webhooks.airy" + uiHost: demo.airy + chatpluginHost: chatplugin.airy +prerequisites: + # Configuration for the Kafka cluster + kafka: + brokers: "kafka-headless:9092" + schemaRegistryUrl: "http://schema-registry:8081" + commitInterval: 30000 + # Configuration for the Redis database + redis: + hostname: "redis-cluster" + port: 6379 + # Configuration for the PostgreSQL database + postgresql: + endpoint: "postgres:5432" + dbName: "admin" + username: "postgresadmin" + password: "changeme" +apps: + # Specific configurations for the API apps + api: + mailFrom: "changeme" + mailPort: 587 + mailUrl: "changeme" + mailUsername: "changeme" + mailPassword: "changeme" + jwtSecret: "long-random-generated-jwt-secret" + allowedOrigins: "*" + # Specific configurations for sources + sources: + facebook: + appId: "changeme" + appSecret: "changeme" + webhookSecret: "changeme" + google: + partnerKey: "fdas" + saFile: '{"type":"service_account","project_id":"airy","private_key_id":"no","private_key":"nokey","client_email":"no","client_id":"no","auth_uri":"no","token_uri":"no","no":"no","client_x509_cert_url":"no"}' + twilio: + authToken: "changeme" + accountSid: "changeme" + webhooks: + name: "Airy-web" + media-resolver: + storage: + s3: + key: "changeme" + secret: "changeme" + bucket: "changeme" + region: "changeme" + path: "path" diff --git a/infrastructure/cli/cmd/config/configmaps.go b/infrastructure/cli/cmd/config/configmaps.go index b5a091496e..1cab4704e0 100644 --- a/infrastructure/cli/cmd/config/configmaps.go +++ b/infrastructure/cli/cmd/config/configmaps.go @@ -43,7 +43,7 @@ func applyConfigMap(configMapName string, newCmData map[string]string, kubeConfi } func facebookApply(airyConf airyConf, kubeConfigFile string) bool { - facebookConfig := airyConf.Core.Apps.Sources.Facebook + facebookConfig := airyConf.Apps.Sources.Facebook if facebookConfig.AppID != "" || facebookConfig.AppSecret != "" || facebookConfig.WebhookSecret != "" { configMapData := make(map[string]string, 0) configMapData["FACEBOOK_APP_ID"] = facebookConfig.AppID @@ -63,7 +63,7 @@ func facebookApply(airyConf airyConf, kubeConfigFile string) bool { } func googleApply(airyConf airyConf, kubeConfigFile string) bool { - googleConfig := airyConf.Core.Apps.Sources.Google + googleConfig := airyConf.Apps.Sources.Google if googleConfig.PartnerKey != "" || googleConfig.SaFile != "" { configMapData := make(map[string]string, 0) configMapData["GOOGLE_PARTNER_KEY"] = googleConfig.PartnerKey @@ -83,7 +83,7 @@ func googleApply(airyConf airyConf, kubeConfigFile string) bool { } func twilioApply(airyConf airyConf, kubeConfigFile string) bool { - twilioConfig := airyConf.Core.Apps.Sources.Twilio + twilioConfig := airyConf.Apps.Sources.Twilio if twilioConfig.AccountSid != "" || twilioConfig.AuthToken != "" { configMapData := make(map[string]string, 0) configMapData["TWILIO_ACCOUNT_SID"] = twilioConfig.AccountSid @@ -103,7 +103,7 @@ func twilioApply(airyConf airyConf, kubeConfigFile string) bool { } func webhooksApply(airyConf airyConf, kubeConfigFile string) bool { - webhooksConfig := airyConf.Core.Apps.Webhooks + webhooksConfig := airyConf.Apps.Webhooks if webhooksConfig.Name != "" { configMapData := make(map[string]string, 0) configMapData["NAME"] = webhooksConfig.Name diff --git a/infrastructure/cli/cmd/config/parser.go b/infrastructure/cli/cmd/config/parser.go index db95a16c8b..48d9a34cda 100644 --- a/infrastructure/cli/cmd/config/parser.go +++ b/infrastructure/cli/cmd/config/parser.go @@ -14,32 +14,30 @@ type globalConf struct { Namespace string `yaml:"namespace"` } -type coreConf struct { - Apps struct { - Sources struct { - Twilio struct { - AuthToken string `yaml:"authToken"` - AccountSid string `yaml:"accountSid"` - } - Facebook struct { - AppID string `yaml:"appId"` - AppSecret string `yaml:"appSecret"` - WebhookSecret string `yaml:"webhookSecret"` - } - Google struct { - PartnerKey string `yaml:"partnerKey"` - SaFile string `yaml:"saFile"` - } +type appsConf struct { + Sources struct { + Twilio struct { + AuthToken string `yaml:"authToken"` + AccountSid string `yaml:"accountSid"` } - Webhooks struct { - Name string `yaml:"name"` + Facebook struct { + AppID string `yaml:"appId"` + AppSecret string `yaml:"appSecret"` + WebhookSecret string `yaml:"webhookSecret"` } + Google struct { + PartnerKey string `yaml:"partnerKey"` + SaFile string `yaml:"saFile"` + } + } + Webhooks struct { + Name string `yaml:"name"` } } type airyConf struct { Global globalConf - Core coreConf + Apps appsConf } func parseConf(configFile string) (airyConf, error) { diff --git a/infrastructure/helm-chart/charts/apps/Chart.yaml b/infrastructure/helm-chart/charts/apps/Chart.yaml index ae719e7310..d54d388528 100644 --- a/infrastructure/helm-chart/charts/apps/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Airy Core Platform application -name: core -version: 0.5.0 +name: apps +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/api.yaml b/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/api.yaml deleted file mode 100644 index 72473ace16..0000000000 --- a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/api.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: api-config - namespace: {{ .Values.global.namespace }} -data: - MAIL_FROM: {{ .Values.api.mailFrom }} - MAIL_PORT: "{{ .Values.api.mailPort }}" - MAIL_URL: {{ .Values.api.mailUrl }} - MAIL_USERNAME: {{ .Values.api.mailUsername }} - MAIL_PASSWORD: {{ .Values.api.mailPassword }} - JWT_SECRET: {{ randAlphaNum 128 | quote }} - ALLOWED_ORIGINS: {{ .Values.api.allowedOrigins | quote }} diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/sources.yaml b/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/sources.yaml deleted file mode 100644 index 382f90b348..0000000000 --- a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/sources.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: ngrok-client-config - namespace: {{ .Values.global.namespace }} -data: - config.yml: | - server_addr: proxy.tunnel.airy.co:4443 - trust_host_root_certs: true ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: core-config - namespace: {{ .Values.global.namespace }} -data: - APP_IMAGE_TAG: {{ .Values.global.appImageTag }} - CORE_ID: {{ randAlphaNum 10 | lower }} - CHATPLUGIN_JWT_SECRET: {{ randAlphaNum 128 | quote }} \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/values.yaml b/infrastructure/helm-chart/charts/apps/charts/airy-config/values.yaml deleted file mode 100644 index 12d4d27b07..0000000000 --- a/infrastructure/helm-chart/charts/apps/charts/airy-config/values.yaml +++ /dev/null @@ -1,31 +0,0 @@ -kafka: - brokers: "kafka-headless:9092" - schemaRegistryUrl: "http://schema-registry:8081" - commitInterval: 1000 -redis: - hostname: "redis-cluster" - port: 6379 -postgresql: - endpoint: "postgres:5432" - username: "postgresadmin" - password: "changeme" -sources: - facebook: - appId: "changeme" - appSecret: "changeme" - webhookSecret: "changeme" - google: - partnerKey: "changeme" - saFile: > - '{"type":"service_account","project_id":"airy","private_key_id":"no","private_key":"nokey","client_email":"no","client_id":"no","auth_uri":"no","token_uri":"no","no":"no","client_x509_cert_url":"no"}' - twilio: - authToken: "changeme" - accountSid: "changeme" -api: - mailFrom: "changeme" - mailPort: 587 - mailUrl: "changeme" - mailUsername: "changeme" - mailPassword: "changeme" - jwtSecret: "" - allowedOrigins: "*" diff --git a/infrastructure/helm-chart/charts/apps/charts/api/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/api/Chart.yaml new file mode 100644 index 0000000000..0330365a76 --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/api/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for the API apps in the Airy Core Platform +name: api +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/api-admin/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/Chart.yaml similarity index 87% rename from infrastructure/helm-chart/charts/apps/charts/api-admin/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/Chart.yaml index ad6c769c89..a79aa0fc0c 100644 --- a/infrastructure/helm-chart/charts/apps/charts/api-admin/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Api Admin app name: api-admin -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/api-admin/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-admin/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-admin/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-admin/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-admin/values.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-admin/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-admin/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-auth/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/Chart.yaml similarity index 87% rename from infrastructure/helm-chart/charts/apps/charts/api-auth/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/Chart.yaml index bdfae1d791..06a8066986 100644 --- a/infrastructure/helm-chart/charts/apps/charts/api-auth/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Api Auth app name: api-auth -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/api-auth/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-auth/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-auth/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-auth/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-auth/values.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-auth/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-auth/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-communication/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/Chart.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/api-communication/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/Chart.yaml index 26cf129bd1..88ffeb6e6d 100644 --- a/infrastructure/helm-chart/charts/apps/charts/api-communication/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Api Communication app name: api-communication -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/api-communication/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-communication/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-communication/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-communication/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api-communication/values.yaml b/infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/api-communication/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/api/charts/api-communication/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/api/templates/api.yaml b/infrastructure/helm-chart/charts/apps/charts/api/templates/api.yaml new file mode 100644 index 0000000000..270a1bbfdc --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/api/templates/api.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: api-config + namespace: {{ .Values.global.namespace }} +data: + MAIL_FROM: {{ .Values.mailFrom }} + MAIL_PORT: "{{ .Values.mailPort }}" + MAIL_URL: {{ .Values.mailUrl }} + MAIL_USERNAME: {{ .Values.mailUsername }} + MAIL_PASSWORD: {{ .Values.mailPassword }} + JWT_SECRET: {{ randAlphaNum 128 | quote }} + ALLOWED_ORIGINS: {{ .Values.allowedOrigins | quote }} diff --git a/infrastructure/helm-chart/charts/apps/charts/api/values.yaml b/infrastructure/helm-chart/charts/apps/charts/api/values.yaml new file mode 100644 index 0000000000..330fecbcff --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/api/values.yaml @@ -0,0 +1,7 @@ +mailFrom: "changeme" +mailPort: 587 +mailUrl: "changeme" +mailUsername: "changeme" +mailPassword: "changeme" +jwtSecret: "" +allowedOrigins: "*" diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/Chart.yaml new file mode 100644 index 0000000000..0df1395122 --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/frontend/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for the frontend apps in the Airy Core Platform +name: frontend +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/Chart.yaml similarity index 89% rename from infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/Chart.yaml index f5ccfc2fc5..75cea9ef3b 100644 --- a/infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Frontend chat plugin script name: frontend-chat-plugin -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/values.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/frontend-chat-plugin/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-chat-plugin/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-demo/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/Chart.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/frontend-demo/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/Chart.yaml index 4d2e091efe..544373e3b9 100644 --- a/infrastructure/helm-chart/charts/apps/charts/frontend-demo/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Frontend Demo app name: frontend-demo -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-demo/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/frontend-demo/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-demo/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/frontend-demo/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/frontend-demo/values.yaml b/infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/frontend-demo/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/frontend/charts/frontend-demo/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/media-resolver/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/media-resolver/Chart.yaml index 8e8e7a0e37..738387af05 100644 --- a/infrastructure/helm-chart/charts/apps/charts/media-resolver/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/media-resolver/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Media Resolver app name: media-resolver -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/user-storage.yaml b/infrastructure/helm-chart/charts/apps/charts/media-resolver/templates/user-storage.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/airy-config/templates/user-storage.yaml rename to infrastructure/helm-chart/charts/apps/charts/media-resolver/templates/user-storage.yaml index e1197a5d02..10c2174377 100644 --- a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/user-storage.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/media-resolver/templates/user-storage.yaml @@ -4,11 +4,9 @@ kind: ConfigMap metadata: name: user-storage data: - {{- if .Values.storage.s3 -}} STORAGE_S3_KEY: {{ .Values.storage.s3.key }} STORAGE_S3_SECRET: "{{ .Values.storage.s3.secret }}" STORAGE_S3_BUCKET: {{ .Values.storage.s3.bucket }} STORAGE_S3_REGION: {{ .Values.storage.s3.region }} STORAGE_S3_PATH: {{ .Values.storage.s3.path }} - {{- end -}} {{ end }} diff --git a/infrastructure/helm-chart/charts/apps/charts/media-resolver/values.yaml b/infrastructure/helm-chart/charts/apps/charts/media-resolver/values.yaml index 6a2b9ac149..535200d921 100644 --- a/infrastructure/helm-chart/charts/apps/charts/media-resolver/values.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/media-resolver/values.yaml @@ -1 +1,8 @@ image: media/resolver +storage: + s3: + key: "changeme" + secret: "changeme" + bucket: "changeme" + region: "changeme" + path: "path" diff --git a/infrastructure/helm-chart/charts/apps/charts/sources/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/Chart.yaml new file mode 100644 index 0000000000..c9450be66c --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/sources/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for the sources apps Airy Core Platform +name: sources +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/Chart.yaml similarity index 69% rename from infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/Chart.yaml index cdf6703209..c9d8865873 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Sources Chatplugin app -name: sources-chatplugin -version: 0.1.0 \ No newline at end of file +name: chatplugin +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-chatplugin/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/chatplugin/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/Chart.yaml new file mode 100644 index 0000000000..239f904dcd --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Facebook source +name: facebook +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/Chart.yaml similarity index 89% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/Chart.yaml index 4bcabada80..d5877e85de 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Facebook Connector app name: sources-facebook-connector -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/templates/deployment.yaml similarity index 98% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/templates/deployment.yaml index 7d551079b0..2b008e90f3 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/templates/deployment.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/templates/deployment.yaml @@ -72,6 +72,7 @@ spec: - name: Health-Check value: health-check initialDelaySeconds: 60 +{{ if .Values.global.ngrokEnabled }} - name: ngrok command: - /bin/bash @@ -96,3 +97,4 @@ spec: - name: ngrok-client-config configMap: name: ngrok-client-config +{{ end }} diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-connector/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-connector/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/Chart.yaml similarity index 90% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/Chart.yaml index 4101230d29..dee5eb654a 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Sources Facebook Events Router app name: sources-facebook-events-router -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-facebook-events-router/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/facebook/charts/facebook-events-router/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/Chart.yaml new file mode 100644 index 0000000000..917d16d1bf --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Google source +name: google +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-connector/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/Chart.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-connector/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/Chart.yaml index 0dc992ed6d..bf7c54fab6 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-google-connector/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: '1.0' description: A Helm chart for the Google Connector name: sources-google-connector -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-connector/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/templates/deployment.yaml similarity index 98% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-connector/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/templates/deployment.yaml index c92caaee2a..1bba6ed8fc 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-google-connector/templates/deployment.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/templates/deployment.yaml @@ -65,6 +65,7 @@ spec: - name: Health-Check value: health-check initialDelaySeconds: 60 +{{ if .Values.global.ngrokEnabled }} - name: ngrok command: - /bin/bash @@ -89,3 +90,4 @@ spec: - name: ngrok-client-config configMap: name: ngrok-client-config +{{ end }} diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-connector/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-connector/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-connector/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-connector/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-connector/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/Chart.yaml similarity index 90% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/Chart.yaml index 0f5edcbb09..db60bfa5a1 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Sources Google Events Router app name: sources-google-events-router -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-google-events-router/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/google/charts/google-events-router/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/Chart.yaml new file mode 100644 index 0000000000..2666d4ab00 --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for the Twilio source +name: twilio +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/Chart.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/Chart.yaml index aa1f4c53c0..18a2f56479 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Twilio Connector name: sources-twilio-connector -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/templates/deployment.yaml similarity index 98% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/templates/deployment.yaml index dfddbfa752..94a8b4d1c3 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/templates/deployment.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/templates/deployment.yaml @@ -65,6 +65,7 @@ spec: - name: Health-Check value: health-check initialDelaySeconds: 60 +{{ if .Values.global.ngrokEnabled }} - name: ngrok command: - /bin/bash @@ -89,3 +90,4 @@ spec: - name: ngrok-client-config configMap: name: ngrok-client-config +{{ end }} \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-connector/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-connector/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/Chart.yaml similarity index 90% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/Chart.yaml index 6027f985d5..5ebfe66da0 100644 --- a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Sources Twilio Events Router app name: sources-twilio-events-router -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/values.yaml b/infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/sources-twilio-events-router/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/sources/charts/twilio/charts/twilio-events-router/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/Chart.yaml new file mode 100644 index 0000000000..0f4ef6fda9 --- /dev/null +++ b/infrastructure/helm-chart/charts/apps/charts/webhook/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for the webhook apps in the Airy Core Platform +name: webhook +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-publisher/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/Chart.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/webhook-publisher/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/Chart.yaml index a124b71c7b..71d1a3a335 100644 --- a/infrastructure/helm-chart/charts/apps/charts/webhook-publisher/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Webhook Publisher app name: webhook-publisher -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-publisher/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/webhook-publisher/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-publisher/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/webhook-publisher/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-publisher/values.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/webhook-publisher/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/charts/webhook-publisher/values.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-consumer/Chart.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/Chart.yaml similarity index 88% rename from infrastructure/helm-chart/charts/apps/charts/webhook-consumer/Chart.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/Chart.yaml index 4539e68aac..5d824dfcc1 100644 --- a/infrastructure/helm-chart/charts/apps/charts/webhook-consumer/Chart.yaml +++ b/infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the Webhook Consumer app name: webhook-consumer -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-consumer/templates/deployment.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/templates/deployment.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/webhook-consumer/templates/deployment.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/templates/deployment.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-consumer/templates/service.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/templates/service.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/webhook-consumer/templates/service.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/templates/service.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/webhook-consumer/values.yaml b/infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/values.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/webhook-consumer/values.yaml rename to infrastructure/helm-chart/charts/apps/charts/webhook/webhook-consumer/values.yaml diff --git a/infrastructure/helm-chart/charts/controller/Chart.yaml b/infrastructure/helm-chart/charts/controller/Chart.yaml index 8b64198d30..e0e217965a 100644 --- a/infrastructure/helm-chart/charts/controller/Chart.yaml +++ b/infrastructure/helm-chart/charts/controller/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for Airy Platform Kubernetes controller name: controller -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/ingress/Chart.yaml b/infrastructure/helm-chart/charts/ingress/Chart.yaml deleted file mode 100644 index 01e96eb5fc..0000000000 --- a/infrastructure/helm-chart/charts/ingress/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v1 -appVersion: "1.0" -description: A Helm chart for the Traefik ingress controller -name: ingress -version: 0.1.0 diff --git a/infrastructure/helm-chart/charts/ingress/templates/configmap.yaml b/infrastructure/helm-chart/charts/ingress/templates/configmap.yaml deleted file mode 100644 index 297ad1c5b9..0000000000 --- a/infrastructure/helm-chart/charts/ingress/templates/configmap.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: hostnames - namespace: {{ .Values.global.namespace }} -data: - API_HOST: {{ .Values.apiHost }} - UI_HOST: {{ .Values.uiHost }} - CHATPLUGIN_HOST: {{ .Values.chatpluginHost }} diff --git a/infrastructure/helm-chart/charts/ingress/values.yaml b/infrastructure/helm-chart/charts/ingress/values.yaml deleted file mode 100644 index 7dce025b09..0000000000 --- a/infrastructure/helm-chart/charts/ingress/values.yaml +++ /dev/null @@ -1,4 +0,0 @@ - -apiHost: "api.airy" -uiHost: "demo.airy" -chatpluginHost: "chatplugin.airy" diff --git a/infrastructure/helm-chart/charts/kafka/charts/kafka/Chart.yaml b/infrastructure/helm-chart/charts/kafka/charts/kafka/Chart.yaml index 97dd0664b3..093b81b4fe 100644 --- a/infrastructure/helm-chart/charts/kafka/charts/kafka/Chart.yaml +++ b/infrastructure/helm-chart/charts/kafka/charts/kafka/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for Confluent Kafka on Kubernetes name: kafka -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/kafka/charts/schema-registry/Chart.yaml b/infrastructure/helm-chart/charts/kafka/charts/schema-registry/Chart.yaml index 2ddf7ccb6a..be82a65013 100644 --- a/infrastructure/helm-chart/charts/kafka/charts/schema-registry/Chart.yaml +++ b/infrastructure/helm-chart/charts/kafka/charts/schema-registry/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for the karapace.io Schema Registry on Kubernetes name: schema-registry -version: 0.1.0 +version: 1.0 diff --git a/infrastructure/helm-chart/charts/kafka/charts/zookeeper/Chart.yaml b/infrastructure/helm-chart/charts/kafka/charts/zookeeper/Chart.yaml index 5915fe249d..ffb82edc1f 100644 --- a/infrastructure/helm-chart/charts/kafka/charts/zookeeper/Chart.yaml +++ b/infrastructure/helm-chart/charts/kafka/charts/zookeeper/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for Confluent Zookeeper on Kubernetes name: zookeeper -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/postgres/Chart.yaml b/infrastructure/helm-chart/charts/postgres/Chart.yaml index 500a914cc5..1e26d754af 100644 --- a/infrastructure/helm-chart/charts/postgres/Chart.yaml +++ b/infrastructure/helm-chart/charts/postgres/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for Postgres name: postgres -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/Chart.yaml b/infrastructure/helm-chart/charts/prerequisites/Chart.yaml similarity index 71% rename from infrastructure/helm-chart/charts/apps/charts/airy-config/Chart.yaml rename to infrastructure/helm-chart/charts/prerequisites/Chart.yaml index 3faa690239..2407afb22e 100644 --- a/infrastructure/helm-chart/charts/apps/charts/airy-config/Chart.yaml +++ b/infrastructure/helm-chart/charts/prerequisites/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for Airy configuration -name: apps -version: 0.1.0 +name: prerequisites +version: 1.0 diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/kafka.yaml b/infrastructure/helm-chart/charts/prerequisites/templates/kafka.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/airy-config/templates/kafka.yaml rename to infrastructure/helm-chart/charts/prerequisites/templates/kafka.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/postgresql.yaml b/infrastructure/helm-chart/charts/prerequisites/templates/postgresql.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/airy-config/templates/postgresql.yaml rename to infrastructure/helm-chart/charts/prerequisites/templates/postgresql.yaml diff --git a/infrastructure/helm-chart/charts/apps/charts/airy-config/templates/redis.yaml b/infrastructure/helm-chart/charts/prerequisites/templates/redis.yaml similarity index 100% rename from infrastructure/helm-chart/charts/apps/charts/airy-config/templates/redis.yaml rename to infrastructure/helm-chart/charts/prerequisites/templates/redis.yaml diff --git a/infrastructure/helm-chart/charts/prerequisites/values.yaml b/infrastructure/helm-chart/charts/prerequisites/values.yaml new file mode 100644 index 0000000000..7207b3eec5 --- /dev/null +++ b/infrastructure/helm-chart/charts/prerequisites/values.yaml @@ -0,0 +1,11 @@ +kafka: + brokers: "kafka-headless:9092" + schemaRegistryUrl: "http://schema-registry:8081" + commitInterval: 1000 +redis: + hostname: "redis-cluster" + port: 6379 +postgresql: + endpoint: "postgres:5432" + username: "postgresadmin" + password: "changeme" diff --git a/infrastructure/helm-chart/charts/redis/Chart.yaml b/infrastructure/helm-chart/charts/redis/Chart.yaml index cc084c6edc..5e07ff4c78 100644 --- a/infrastructure/helm-chart/charts/redis/Chart.yaml +++ b/infrastructure/helm-chart/charts/redis/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 appVersion: "1.0" description: A Helm chart for Redis name: redis -version: 0.1.0 \ No newline at end of file +version: 1.0 \ No newline at end of file diff --git a/infrastructure/helm-chart/index.yaml b/infrastructure/helm-chart/index.yaml deleted file mode 100644 index a869c8299a..0000000000 --- a/infrastructure/helm-chart/index.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -entries: - helm-charts: - - apiVersion: v1 - appVersion: "1.0" - created: "2020-10-13T16:53:28.361356+02:00" - description: A Helm chart for the Airy Core Platform - digest: 80af25ce350f4da8d1ad9ad8f779de7717052d5e9bb0e216c208c20a29cb5dd2 - name: helm-charts - urls: - - https://airyhq.github.io/helm-charts/helm-charts-0.5.0.tgz - version: 0.5.0 -generated: "2020-10-13T16:53:28.323165+02:00" diff --git a/infrastructure/helm-chart/templates/configmap.yaml b/infrastructure/helm-chart/templates/configmap.yaml new file mode 100644 index 0000000000..1d37a41a9e --- /dev/null +++ b/infrastructure/helm-chart/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: hostnames + namespace: {{ .Values.global.namespace }} +data: + API_HOST: {{ .Values.global.ingress.apiHost }} + WEBHOOKS_HOST: {{ .Values.global.ingress.webhooksHost }} + UI_HOST: {{ .Values.global.ingress.uiHost }} + CHATPLUGIN_HOST: {{ .Values.global.ingress.chatpluginHost }} diff --git a/infrastructure/helm-chart/templates/core.yaml b/infrastructure/helm-chart/templates/core.yaml new file mode 100644 index 0000000000..104f55c75a --- /dev/null +++ b/infrastructure/helm-chart/templates/core.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: core-config + namespace: {{ .Values.global.namespace }} +data: + APP_IMAGE_TAG: {{ .Values.global.appImageTag }} + CORE_ID: {{ randAlphaNum 10 | lower }} + CHATPLUGIN_JWT_SECRET: {{ randAlphaNum 128 | quote }} + NGROK_ENABLED: "{{ .Values.global.ngrokEnabled }}" diff --git a/infrastructure/helm-chart/charts/ingress/templates/ingress.yaml b/infrastructure/helm-chart/templates/ingress.yaml similarity index 89% rename from infrastructure/helm-chart/charts/ingress/templates/ingress.yaml rename to infrastructure/helm-chart/templates/ingress.yaml index d3b25ac926..6ba0305087 100644 --- a/infrastructure/helm-chart/charts/ingress/templates/ingress.yaml +++ b/infrastructure/helm-chart/templates/ingress.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Values.global.namespace }} spec: rules: - - host: {{ .Values.apiHost }} + - host: {{ .Values.global.ingress.apiHost }} http: paths: - path: /users.login @@ -218,7 +218,31 @@ spec: name: sources-twilio-connector port: number: 80 - - host: {{ .Values.uiHost }} + - host: {{ .Values.global.ingress.webhooksHost }} + http: + paths: + - path: /facebook + pathType: Prefix + backend: + service: + name: sources-facebook-connector + port: + number: 80 + - path: /google + pathType: Prefix + backend: + service: + name: sources-google-connector + port: + number: 80 + - path: /twilio + pathType: Prefix + backend: + service: + name: sources-twilio-connector + port: + number: 80 + - host: {{ .Values.global.ingress.uiHost }} http: paths: - path: / @@ -228,7 +252,7 @@ spec: name: frontend-demo port: number: 80 - - host: {{ .Values.chatpluginHost }} + - host: {{ .Values.global.ingress.chatpluginHost }} http: paths: - path: /ws.chatplugin diff --git a/infrastructure/helm-chart/templates/ngrok.yaml b/infrastructure/helm-chart/templates/ngrok.yaml new file mode 100644 index 0000000000..522f9c44c6 --- /dev/null +++ b/infrastructure/helm-chart/templates/ngrok.yaml @@ -0,0 +1,11 @@ +{{ if .Values.global.ngrokEnabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: ngrok-client-config + namespace: {{ .Values.global.namespace }} +data: + config.yml: | + server_addr: proxy.tunnel.airy.co:4443 + trust_host_root_certs: true +{{ end }} \ No newline at end of file diff --git a/infrastructure/helm-chart/values.yaml b/infrastructure/helm-chart/values.yaml index 7f1b4a3cd0..af142b8423 100644 --- a/infrastructure/helm-chart/values.yaml +++ b/infrastructure/helm-chart/values.yaml @@ -2,3 +2,9 @@ global: appImageTag: latest containerRegistry: ghcr.io/airyhq namespace: default + ngrokEnabled: false + ingress: + apiHost: "api.airy" + webhooksHost: "webhooks.airy" + uiHost: "demo.airy" + chatpluginHost: "chatplugin.airy" diff --git a/infrastructure/index.yaml b/infrastructure/index.yaml deleted file mode 100644 index 5e47efa24b..0000000000 --- a/infrastructure/index.yaml +++ /dev/null @@ -1,3 +0,0 @@ -apiVersion: v1 -entries: {} -generated: "2020-11-17T09:35:25.962583358Z" diff --git a/infrastructure/scripts/provision/core.sh b/infrastructure/scripts/provision/core.sh index 6a64859f18..d9b8ddeb5c 100755 --- a/infrastructure/scripts/provision/core.sh +++ b/infrastructure/scripts/provision/core.sh @@ -2,7 +2,6 @@ set -euo pipefail IFS=$'\n\t' -AIRY_VERSION=${AIRY_VERSION} SCRIPT_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P) INFRASTRUCTURE_PATH=$(cd ${SCRIPT_PATH}/../../; pwd -P) @@ -12,20 +11,19 @@ source ${INFRASTRUCTURE_PATH}/scripts/lib/k8s.sh cd ${INFRASTRUCTURE_PATH}/scripts/ wait-for-service-account - echo "Deploying the Airy Core Platform with the ${AIRY_VERSION} image tag" if [[ -f ${INFRASTRUCTURE_PATH}/airy.yaml ]]; then yq eval '.global.appImageTag="'${AIRY_VERSION}'"' -i ${INFRASTRUCTURE_PATH}/airy.yaml - helm install core ${INFRASTRUCTURE_PATH}/helm-chart/ --values ${INFRASTRUCTURE_PATH}/airy.yaml --timeout 1000s > /dev/null 2>&1 - wget -qnv https://airy-core-binaries.s3.amazonaws.com/alpine/airy.gz + helm install core ${INFRASTRUCTURE_PATH}/helm-chart/ --values ${INFRASTRUCTURE_PATH}/airy.yaml --set global.ngrokEnabled=${NGROK_ENABLED} --timeout 1000s > /dev/null 2>&1 + wget -qnv https://airy-core-binaries.s3.amazonaws.com/${AIRY_VERSION}/alpine/amd64/airy.gz gunzip airy.gz chmod +x airy mv airy /usr/local/bin/ airy init airy config apply --kube-config /etc/rancher/k3s/k3s.yaml --config ${INFRASTRUCTURE_PATH}/airy.yaml else - helm install core ${INFRASTRUCTURE_PATH}/helm-chart/ --set global.appImageTag=${AIRY_VERSION} --timeout 1000s > /dev/null 2>&1 + helm install core ${INFRASTRUCTURE_PATH}/helm-chart/ --set global.appImageTag=${AIRY_VERSION} --set global.ngrokEnabled=${NGROK_ENABLED} --timeout 1000s > /dev/null 2>&1 fi kubectl run startup-helper --image busybox --command -- /bin/sh -c "tail -f /dev/null" diff --git a/infrastructure/scripts/status.sh b/infrastructure/scripts/status.sh index 7b743dd9a9..1edff87219 100755 --- a/infrastructure/scripts/status.sh +++ b/infrastructure/scripts/status.sh @@ -16,19 +16,28 @@ wait-for-service startup-helper api-auth 80 10 api-auth CORE_ID=$(kubectl get configmap core-config -o jsonpath='{.data.CORE_ID}') API_HOSTNAME=$(kubectl get ingress airy-core -o jsonpath='{.spec.rules[0].host}') -FACEBOOK_WEBHOOK_PUBLIC_URL="https://fb-${CORE_ID}.tunnel.airy.co" -GOOGLE_WEBHOOK_PUBLIC_URL="https://gl-${CORE_ID}.tunnel.airy.co" -TWILIO_WEBHOOK_PUBLIC_URL="https://tw-${CORE_ID}.tunnel.airy.co" +NGROK_ENABLED=$(kubectl get configmap core-config -o jsonpath='{.data.NGROK_ENABLED}') + +if [ ${NGROK_ENABLED} = "true" ]; then + FACEBOOK_WEBHOOK_PUBLIC_URL="https://fb-${CORE_ID}.tunnel.airy.co/facebook" + GOOGLE_WEBHOOK_PUBLIC_URL="https://gl-${CORE_ID}.tunnel.airy.co/google" + TWILIO_WEBHOOK_PUBLIC_URL="https://tw-${CORE_ID}.tunnel.airy.co" +else + WEBHOOKS_HOSTNAME=$(kubectl get configmap hostnames -o jsonpath='{.data.WEBHOOKS_HOST}') + FACEBOOK_WEBHOOK_PUBLIC_URL="https://${WEBHOOKS_HOSTNAME}/facebook" + GOOGLE_WEBHOOK_PUBLIC_URL="https://${WEBHOOKS_HOSTNAME}/google" + TWILIO_WEBHOOK_PUBLIC_URL="https://${WEBHOOKS_HOSTNAME}/twilio" +fi echo echo "Your public url for the Facebook Webhook is:" -echo ${FACEBOOK_WEBHOOK_PUBLIC_URL}/facebook +echo ${FACEBOOK_WEBHOOK_PUBLIC_URL} echo echo "Your public url for the Google Webhook is:" -echo ${GOOGLE_WEBHOOK_PUBLIC_URL}/google +echo ${GOOGLE_WEBHOOK_PUBLIC_URL} echo echo "Your public url for the Twilio Webhook is:" -echo ${TWILIO_WEBHOOK_PUBLIC_URL}/twilio +echo ${TWILIO_WEBHOOK_PUBLIC_URL} echo echo "You can access the API of the Airy Core Platform at:" echo "http://${API_HOSTNAME}" diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index 2f0b1625b8..884eddaffa 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -139,7 +139,13 @@ if [ -z ${AIRY_VERSION+x} ]; then esac fi -AIRY_VERSION=${AIRY_VERSION} vagrant up +if [[ ${NGROK_ENABLED} != "false" ]]; then + NGROK_ENABLED="true" +fi + +echo ngrok: ${NGROK_ENABLED} + +AIRY_VERSION=${AIRY_VERSION} NGROK_ENABLED=${NGROK_ENABLED} vagrant up mkdir -p ~/.airy cd $infra_path From 338334362fb9b667183b14c7cf5e5caafcef38b6 Mon Sep 17 00:00:00 2001 From: Aitor Algorta Date: Fri, 29 Jan 2021 16:55:22 +0100 Subject: [PATCH 20/46] [#403] Filter for conversations (#744) * ui filter is working * Filter working * linting * remove RootState, use StateModel * fix suggestions * remove any types * fix bazel errors * change key * remove config --- .../airyRenderProps/AiryInputBar/index.tsx | 6 +- .../demo/src/actions/conversations/index.ts | 3 +- .../src/actions/conversationsFilter/index.ts | 105 +++++++++ frontend/demo/src/actions/index.ts | 1 + .../assets/images/icons/checkmark-circle.svg | 3 + .../src/assets/images/icons/checkmark.svg | 13 ++ .../src/assets/images/icons/chevron_left.svg | 3 + .../demo/src/components/ColorSelector.tsx | 4 +- .../index.module.scss} | 0 .../{Dialog.tsx => Dialog/index.tsx} | 2 +- .../DialogCustomizable/index.module.scss | 22 ++ .../components/DialogCustomizable/index.tsx | 51 +++++ .../components/ResizableWindowList/index.tsx | 4 +- .../SimpleIconChannel/index.module.scss | 15 ++ .../components/SimpleIconChannel/index.tsx | 42 ++++ frontend/demo/src/components/Tag/index.tsx | 22 +- frontend/demo/src/components/TopBar/index.tsx | 2 +- frontend/demo/src/index.tsx | 2 +- frontend/demo/src/pages/Channels/index.tsx | 2 +- .../pages/Inbox/ConversationList/index.tsx | 40 +++- .../ConversationListHeader/index.module.scss | 76 +++++++ .../Inbox/ConversationListHeader/index.tsx | 88 +++++++- .../ConversationsFilter/Popup.module.scss | 203 ++++++++++++++++++ .../pages/Inbox/ConversationsFilter/Popup.tsx | 200 +++++++++++++++++ .../ConversationsFilter/index.module.scss | 93 ++++++++ .../pages/Inbox/ConversationsFilter/index.tsx | 160 ++++++++++++++ frontend/demo/src/pages/Login/index.tsx | 2 +- .../demo/src/pages/Tags/SimpleTagForm.tsx | 10 +- frontend/demo/src/pages/Tags/TableRow.tsx | 4 +- frontend/demo/src/pages/Tags/index.tsx | 4 +- .../src/reducers/data/conversations/index.ts | 73 ++++++- .../demo/src/reducers/data/messages/index.ts | 2 +- .../demo/src/reducers/data/settings/index.ts | 2 +- frontend/demo/src/reducers/index.ts | 2 - frontend/demo/src/selectors/conversations.ts | 8 +- frontend/demo/src/selectors/tags.ts | 6 +- lib/typescript/httpclient/model/Channel.ts | 1 + .../httpclient/model/ConversationFilter.ts | 9 + lib/typescript/httpclient/model/index.ts | 1 + .../ListConversationsRequestPayload.ts | 1 + 40 files changed, 1228 insertions(+), 59 deletions(-) create mode 100644 frontend/demo/src/actions/conversationsFilter/index.ts create mode 100644 frontend/demo/src/assets/images/icons/checkmark-circle.svg create mode 100644 frontend/demo/src/assets/images/icons/checkmark.svg create mode 100644 frontend/demo/src/assets/images/icons/chevron_left.svg rename frontend/demo/src/components/{Dialog.module.scss => Dialog/index.module.scss} (100%) rename frontend/demo/src/components/{Dialog.tsx => Dialog/index.tsx} (96%) create mode 100644 frontend/demo/src/components/DialogCustomizable/index.module.scss create mode 100644 frontend/demo/src/components/DialogCustomizable/index.tsx create mode 100644 frontend/demo/src/components/SimpleIconChannel/index.module.scss create mode 100644 frontend/demo/src/components/SimpleIconChannel/index.tsx create mode 100644 frontend/demo/src/pages/Inbox/ConversationsFilter/Popup.module.scss create mode 100644 frontend/demo/src/pages/Inbox/ConversationsFilter/Popup.tsx create mode 100644 frontend/demo/src/pages/Inbox/ConversationsFilter/index.module.scss create mode 100644 frontend/demo/src/pages/Inbox/ConversationsFilter/index.tsx create mode 100644 lib/typescript/httpclient/model/ConversationFilter.ts diff --git a/frontend/chat-plugin/src/airyRenderProps/AiryInputBar/index.tsx b/frontend/chat-plugin/src/airyRenderProps/AiryInputBar/index.tsx index 66346b050f..4ce6e9a87b 100644 --- a/frontend/chat-plugin/src/airyRenderProps/AiryInputBar/index.tsx +++ b/frontend/chat-plugin/src/airyRenderProps/AiryInputBar/index.tsx @@ -20,7 +20,7 @@ const AiryInputBar = (props: Props) => { } }; - const onSubmit = (e: any) => { + const onSubmit = e => { e.preventDefault(); if (messageString.length) { setMessageString(''); @@ -28,7 +28,7 @@ const AiryInputBar = (props: Props) => { } }; - const handleInputAndChange = (e: any) => { + const handleInputAndChange = e => { const localValue = e.target.value; setMessageString(localValue); }; @@ -56,7 +56,7 @@ const AiryInputBar = (props: Props) => { }; return ( -
onSubmit(e)}> + onSubmit(e)}>