You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2021/03/12 13:38:01 UTC

[camel-kamelets] 01/02: Add kamelets from developer guide

This is an automated email from the ASF dual-hosted git repository.

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git

commit eaaa703bada30d4cb7b21795024fb6c18bfea833
Author: nicolaferraro <ni...@gmail.com>
AuthorDate: Fri Mar 12 11:48:03 2021 +0100

    Add kamelets from developer guide
---
 .../assets/images/kamelets/earthquake-source.svg   |  1 +
 .../ROOT/assets/images/kamelets/telegram-sink.svg  |  1 +
 .../images/kamelets/twitter-search-source.svg      |  6 ++
 docs/modules/ROOT/nav.adoc                         |  3 +
 docs/modules/ROOT/pages/earthquake-source.adoc     | 59 +++++++++++++
 docs/modules/ROOT/pages/telegram-sink.adoc         | 74 ++++++++++++++++
 docs/modules/ROOT/pages/twitter-search-source.adoc | 71 ++++++++++++++++
 earthquake-source.kamelet.yaml                     | 81 ++++++++++++++++++
 telegram-sink.kamelet.yaml                         | 99 ++++++++++++++++++++++
 telegram-source.kamelet.yaml                       |  1 +
 twitter-search.kamelet.yaml                        | 75 ++++++++++++++++
 11 files changed, 471 insertions(+)

diff --git a/docs/modules/ROOT/assets/images/kamelets/earthquake-source.svg b/docs/modules/ROOT/assets/images/kamelets/earthquake-source.svg
new file mode 100644
index 0000000..db8c041
--- /dev/null
+++ b/docs/modules/ROOT/assets/images/kamelets/earthquake-source.svg
@@ -0,0 +1 @@
+<svg height='100px' width='100px'  fill="#000000" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100.003 79.997" enable-background="new 0 0 100.003 79.997" xml:space="preserve"><path d="M81.653,42.94c-1.387,0-2.666,0.767-3.315,1.992L72.942,55.1l-6.649-19.479c-0.508-1.472-1.865-2.48-3.423-2.534  c-1.602-0.046-2.983,0.859-3.589,2.292l-4.561,10.834l-7.2-43.128c-0.33-1.812-2.029-3.188-3.77-3.079  c-1.843,0.042-3.384,1. [...]
\ No newline at end of file
diff --git a/docs/modules/ROOT/assets/images/kamelets/telegram-sink.svg b/docs/modules/ROOT/assets/images/kamelets/telegram-sink.svg
new file mode 100644
index 0000000..080818f
--- /dev/null
+++ b/docs/modules/ROOT/assets/images/kamelets/telegram-sink.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"><defs><linearGradient id="a" x1=".667" x2=".417" y1=".167" y2=".75"><stop offset="0" stop-color="#37aee2"/><stop offset="1" stop-color="#1e96c8"/></linearGradient><linearGradient id="b" x1=".66" x2=".851" y1=".437" y2=".802"><stop offset="0" stop-color="#eff7fc"/><stop offset="1" stop-color="#fff"/></linearGradient></defs><circle cx="120" cy="120" r="120" fill="url(#a)"/><path fill="#c8daea" d="M98 175c-3.888 0-3.227-1.468-4.5 [...]
\ No newline at end of file
diff --git a/docs/modules/ROOT/assets/images/kamelets/twitter-search-source.svg b/docs/modules/ROOT/assets/images/kamelets/twitter-search-source.svg
new file mode 100644
index 0000000..c0364cc
--- /dev/null
+++ b/docs/modules/ROOT/assets/images/kamelets/twitter-search-source.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="256px" height="209px" viewBox="0 0 256 209" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
+    <g>
+        <path d="M256,25.4500259 C246.580841,29.6272672 236.458451,32.4504868 225.834156,33.7202333 C236.678503,27.2198053 245.00583,16.9269929 248.927437,4.66307685 C238.779765,10.6812633 227.539325,15.0523376 215.57599,17.408298 C205.994835,7.2006971 192.34506,0.822 177.239197,0.822 C148.232605,0.822 124.716076,24.3375931 124.716076,53.3423116 C124.716076,57.4586875 125.181462,61.4673784 126.076652,65.3112644 C82.4258385,63.1210453 43.7257252,42.211429 17.821398,10.4359288 C13.3005011, [...]
+    </g>
+</svg>
\ No newline at end of file
diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc
index ac6d265..3aee334 100644
--- a/docs/modules/ROOT/nav.adoc
+++ b/docs/modules/ROOT/nav.adoc
@@ -3,6 +3,7 @@
 * xref:ROOT:aws-s3-source.adoc[image:kamelets/aws-s3-source.svg[] AWS S3 Source]
 * xref:ROOT:aws-sqs-source.adoc[image:kamelets/aws-sqs-source.svg[] AWS SQS Source]
 * xref:ROOT:bitcoin-source.adoc[image:kamelets/bitcoin-source.svg[] Bitcoin Source]
+* xref:ROOT:earthquake-source.adoc[image:kamelets/earthquake-source.svg[] Earthquake Source]
 * xref:ROOT:ftp-source.adoc[image:kamelets/ftp-source.svg[] FTP Source]
 * xref:ROOT:ftps-source.adoc[image:kamelets/ftps-source.svg[] FTPS Source]
 * xref:ROOT:google-calendar-source.adoc[image:kamelets/google-calendar-source.svg[] Google Calendar Source]
@@ -19,7 +20,9 @@
 * xref:ROOT:salesforce-source.adoc[image:kamelets/salesforce-source.svg[] Salesforce Source]
 * xref:ROOT:sftp-source.adoc[image:kamelets/sftp-source.svg[] SFTP Source]
 * xref:ROOT:slack-source.adoc[image:kamelets/slack-source.svg[] Slack Source]
+* xref:ROOT:telegram-sink.adoc[image:kamelets/telegram-sink.svg[] Telegram Sink]
 * xref:ROOT:telegram-source.adoc[image:kamelets/telegram-source.svg[] Telegram Source]
 * xref:ROOT:timer-source.adoc[image:kamelets/timer-source.svg[] Timer Source]
+* xref:ROOT:twitter-search-source.adoc[image:kamelets/twitter-search-source.svg[] Twitter Search Source]
 * xref:ROOT:webhook-source.adoc[image:kamelets/webhook-source.svg[] Webhook Source]
 // THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
diff --git a/docs/modules/ROOT/pages/earthquake-source.adoc b/docs/modules/ROOT/pages/earthquake-source.adoc
new file mode 100644
index 0000000..b664673
--- /dev/null
+++ b/docs/modules/ROOT/pages/earthquake-source.adoc
@@ -0,0 +1,59 @@
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
+= image:kamelets/earthquake-source.svg[] Earthquake Source
+
+*Provided by: "Apache Software Foundation"*
+
+Get data about current earthquake events happening in the world using the USGS API
+
+== Configuration Options
+
+The following table summarizes the configuration options available for the `earthquake-source` Kamelet:
+[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
+|===
+| Property| Name| Description| Type| Default| Example
+| lookAhead| Look-ahead minutes| The amount of minutes to look ahead when starting the integration afresh| integer| `120`| 
+| period| Period between polls| The interval between fetches to the earthquake API in milliseconds| integer| `60000`| 
+|===
+
+NOTE: Fields marked with ({empty}*) are mandatory.
+
+== Usage
+
+This section summarizes how the `earthquake-source` can be used in various contexts.
+
+=== Knative Source
+
+The `earthquake-source` Kamelet can be used as Knative source by binding it to a Knative object.
+
+.earthquake-source-binding.yaml
+[source,yaml]
+----
+apiVersion: camel.apache.org/v1alpha1
+kind: KameletBinding
+metadata:
+  name: earthquake-source-binding
+spec:
+  source:
+    ref:
+      kind: Kamelet
+      apiVersion: camel.apache.org/v1alpha1
+      name: earthquake-source
+  sink:
+    ref:
+      kind: InMemoryChannel
+      apiVersion: messaging.knative.dev/v1
+      name: mychannel
+
+----
+
+Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.
+
+Save the `earthquake-source-binding.yaml` file into your hard drive, then configure it according to your needs.
+
+You can run the source using the following command:
+
+[source,shell]
+----
+kubectl apply -f earthquake-source-binding.yaml
+----
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
diff --git a/docs/modules/ROOT/pages/telegram-sink.adoc b/docs/modules/ROOT/pages/telegram-sink.adoc
new file mode 100644
index 0000000..f1e552d
--- /dev/null
+++ b/docs/modules/ROOT/pages/telegram-sink.adoc
@@ -0,0 +1,74 @@
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
+= image:kamelets/telegram-sink.svg[] Telegram Sink
+
+*Provided by: "Apache Software Foundation"*
+
+Send a message to a Telegram chat using your Telegram bot as sender.
+
+To create a bot, contact the @botfather account using the Telegram app.
+
+This sink supports the following message types:
+
+- Standard text messages
+- PNG images (`Content-Type` must be set to `image/png`)
+- JPEG images (`Content-Type` must be set to `image/jpeg`)
+
+This following message headers are also supported:
+
+- `text` / `ce-text`: when sending an image, the image caption
+- `chat-id` / `ce-chat-id`: to override the default chat where messages are sent to
+
+== Configuration Options
+
+The following table summarizes the configuration options available for the `telegram-sink` Kamelet:
+[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
+|===
+| Property| Name| Description| Type| Default| Example
+| *authorizationToken {empty}* *| Token| The token to access your bot on Telegram. You you can obtain it from the Telegram @botfather.| string| | 
+| chatId| Chat ID| The Chat ID where messages should be sent by default| string| | 
+|===
+
+NOTE: Fields marked with ({empty}*) are mandatory.
+
+== Usage
+
+This section summarizes how the `telegram-sink` can be used in various contexts.
+
+=== Knative Sink
+
+The `telegram-sink` Kamelet can be used as Knative sink by binding it to a Knative object.
+
+.telegram-sink-binding.yaml
+[source,yaml]
+----
+apiVersion: camel.apache.org/v1alpha1
+kind: KameletBinding
+metadata:
+  name: telegram-sink-binding
+spec:
+  source:
+    ref:
+      kind: InMemoryChannel
+      apiVersion: messaging.knative.dev/v1
+      name: mychannel
+  sink:
+    ref:
+      kind: Kamelet
+      apiVersion: camel.apache.org/v1alpha1
+      name: telegram-sink
+    properties:
+      authorizationToken: "The Token"
+
+----
+
+Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.
+
+Save the `telegram-sink-binding.yaml` file into your hard drive, then configure it according to your needs.
+
+You can run the sink using the following command:
+
+[source,shell]
+----
+kubectl apply -f telegram-sink-binding.yaml
+----
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
diff --git a/docs/modules/ROOT/pages/twitter-search-source.adoc b/docs/modules/ROOT/pages/twitter-search-source.adoc
new file mode 100644
index 0000000..d5a3919
--- /dev/null
+++ b/docs/modules/ROOT/pages/twitter-search-source.adoc
@@ -0,0 +1,71 @@
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
+= image:kamelets/twitter-search-source.svg[] Twitter Search Source
+
+*Provided by: "Apache Software Foundation"*
+
+Allows to get all tweets on particular keywords from Twitter.
+
+It requires tokens that can be obtained by creating an application 
+in the Twitter developer portal: https://developer.twitter.com/.
+
+== Configuration Options
+
+The following table summarizes the configuration options available for the `twitter-search-source` Kamelet:
+[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
+|===
+| Property| Name| Description| Type| Default| Example
+| *accessToken {empty}* *| Access Token| The Access Token from the Twitter application in the developer portal| string| | 
+| *accessTokenSecret {empty}* *| Access Token Secret| The Access Token Secret from the Twitter application in the developer portal| string| | 
+| *apiKey {empty}* *| API Key| The API Key from the Twitter application in the developer portal| string| | 
+| *apiKeySecret {empty}* *| API Key Secret| The API Key Secret from the Twitter application in the developer portal| string| | 
+| *keywords {empty}* *| Keywords| The keywords to use in the Twitter search (Supports Twitter standard operators)| string| | `"Apache Camel"`
+|===
+
+NOTE: Fields marked with ({empty}*) are mandatory.
+
+== Usage
+
+This section summarizes how the `twitter-search-source` can be used in various contexts.
+
+=== Knative Source
+
+The `twitter-search-source` Kamelet can be used as Knative source by binding it to a Knative object.
+
+.twitter-search-source-binding.yaml
+[source,yaml]
+----
+apiVersion: camel.apache.org/v1alpha1
+kind: KameletBinding
+metadata:
+  name: twitter-search-source-binding
+spec:
+  source:
+    ref:
+      kind: Kamelet
+      apiVersion: camel.apache.org/v1alpha1
+      name: twitter-search-source
+    properties:
+      accessToken: "The Access Token"
+      accessTokenSecret: "The Access Token Secret"
+      apiKey: "The API Key"
+      apiKeySecret: "The API Key Secret"
+      keywords: "Apache Camel"
+  sink:
+    ref:
+      kind: InMemoryChannel
+      apiVersion: messaging.knative.dev/v1
+      name: mychannel
+
+----
+
+Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.
+
+Save the `twitter-search-source-binding.yaml` file into your hard drive, then configure it according to your needs.
+
+You can run the source using the following command:
+
+[source,shell]
+----
+kubectl apply -f twitter-search-source-binding.yaml
+----
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
diff --git a/earthquake-source.kamelet.yaml b/earthquake-source.kamelet.yaml
new file mode 100755
index 0000000..cd82ca9
--- /dev/null
+++ b/earthquake-source.kamelet.yaml
@@ -0,0 +1,81 @@
+apiVersion: camel.apache.org/v1alpha1
+kind: Kamelet
+metadata:
+  name: earthquake-source
+  annotations:
+    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzEwMHB4JyB3aWR0aD0nMTAwcHgnICBmaWxsPSIjMDAwMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwLjAwMyA3OS45OTciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMC4wMDMgNzkuOTk3IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNODEuNjUzLDQyLjk0Yy0xLjM4NywwLTIuNjY2LDAuNzY3LTMuMzE1LDEuOTkyTDcyLjk0Miw1NS4xbC02Lj [...]
+    camel.apache.org/provider: "Apache Software Foundation"
+  labels:
+    camel.apache.org/kamelet.type: "source"
+spec:
+  definition:
+    title: Earthquake Source
+    description: |-
+      Get data about current earthquake events happening in the world using the USGS API
+    properties:
+      period:
+        title: Period between polls
+        description: The interval between fetches to the earthquake API in milliseconds
+        type: integer
+        default: 60000
+      lookAhead:
+        title: Look-ahead minutes
+        description: The amount of minutes to look ahead when starting the integration afresh
+        type: integer
+        default: 120
+  types:
+    out:
+      mediaType: application/json
+  dependencies:
+    - camel-quarkus:caffeine
+    - camel-quarkus:http
+  flow:
+    from:
+      uri: "timer:earthquake"
+      parameters:
+        period: "{{period}}"
+      steps:
+      - set-header:
+          name: CamelCaffeineAction
+          constant: GET
+      - tod: "caffeine-cache:cache-${routeId}?key=lastUpdate"
+      - choice:
+          when:
+          - simple: "${header.CamelCaffeineActionHasResult}"
+            steps:
+            - set-property:
+                name: lastUpdate
+                simple: "${body}"
+          otherwise:
+            steps:
+            - set-property:
+                name: lastUpdate
+                simple: "${date-with-timezone:now-{{lookAhead}}m:UTC:yyyy-MM-dd'T'HH:mm:ss.SSS}"
+      - set-header:
+          name: CamelHttpMethod
+          constant: GET
+      - tod: "https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&updatedafter=${exchangeProperty.lastUpdate}&orderby=time-asc"
+      - unmarshal:
+          json: {}
+      - set-property:
+          name: generated
+          simple: "${body[metadata][generated]}"
+      - set-property:
+          name: lastUpdate
+          simple: "${date-with-timezone:exchangeProperty.generated:UTC:yyyy-MM-dd'T'HH:mm:ss.SSS}"
+      - claim-check:
+          operation: Push
+      - set-body:
+          exchange-property: lastUpdate
+      - set-header:
+          name: CamelCaffeineAction
+          constant: PUT
+      - tod: "caffeine-cache:cache-${routeId}?key=lastUpdate"
+      - claim-check:
+          operation: Pop
+      - split:
+          jsonpath: "$.features[*]"
+          steps:
+            - marshal:
+                json: {}
+            - to: "kamelet:sink"
diff --git a/telegram-sink.kamelet.yaml b/telegram-sink.kamelet.yaml
new file mode 100755
index 0000000..71b87c1
--- /dev/null
+++ b/telegram-sink.kamelet.yaml
@@ -0,0 +1,99 @@
+apiVersion: camel.apache.org/v1alpha1
+kind: Kamelet
+metadata:
+  name: telegram-sink
+  annotations:
+    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNDAgMjQwIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSIuNjY3IiB4Mj0iLjQxNyIgeTE9Ii4xNjciIHkyPSIuNzUiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzM3YWVlMiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzFlOTZjOCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iLjY2IiB4Mj0iLjg1MSIgeTE9Ii40MzciIHkyPSIuODAyIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNlZmY3Zm [...]
+    camel.apache.org/provider: "Apache Software Foundation"
+  labels:
+    camel.apache.org/kamelet.type: "sink"
+    camel.apache.org/kamelet.group: "Telegram"
+spec:
+  definition:
+    title: "Telegram Sink"
+    description: |-
+      Send a message to a Telegram chat using your Telegram bot as sender.
+
+      To create a bot, contact the @botfather account using the Telegram app.
+
+      This sink supports the following message types:
+
+      - Standard text messages
+      - PNG images (`Content-Type` must be set to `image/png`)
+      - JPEG images (`Content-Type` must be set to `image/jpeg`)
+
+      This following message headers are also supported:
+
+      - `text` / `ce-text`: when sending an image, the image caption
+      - `chat-id` / `ce-chat-id`: to override the default chat where messages are sent to
+    required:
+      - authorizationToken
+    properties:
+      authorizationToken:
+        title: Token
+        description: The token to access your bot on Telegram. You you can obtain it from the Telegram @botfather.
+        type: string
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:password
+      chatId:
+        title: Chat ID
+        description: The Chat ID where messages should be sent by default
+        type: string
+  types:
+    out:
+      mediaType: application/json
+  flow:
+    from:
+      uri: "kamelet:source"
+      steps:
+      - choice:
+          when:
+          - simple: "${header[Content-Type]} == 'image/png'"
+            steps:
+            - convert-body-to:
+                type: "byte[]"
+            - set-header:
+                name: CamelTelegramMediaType
+                constant: PHOTO_PNG
+          - simple: "${header[Content-Type]} == 'image/jpeg'"
+            steps:
+            - convert-body-to:
+                type: "byte[]"
+            - set-header:
+                name: CamelTelegramMediaType
+                constant: PHOTO_JPG
+          otherwise:
+            steps:
+            - convert-body-to:
+                type: "java.lang.String"
+      - choice:
+          when:
+          - simple: "${header[text]}"
+            steps:
+            - set-header:
+                name: CamelTelegramMediaTitleCaption
+                simple: "${header[text]}"
+          - simple: "${header[ce-text]}"
+            steps:
+            - set-header:
+                name: CamelTelegramMediaTitleCaption
+                simple: "${header[ce-text]}"
+      - choice:
+          when:
+          - simple: "${header[chat-id]}"
+            steps:
+            - set-header:
+                name: CamelTelegramChatId
+                simple: "${header[chat-id]}"
+          - simple: "${header[ce-chat-id]}"
+            steps:
+            - set-header:
+                name: CamelTelegramChatId
+                simple: "${header[ce-chat-id]}"
+      - to:
+          uri: "telegram:bots"
+          parameters:
+            authorizationToken: "{{authorizationToken}}"
+            chatId: "{{chatId}}"
+      - marshal:
+          json: {}
diff --git a/telegram-source.kamelet.yaml b/telegram-source.kamelet.yaml
index 3193e8a..c60015f 100644
--- a/telegram-source.kamelet.yaml
+++ b/telegram-source.kamelet.yaml
@@ -7,6 +7,7 @@ metadata:
     camel.apache.org/provider: "Apache Software Foundation"
   labels:
     camel.apache.org/kamelet.type: "source"
+    camel.apache.org/kamelet.group: "Telegram"
 spec:
   definition:
     title: "Telegram Source"
diff --git a/twitter-search.kamelet.yaml b/twitter-search.kamelet.yaml
new file mode 100755
index 0000000..a43b74a
--- /dev/null
+++ b/twitter-search.kamelet.yaml
@@ -0,0 +1,75 @@
+# camel-k: language=kamelet
+
+apiVersion: camel.apache.org/v1alpha1
+kind: Kamelet
+metadata:
+  name: twitter-search-source
+  annotations:
+    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjI1NnB4IiBoZWlnaHQ9IjIwOXB4IiB2aWV3Qm94PSIwIDAgMjU2IDIwOSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+CiAgICA8Zz4KICAgICAgICA8cGF0aCBkPSJNMjU2LDI1LjQ1MDAyNTkgQzI0Ni41ODA4NDEsMjkuNjI3MjY3MiAyMzYuNDU4NDUxLDMyLjQ1MDQ4NjggMj [...]
+    camel.apache.org/provider: "Apache Software Foundation"
+  labels:
+    camel.apache.org/kamelet.type: "source"
+    camel.apache.org/kamelet.group: "Twitter"
+spec:
+  definition:
+    title: "Twitter Search Source"
+    description: |-
+      Allows to get all tweets on particular keywords from Twitter.
+
+      It requires tokens that can be obtained by creating an application 
+      in the Twitter developer portal: https://developer.twitter.com/.
+    required:
+    - keywords
+    - apiKey
+    - apiKeySecret
+    - accessToken
+    - accessTokenSecret
+    properties:
+      keywords:
+        title: Keywords
+        description: The keywords to use in the Twitter search (Supports Twitter standard operators)
+        type: string
+        example: "Apache Camel"
+      apiKey:
+        title: API Key
+        description: The API Key from the Twitter application in the developer portal
+        type: string
+        format: password
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:password
+      apiKeySecret:
+        title: API Key Secret
+        description: The API Key Secret from the Twitter application in the developer portal
+        type: string
+        format: password
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:password
+      accessToken:
+        title: Access Token
+        description: The Access Token from the Twitter application in the developer portal
+        type: string
+        format: password
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:password
+      accessTokenSecret:
+        title: Access Token Secret
+        description: The Access Token Secret from the Twitter application in the developer portal
+        type: string
+        format: password
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:password
+  types:
+    out:
+      mediaType: application/json
+  flow:
+    from:
+      uri: "twitter-search:{{keywords}}"
+      parameters:
+        accessToken: "{{accessToken}}"
+        accessTokenSecret: "{{accessTokenSecret}}"
+        consumerKey: "{{apiKey}}"
+        consumerSecret: "{{apiKeySecret}}"
+      steps:
+      - marshal:
+          json: {}
+      - to: "kamelet:sink"