From aab0b7ce00b08d4c7756564a785a281561ff05f5 Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 15:34:58 +0530 Subject: [PATCH 01/12] Changing the File structure of the Twitter (X) Connector --- .gitattributes | 9 + .github/CODEOWNERS | 7 - .github/issue_template.md | 18 - .github/pull_request_template.md | 56 +-- .../workflows/build-with-bal-test-graalvm.yml | 17 + .../workflows/build-with-bal-test-native.yml | 60 --- .github/workflows/ci.yml | 81 +-- .github/workflows/daily-build.yml | 76 +-- .github/workflows/dev-stg-release.yml | 81 +-- .github/workflows/pull-request.yml | 68 +-- .github/workflows/release.yml | 71 +-- .github/workflows/trivy-scan.yml | 39 +- .gitignore | 37 +- ballerina/Ballerina.toml | 21 +- ballerina/LICENSE | 201 -------- ballerina/Module.md | 48 -- ballerina/Package.md | 20 - ballerina/build.gradle | 82 ++-- ballerina/constants.bal | 53 -- ballerina/data_mappings.bal | 36 -- ballerina/docs/images/step3.png | Bin 93879 -> 0 bytes ballerina/docs/images/step4.png | Bin 174773 -> 0 bytes ballerina/endpoint.bal | 461 ------------------ ballerina/icon.png | Bin 8098 -> 0 bytes ballerina/issue_template.md | 18 - .../modules/listener/EventDispatcher.bal | 97 ---- ballerina/modules/listener/Module.md | 121 ----- ballerina/modules/listener/constants.bal | 25 - ballerina/modules/listener/http_service.bal | 92 ---- ballerina/modules/listener/init.bal | 25 - ballerina/modules/listener/listener.bal | 81 --- ballerina/modules/listener/natives.bal | 75 --- ballerina/modules/listener/records.bal | 349 ------------- .../modules/listener/resources/twitter.svg | 17 - ballerina/modules/listener/utils.bal | 182 ------- ballerina/pull_request_template.md | 52 -- ballerina/tests/test.bal | 207 -------- ballerina/types.bal | 226 --------- ballerina/utils.bal | 178 ------- build-config/checkstyle/build.gradle | 49 -- build-config/resources/Ballerina.toml | 22 +- build-config/spotbugs-exclude.xml | 19 - build.gradle | 68 +-- .../license.txt | 9 +- gradle.properties | 20 +- gradle/libs.versions.toml | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 63375 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 17 +- gradlew.bat | 184 +++---- native/build.gradle | 105 ---- native/src/main/java/module-info.java | 22 - .../ballerinalang/twitter/ModuleUtils.java | 40 -- .../twitter/NativeHttpToTwitterAdaptor.java | 120 ----- pull_request_template.md | 39 -- settings.gradle | 38 +- 56 files changed, 352 insertions(+), 3691 deletions(-) create mode 100644 .gitattributes delete mode 100644 .github/CODEOWNERS delete mode 100644 .github/issue_template.md create mode 100644 .github/workflows/build-with-bal-test-graalvm.yml delete mode 100644 .github/workflows/build-with-bal-test-native.yml delete mode 100644 ballerina/LICENSE delete mode 100644 ballerina/constants.bal delete mode 100644 ballerina/data_mappings.bal delete mode 100644 ballerina/docs/images/step3.png delete mode 100644 ballerina/docs/images/step4.png delete mode 100644 ballerina/endpoint.bal delete mode 100644 ballerina/icon.png delete mode 100644 ballerina/issue_template.md delete mode 100644 ballerina/modules/listener/EventDispatcher.bal delete mode 100644 ballerina/modules/listener/Module.md delete mode 100644 ballerina/modules/listener/constants.bal delete mode 100644 ballerina/modules/listener/http_service.bal delete mode 100644 ballerina/modules/listener/init.bal delete mode 100644 ballerina/modules/listener/listener.bal delete mode 100644 ballerina/modules/listener/natives.bal delete mode 100644 ballerina/modules/listener/records.bal delete mode 100644 ballerina/modules/listener/resources/twitter.svg delete mode 100644 ballerina/modules/listener/utils.bal delete mode 100644 ballerina/pull_request_template.md delete mode 100644 ballerina/tests/test.bal delete mode 100644 ballerina/types.bal delete mode 100644 ballerina/utils.bal delete mode 100644 build-config/checkstyle/build.gradle delete mode 100644 build-config/spotbugs-exclude.xml rename ballerina/modules/listener/simple_http_service.bal => docs/license.txt (70%) create mode 100644 gradle/libs.versions.toml delete mode 100644 native/build.gradle delete mode 100644 native/src/main/java/module-info.java delete mode 100644 native/src/main/java/org/ballerinalang/twitter/ModuleUtils.java delete mode 100644 native/src/main/java/org/ballerinalang/twitter/NativeHttpToTwitterAdaptor.java delete mode 100644 pull_request_template.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..097f9f9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 7ac9f1d..0000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,7 +0,0 @@ -# Lines starting with '#' are comments. -# Each line is a file pattern followed by one or more owners. - -# See: https://help.github.com/articles/about-codeowners/ - -# These owners will be the default owners for everything in the repo. -* @indikasampath2000 @abeykoon @kapilraajP diff --git a/.github/issue_template.md b/.github/issue_template.md deleted file mode 100644 index f275c80..0000000 --- a/.github/issue_template.md +++ /dev/null @@ -1,18 +0,0 @@ -**Description:** - - -**Suggested Labels:** - - -**Suggested Assignees:** - - -**Affected Product Version:** - -**OS, DB, other environment details and versions:** - -**Steps to reproduce:** - - -**Related Issues:** - \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 2b99160..c440bcd 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,52 +1,10 @@ ## Purpose -> Describe the problems, issues, or needs driving this feature/fix and include links to related issues in the following format: Resolves issue1, issue2, etc. -## Goals -> Describe the solutions that this feature/fix will introduce to resolve the problems described above +## Examples -## Approach -> Describe how you are implementing the solutions. Include an animated GIF or screenshot if the change affects the UI (email documentation@wso2.com to review all UI text). Include a link to a Markdown file or Google doc if the feature write-up is too long to paste here. - -## User stories -> Summary of user stories addressed by this change> - -## Release note -> Brief description of the new feature or bug fix as it will appear in the release notes - -## Documentation -> Link(s) to product documentation that addresses the changes of this PR. If no doc impact, enter “N/A” plus brief explanation of why there’s no doc impact - -## Training -> Link to the PR for changes to the training content in https://github.com/wso2/WSO2-Training, if applicable - -## Certification -> Type “Sent” when you have provided new/updated certification questions, plus four answers for each question (correct answer highlighted in bold), based on this change. Certification questions/answers should be sent to certification@wso2.com and NOT pasted in this PR. If there is no impact on certification exams, type “N/A” and explain why. - -## Marketing -> Link to drafts of marketing content that will describe and promote this feature, including product page changes, technical articles, blog posts, videos, etc., if applicable - -## Automation tests - - Unit tests - > Code coverage information - - Integration tests - > Details about the test cases and coverage - -## Security checks - - Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines? yes/no - - Ran FindSecurityBugs plugin and verified report? yes/no - - Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets? yes/no - -## Samples -> Provide high-level details about the samples related to this feature - -## Related PRs -> List any other related PRs - -## Migrations (if applicable) -> Describe migration steps and platforms on which migration has been tested - -## Test environment -> List all JDK versions, operating systems, databases, and browser/versions on which this feature/fix was tested - -## Learning -> Describe the research phase and any blog posts, patterns, libraries, or add-ons you used to solve the problem. \ No newline at end of file +## Checklist +- [ ] Linked to an issue +- [ ] Updated the changelog +- [ ] Added tests +- [ ] Updated the spec +- [ ] Checked native-image compatibility diff --git a/.github/workflows/build-with-bal-test-graalvm.yml b/.github/workflows/build-with-bal-test-graalvm.yml new file mode 100644 index 0000000..4f69d4d --- /dev/null +++ b/.github/workflows/build-with-bal-test-graalvm.yml @@ -0,0 +1,17 @@ +name: GraalVM Check + +on: + schedule: + - cron: "30 18 * * *" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + call_stdlib_workflow: + name: Run StdLib Workflow + if: ${{ github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository_owner == 'ballerina-platform') }} + uses: ballerina-platform/ballerina-library/.github/workflows/build-with-bal-test-graalvm-connector-template.yml@main + secrets: inherit diff --git a/.github/workflows/build-with-bal-test-native.yml b/.github/workflows/build-with-bal-test-native.yml deleted file mode 100644 index 8f125f0..0000000 --- a/.github/workflows/build-with-bal-test-native.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: GraalVM Check - -on: - schedule: - - cron: '30 18 * * *' - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: latest - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build with Gradle - env: - packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }} - packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }} - JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - run: | - ./gradlew build -x test - - - name: Set up GraalVM - uses: graalvm/setup-graalvm@v1 - with: - java-version: '17' - distribution: 'graalvm-community' - github-token: ${{ secrets.GITHUB_TOKEN }} - set-java-home: 'false' - - - name: Check GraalVM installation - run: | - echo "GRAALVM_HOME: ${{ env.GRAALVM_HOME }}" - echo "JAVA_HOME: ${{ env.JAVA_HOME }}" - native-image --version - - - name: Run Ballerina tests using the native executable - run: bal test --graalvm ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - API_KEY: ${{ secrets.API_KEY }} - API_SECRET: ${{ secrets.API_SECRET }} - ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} - ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }} - DEV_ENVIRONMENT_NAME: ${{ secrets.DEV_ENVIRONMENT_NAME }} - CALLBACK_URL: ${{ secrets.CALLBACK_URL }} - PORT: ${{ secrets.PORT }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92daad6..017dc39 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,79 +1,18 @@ -name: CI +name: Build + on: push: branches: - main - 2201.[0-9]+.x repository_dispatch: - types: - check_connector_for_breaking_changes + types: check_connector_for_breaking_changes jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - # Set up Java Environment - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - # Setup Ballerina Environment - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: latest - - # Grant execute permission to the gradlew script - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - # Build the project with Gradle - - name: Build with Gradle - env: - packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }} - packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }} - JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - run: | - ./gradlew build -x test - - # Build Ballerina Project - - name: Ballerina Build - run: bal pack ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - - # Test Ballerina Project - - name: Ballerina Test - run: bal test --test-report --code-coverage --coverage-format=xml ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - API_KEY: ${{ secrets.API_KEY }} - API_SECRET: ${{ secrets.API_SECRET }} - ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} - ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }} - DEV_ENVIRONMENT_NAME: ${{ secrets.DEV_ENVIRONMENT_NAME }} - CALLBACK_URL: ${{ secrets.CALLBACK_URL }} - PORT: ${{ secrets.PORT }} - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v3 - - - name: Alert notifier on failure - if: failure() && (github.event.action == 'check_connector_for_breaking_changes') - run: | - curl -X POST \ - 'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \ - --header 'Accept: application/vnd.github.v3+json' \ - --header 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \ - --data-raw '{ - "event_type": "notify-ballerinax-connector-build-failure", - "client_payload": { - "repoName": "module-ballerinax-twitter", - "workflow": "CI" - } - }' + call_workflow: + name: Run Connector Build Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/build-connector-template.yml@main + secrets: inherit + with: + repo-name: module-ballerinax-twitter diff --git a/.github/workflows/daily-build.yml b/.github/workflows/daily-build.yml index b694866..ffc5cae 100644 --- a/.github/workflows/daily-build.yml +++ b/.github/workflows/daily-build.yml @@ -2,73 +2,13 @@ name: Daily build on: schedule: - - cron: '30 2 * * *' + - cron: "30 2 * * *" jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - # Set up Java Environment - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - # Setup Ballerina Environment - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: latest - - # Grant execute permission to the gradlew script - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - # Build the project with Gradle - - name: Build with Gradle - env: - packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }} - packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }} - JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - run: | - ./gradlew build -x test - - # Build Ballerina Project - - name: Ballerina Build - run: bal pack ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - - # Test Ballerina Project - - name: Ballerina Test - run: bal test --test-report --code-coverage --coverage-format=xml ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - API_KEY: ${{ secrets.API_KEY }} - API_SECRET: ${{ secrets.API_SECRET }} - ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} - ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }} - DEV_ENVIRONMENT_NAME: ${{ secrets.DEV_ENVIRONMENT_NAME }} - CALLBACK_URL: ${{ secrets.CALLBACK_URL }} - PORT: ${{ secrets.PORT }} - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v3 - - # Send notification when build fails - - name: Notify failure - if: ${{ failure() }} - run: | - curl -X POST \ - 'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \ - -H 'Accept: application/vnd.github.v3+json' \ - -H 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \ - --data "{ - \"event_type\": \"notify-build-failure\", - \"client_payload\": { - \"repoName\": \"module-ballerinax-twitter\" - } - }" + call_workflow: + name: Run Daily Build Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/daily-build-connector-template.yml@main + secrets: inherit + with: + repo-name: module-ballerinax-twitter diff --git a/.github/workflows/dev-stg-release.yml b/.github/workflows/dev-stg-release.yml index 4cd41a1..b85c07c 100644 --- a/.github/workflows/dev-stg-release.yml +++ b/.github/workflows/dev-stg-release.yml @@ -1,76 +1,21 @@ -name: Dev/Staging BCentral Release +name: Publish to the Ballerina Dev\Stage Central on: workflow_dispatch: inputs: - bal_central_environment: - description: Ballerina Central Environment + environment: type: choice - options: - - STAGE - - DEV + description: Select Environment required: true + options: + - DEV CENTRAL + - STAGE CENTRAL jobs: - release: - runs-on: ubuntu-latest - env: - BALLERINA_${{ github.event.inputs.bal_central_environment }}_CENTRAL: true - - steps: - - uses: actions/checkout@v3 - - # Set up Java Environment - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - # Setup Ballerina Environment - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: 2201.7.0 - - # Grant execute permission to the gradlew script - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - # Build the project with Gradle - - name: Build with Gradle - env: - packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }} - packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }} - JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - run: | - ./gradlew build -x test -x :twitter-examples:build - - # Perform Trivy scan - - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@master - with: - scan-type: 'rootfs' - scan-ref: '.' - skip-dirs: 'gradle/' - format: 'table' - timeout: '10m0s' - exit-code: '1' - - # Push to Ballerina Staging Central - - name: Push to Staging - if: github.event.inputs.bal_central_environment == 'STAGE' - run: bal push - working-directory: ./ballerina - env: - BALLERINA_CENTRAL_ACCESS_TOKEN: ${{ secrets.BALLERINA_CENTRAL_STAGE_ACCESS_TOKEN }} - JAVA_HOME: /usr/lib/jvm/default-jvm - - # Push to Ballerina Dev Central - - name: Push to Dev - if: github.event.inputs.bal_central_environment == 'DEV' - run: bal push - working-directory: ./ballerina - env: - BALLERINA_CENTRAL_ACCESS_TOKEN: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }} - JAVA_HOME: /usr/lib/jvm/default-jvm + call_workflow: + name: Run Dev\Stage Central Publish Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/dev-stage-central-publish-connector-template.yml@main + secrets: inherit + with: + environment: ${{ github.event.inputs.environment }} diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 7bbac5c..4d40baf 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,58 +1,16 @@ -name: Pull Request +name: PR Build -on: [ pull_request ] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - # Set up Java Environment - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - # Setup Ballerina Environment - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: latest - - # Grant execute permission to the gradlew script - - name: Grant execute permission for gradlew - run: chmod +x gradlew +on: pull_request - # Build the project with Gradle - - name: Build with Gradle - env: - packageUser: ${{ github.actor }} - packagePAT: ${{ secrets.GITHUB_TOKEN }} - JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - run: | - ./gradlew build -x test - - # Build Ballerina Project - - name: Ballerina Build - run: bal pack ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - - # Test Ballerina Project - - name: Ballerina Test - run: bal test --test-report --code-coverage --coverage-format=xml ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - API_KEY: ${{ secrets.API_KEY }} - API_SECRET: ${{ secrets.API_SECRET }} - ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} - ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }} - DEV_ENVIRONMENT_NAME: ${{ secrets.DEV_ENVIRONMENT_NAME }} - CALLBACK_URL: ${{ secrets.CALLBACK_URL }} - PORT: ${{ secrets.PORT }} - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v3 +jobs: + call_workflow: + name: Run PR Build Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/pr-build-connector-template.yml@main + secrets: inherit + with: + additional-test-flags: ${{ github.event.pull_request.head.repo.full_name != github.repository && '-x test' || ''}} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d6edeea..25e08e6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,63 +1,16 @@ -name: Deployment +name: Publish Release on: - release: - types: [ published ] + workflow_dispatch: + repository_dispatch: + types: [ stdlib-release-pipeline ] jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - # Set up Java Environment - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - # Setup Ballerina Environment - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: 2201.7.0 - - # Grant execute permission to the gradlew script - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - # Build the project with Gradle - - name: Build with Gradle - env: - packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }} - packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }} - JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - run: | - ./gradlew build -x test -x :twitter-examples:build - - # Perform Trivy scan - - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@master - with: - scan-type: 'rootfs' - scan-ref: '.' - skip-dirs: 'gradle/' - format: 'table' - timeout: '10m0s' - exit-code: '1' - - # Build Ballerina Project - - name: Ballerina Build - run: bal pack ./ballerina - env: - JAVA_HOME: /usr/lib/jvm/default-jvm - - # Push to Ballerina Central - - name: Ballerina Push - run: bal push - working-directory: ./ballerina - env: - BALLERINA_CENTRAL_ACCESS_TOKEN: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }} - JAVA_HOME: /usr/lib/jvm/default-jvm + call_workflow: + name: Run Release Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/release-package-connector-template.yml@main + secrets: inherit + with: + package-name: twitter + package-org: ballerinax diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml index 2db8eba..c02c8ff 100644 --- a/.github/workflows/trivy-scan.yml +++ b/.github/workflows/trivy-scan.yml @@ -3,38 +3,11 @@ name: Trivy on: workflow_dispatch: schedule: - - cron: '30 20 * * *' + - cron: "30 20 * * *" jobs: - ubuntu-build: - name: Build on Ubuntu - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17.0.7 - - - name: Set Up Ballerina - uses: ballerina-platform/setup-ballerina@v1.1.0 - with: - version: latest - - - name: Build with Gradle - env: - packageUser: ${{ github.actor }} - packagePAT: ${{ secrets.GITHUB_TOKEN }} - run: ./gradlew build -x check -x test -x :twitter-examples:build - - - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@master - with: - scan-type: 'rootfs' - scan-ref: '.' - skip-dirs: 'gradle/' - format: 'table' - timeout: '10m0s' - exit-code: '1' + call_workflow: + name: Run Trivy Scan Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/trivy-scan-template.yml@main + secrets: inherit diff --git a/.gitignore b/.gitignore index 1d10aad..2b85cf0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,9 @@ # Log file *.log -#conf file -ballerina.conf +generated +#Config file +Config.toml # BlueJ files *.ctxt @@ -13,14 +14,18 @@ ballerina.conf # Mobile Tools for Java (J2ME) .mtj.tmp/ +# .DS_Store files +*.DS_Store + # Package Files # *.jar -!gradle-wrapper/*.jar +!gradle/wrapper/gradle-wrapper.jar *.war *.ear *.zip *.tar.gz *.rar +*.deb # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* @@ -37,28 +42,18 @@ target .m2 .vscode/ # Ignore ballerina files +accessToken.bal temp.bal.ballerina/ target/ .DS_Store *Ballerina.lock -#test CI file -test.yml - -# Ignore resource .json files -**/resources/*.json -!**/resources/*_data.json - -# Ignore Config.toml -Config.toml - -# Ignore Gradle files -.gradle/** - -# Ignore Java Wrapper build -java-wrapper/build/** - -#Ignore docker caches .ballerina -# Ignore gradle build output directory +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory build + +# Ignore Docker env file +docker.env diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index 428096d..16e549f 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -1,23 +1,8 @@ [package] -distribution = "2201.7.0" org = "ballerinax" name = "twitter" -license= ["Apache-2.0"] -authors = ["Ballerina"] -version = "3.3.0" -export= ["twitter", "twitter.listener"] -repository = "https://github.com/ballerina-platform/module-ballerinax-twitter" -keywords = ["Marketing/Social Media Accounts", "Cost/Freemium"] -icon = "icon.png" +version = "0.1.0" +distribution = "2201.8.6" [build-options] -observability-included=true - -[platform.java11] -graalvmCompatible = true - -[[platform.java11.dependency]] -path = "../native/build/libs/twitter-native-3.3.0.jar" -groupId = "org.ballerinalang.twitter" -artifactId = "java-wrapper" -version = "3.3.0" +observabilityIncluded = true diff --git a/ballerina/LICENSE b/ballerina/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/ballerina/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/ballerina/Module.md b/ballerina/Module.md index f60760b..e69de29 100644 --- a/ballerina/Module.md +++ b/ballerina/Module.md @@ -1,48 +0,0 @@ -## Overview -Connects to Twitter via Ballerina. - -The Twitter API can be used to programmatically retrieve data and engage with the conversation on Twitter. When accessing Twitter through Ballerina Twitter Connector, It is required to register a developer application. By default, applications can only access public information on Twitter. Certain operations, such as those responsible for sending or receiving direct Messages and posting a tweet, require additional permissions from user before access user information. These permissions are not granted by default; you choose on a per-application basis whether to provide this access, and can control all the applications authorized on your account. - -This module supports [Twitter API](https://developer.twitter.com/en/docs/twitter-api/v1) v1. - -## Prerequisites -Before using this connector in your Ballerina application, complete the following: -* Create [Twitter Developer Account](https://developer.twitter.com/en/apply-for-access) -* Obtain tokens - - Follow [this link](https://developer.twitter.com/en/docs/authentication/oauth-1-0a) to obtain the API key, API key secret, Access token and Access token secret. - -## Quickstart - -To use the Twitter connector in your Ballerina application, update the .bal file as follows: - -### Step 1: Import connector -Import the ballerinax/twitter module into the Ballerina project. -```ballerina -import ballerinax/twitter; -``` -### Step 2: Create a new connector instance -```ballerina -twitter:ConnectionConfig twitterConfig = { - apiKey: "", - apiSecret: "", - accessToken: "", - accessTokenSecret: "" -}; - -twitter:Client twitterClient = check new(twitterConfig); -``` - -### Step 3: Invoke connector operation -1. You can post a tweet as follows with `tweet` method by passing content as a parameter. - - ```ballerina - public function main() returns error? { - string tweetContent = "Sample tweet"; - twitter:Tweet result = check twitterClient->tweet(tweetContent); - io:println("Tweet: " + result.toString()); - } - ``` -2. Use `bal run` command to compile and run the Ballerina program. - -**[You can find more samples here](https://github.com/ballerina-platform/module-ballerinax-twitter/tree/main/twitter/samples)** diff --git a/ballerina/Package.md b/ballerina/Package.md index 9b3faff..e69de29 100644 --- a/ballerina/Package.md +++ b/ballerina/Package.md @@ -1,20 +0,0 @@ -Connects to Twitter from Ballerina - -## Package overview -The `ballerinax/twitter` is a [Ballerina](https://ballerina.io/) connector for Twitter. - -This package provides the capability to perform Tweets and users related operations. - -### Compatibility -| | Version | -|---------------------|---------------------------| -| Ballerina Language | Swan Lake 2201.7.0 | -| Twitter API | V1.1 | - -## Report issues -To report bugs, request new features, start new discussions, view project boards, etc., go to the [Ballerina Extended Library repository](https://github.com/ballerina-platform/ballerina-extended-library) - -## Useful links -- Discuss code changes of the Ballerina project via [ballerina-dev@googlegroups.com](mailto:ballerina-dev@googlegroups.com). -- Chat live with us via our [Discord server](https://discord.gg/ballerinalang). -- Post all technical questions on Stack Overflow with the [#ballerina](https://stackoverflow.com/questions/tagged/ballerina) tag diff --git a/ballerina/build.gradle b/ballerina/build.gradle index d12144b..acd319e 100644 --- a/ballerina/build.gradle +++ b/ballerina/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.org) + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). * * WSO2 LLC. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except @@ -16,10 +16,17 @@ * under the License. */ -description = 'Ballerina - Twitter Ballerina Connector' +import org.apache.tools.ant.taskdefs.condition.Os -def tomlVersion = stripBallerinaExtensionVersion("${project.version}") +plugins{ + id 'io.ballerina.plugin' +} +description = 'twitter - Ballerina' + +def packageName = "twitter" +def packageOrg = "ballerinax" +def tomlVersion = stripBallerinaExtensionVersion("${project.version}") def ballerinaTomlFilePlaceHolder = new File("${project.rootDir}/build-config/resources/Ballerina.toml") def ballerinaTomlFile = new File("$project.projectDir/Ballerina.toml") @@ -33,46 +40,61 @@ def stripBallerinaExtensionVersion(String extVersion) { return extVersion } } else { - return extVersion.replace("${project.ext.snapshotVersion}", '') + return extVersion.replace("${project.ext.snapshotVersion}", "") } } +ballerina { + packageOrganization = packageOrg + module = packageName + testCoverageParam = "--code-coverage --coverage-format=xml" + isConnector = true + platform = "any" +} + task updateTomlFiles { doLast { - def newConfig = ballerinaTomlFilePlaceHolder.text.replace('@project.version@', project.version.toString()) - newConfig = newConfig.replace('@toml.version@', tomlVersion) - ballerinaTomlFile.text = newConfig + def newBallerinaToml = ballerinaTomlFilePlaceHolder.text.replace("@project.version@", project.version) + newBallerinaToml = newBallerinaToml.replace("@toml.version@", tomlVersion) + ballerinaTomlFile.text = newBallerinaToml } } -task build { - dependsOn ":${packageName}-native:build" - dependsOn updateTomlFiles +task commitTomlFiles { doLast { - executeBalCommand ("build", "${project.projectDir}") - executeBalCommand ("pack", "${project.projectDir}") - executeBalCommand ("push --repository=local", "${project.projectDir}") - - def centralDir = file("${System.getProperty('user.home')}/.ballerina/repositories/central.ballerina.io/") - def cacheDirs = centralDir.listFiles().findAll { it.isDirectory() && it.name.startsWith('cache-') } - delete cacheDirs - - def destinationDir = new File("${System.getProperty('user.home')}/.ballerina/repositories/central.ballerina.io/bala/ballerinax/${project.balPackageName}") - if (destinationDir.exists()) { - delete destinationDir; + project.exec { + ignoreExitValue true + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + commandLine 'cmd', '/c', "git commit -m \"[Automated] Update the toml files\" Ballerina.toml Dependencies.toml" + } else { + commandLine 'sh', '-c', "git commit -m '[Automated] Update the toml files' Ballerina.toml Dependencies.toml" + } } + } +} - copy { - from "${System.getProperty('user.home')}/.ballerina/repositories/local/bala/ballerinax/${project.balPackageName}" - into destinationDir +publishing { + publications { + maven(MavenPublication) { + artifact source: createArtifactZip, extension: 'zip' + } + } + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/ballerina-platform/module-${packageOrg}-${packageName}") + credentials { + username = System.getenv("publishUser") + password = System.getenv("publishPAT") + } } } } -task test { - dependsOn ":${packageName}-native:build" - dependsOn updateTomlFiles - doLast { - executeBalCommand ("test", "${project.projectDir}") - } +clean { + delete 'build' } + +build.dependsOn "generatePomFileForMavenPublication" +publishToMavenLocal.dependsOn build +publish.dependsOn build diff --git a/ballerina/constants.bal b/ballerina/constants.bal deleted file mode 100644 index 1bd80dc..0000000 --- a/ballerina/constants.bal +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -// Twitter API endpoint -const string TWITTER_API_URL = "https://api.twitter.com"; -const string TWEET_ENDPOINT = "/1.1/statuses/update.json"; -const string RETWEET_ENDPOINT = "/1.1/statuses/retweet/"; -const string UN_RETWEET_ENDPOINT = "/1.1/statuses/unretweet/"; -const string SEARCH_ENDPOINT = "/1.1/search/tweets.json"; -const string SHOW_STATUS_ENDPOINT = "/1.1/statuses/show.json"; -const string DESTROY_STATUS_ENDPOINT = "/1.1/statuses/destroy/"; -const string TRENDS_ENDPOINT = "/1.1/trends/closest.json"; -const string TRENDS_PLACE_ENDPOINT = "/1.1/trends/place.json"; -const string FOLLOWERS_ENDPOINT = "/1.1/followers/list.json"; -const string FOLLOWINGS_ENDPOINT = "/1.1/friends/list.json"; -const string GET_USER_ENDPOINT = "/1.1/users/lookup.json"; -const string LIKE_TWEET_ENDPOINT = "/1.1/favorites/create.json"; -const string USER_TIMELINE_ENDPOINT = "/1.1/statuses/home_timeline.json"; -const string USER_HOME_TIMELINE_ENDPOINT = "/1.1/statuses/user_timeline.json"; - -const string UTF_8 = "UTF-8"; -const string STATUS = "status="; -const string ATTACHMENT_URL = "attachment_url="; -const string MEDIA_IDS = "media_ids="; -const string REPLY_IDS = "in_reply_to_status_id="; -const string ID = "id="; -const string USER_ID = "user_id="; -const string USERNAME = "screen_name="; -const string LAT = "&lat="; -const string LONG = "&long="; -const string COUNT = "count="; -const string POST = "POST"; -const string GET = "GET"; -const string JSON = ".json"; - -const string AMBERSAND = "&"; -const string QUESTION_MARK = "?"; - -// Error Codes -const string TWITTER_ERROR = "Twitter Error"; diff --git a/ballerina/data_mappings.bal b/ballerina/data_mappings.bal deleted file mode 100644 index 52587e2..0000000 --- a/ballerina/data_mappings.bal +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -isolated function convertToInt(json jsonVal) returns int { - if (jsonVal is int) { - return jsonVal; - } - panic error("Error occurred when converting " + jsonVal.toString() + " to int"); -} - -isolated function convertToBoolean(json jsonVal) returns boolean { - if (jsonVal is boolean) { - return jsonVal; - } - panic error("Error occurred when converting " + jsonVal.toString() + " to boolean"); -} - -isolated function convertToFloat(json jsonVal) returns float { - if (jsonVal is float) { - return jsonVal; - } - panic error("Error occurred when converting " + jsonVal.toString() + " to float"); -} diff --git a/ballerina/docs/images/step3.png b/ballerina/docs/images/step3.png deleted file mode 100644 index b4cc306d4fbc1345aa9c49547e601d2d6685011e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93879 zcmbTdWn5I@+Bb@#APORa)X*s%0}PEwDcv9`HPisolB1#^-8qzWcc;>gbb~N-cMULS zxzF=F`|N%8Ip;m^2R^LdthJa~>%On+Uss^2vK-!H^2Zn$7Du|_yFg_n|IC_7*9L?{@sgZdkVt1XK(#hT2k|4@@~q*kK^(r{`h+7bs`*{ z3qg&IjqROW`^t{B)XhIT&rCZP78Y2l>KbF!FP(E32KS-0joEQ~7yHqc(Y@x-sNP;k zoZ_nS^9OBsky0Y}Xv`)31Hci>%edwr1u@B}hF$@Ould@?a)zZdW$VwKd@-F=#Q(i8lm&M4UEc3PhDsXJiB*`3POidORy&1F1KR`QHr>|&&2-Rv5vbD zvR*@8-|Sx-3f71ARc+CY37r^=d$G@t@7N^O!ju$9xQI~B8$&XU?l7>f4z+$W)K1v( zI7SzKc}TG4$U!q1iX;<2479eWD>w_H)$wIuHLBt~l@g8T_)fK6%T74K}#Y4MHgL=P%EEEQ= zn?Kxr=^ZptnT}abuCMrp{q@?kcgF@IR2jOENb84XQ_@c%;q(T~Su7Y@yEd@cFk?7Y zy3s6>)IIk^Kw{Ldacdz-5%V+lM8yXzUeV;wxcHVd?d@behyUr&#MK{ubdEFR^65Q| zzZ4N6ME9Q$``@1Z7xwl>JcRT~H(q+pZTINuakyq0aYu`}@H!qcDmX-tgY^4K`|W>kwC>EC&)K zXDT;TYsRu19|u`U(maa7bx<#S?sIYUBTp^k_ho&5o&p$I zzPIN-nz>G7!X9^zi)X78EnL3MqQynQzhTnTvafkri}}YLqlio_c;8 z-!>dQ`lkdwGMyM~^=dP8%%)npWUvtP%dFNK3XmLn-mR@wNKR6{jEH@8QH1zoOYuXQ#`*~XyK^n-C14ZSqG z_vUK-D)L0i{7+X3cIRlWlrteb8vRb$j(mdXZiZ`#{f6sgWdd}B-kq>*@a&f|KTkp7 z=Ud#`R3U#lmWP8;=gru3l_W(@xvbg2MqBIb5mjP?-Zb^X3; z@EITJ(x-hqTPYfW@EZF>Tx*SBc#B5}a%-d}aOQF_QmDCdU8on0R}fptnp}p#_b=;C zHUe6gDqpx9OVj^>ik8JaJx@fXZb4KwgwzGuNT*9!Nm7)JSY=Yb=)u@?BW*J*8ySavT*B zkDTw>LMCsGxj?k2hm(9FFC!lHzHGaHJsHJVrks0{u&W-8I)yJzgmE^{dYZoi%AAt`y?Brty z4%bU<6RXQ-FQ;v>#?Xc`EfR2b6|Ksm;;*sfir?P}rhQln8)T6g?J#XNisijW%@FxZ zsCvf7P#;2Maug-t`nUmoh@<4ZBhxIaoZTzs`MX4lIq!AgYbe)w?y&L895dYV7P}?2 z0`;7{&5{1iDA~HBH>tacqa)4O;Veph=6xPk-_AC-oE@EcyHFk<-ssXw^ColsoV%dz zvFj7<9Q27tcb_#hDn;@3q3QCuY(gJ1;@+H6@O<+>vyubO%IwPyez{y2zNQ%89+Adv z6rLKS2okuWCSNRU{(v0V7qcN(BA+)Ds?j*{WU`J3x2z>!Q?N>tpXNSAMC8= zs5K;chSv#N>3Wh8i)BmIS&^1g%?7HI3toSv5pc#E0*>KDNdDmXzZNao2#Y#oQt4@- z2P~-U6w}B4*+PLCyKCwLfBS`ok<+c5B`EeCP=s{m50vbMD5as!IkwFHhdq)tWWX>xD&o?`YV3UF7_{zea&(zSVf%2p{~;d)fCO6+2sLC&Oi$6kV9eYr%WA zJJVleeAb$Z6NPJR$j8bU{vvjs(?kE1*_cmZ$zWpu3g6#HeC;Hsw%z~I>UE)PUblO3 zc|=IWqRw!QI#3QmgiH=*KGnb5cnUhJLCkRnZ{%WsVQ5FnhSC%v$XxcH;PtJe&uEZC z(Vy6*7mX{Sc;!}m;2iB@JySJ}x(~EROSKNhg>Ao`HWr0k1C$E2iwBqum>(qi>le;> zzCH+d;CNjfW3Lp@mSY$Yvp(_Xkwg;#U9$xe+bvszq~y0hC3c?bB8AKKiq=t3xX?Pg zp`62Fb1sZ*Y~&7U+0jPU?GP06GNJqD!D0SM#~e%PQVZd-b9Z+kws$BmR}+N4bHwGGP>NzjC=ZPzd_Q&AU?)nWPB1ze`5_h~8j8dt~o8#y(yhk_Bb+ zO%-Ue=5aN?d)?873cX6Z)NzNd4kV{?F4UQ=#B-_7b@68hZ^ZKr!N`yUam%<-?HfiLS7_R&x_;+VrQOPF2C&xc04R*X*2J6?a-fS#WvaZDS2i+LgeE( zX+Li3PtvILY>uxud%O?-SDLBqUEp{ozjM(W`Tf}Epk1!UE3&=f)EK&f zbE3IcVWB`YC4P(gTJi7;_^y%iaiiQZTc&u<;Afqxbj`L;T>fEYEbTLo3**?|SeDFZ zWO!7LREwk%@t8_i-g!KuMn2LazW%~1 zw1oA2xQgsg95h!tFdvaPm^#jE`KU)S%I_r`?K8x3TU2I^C3lo2=*hsELPyTObRpjh z%Tc#!C80Af)Nb$Y>jv9ZcJNNai)xlNw(BbF$m5J~z~uI9$uk3^yys^AyWR?+Wc_ z=0X>O7buQp7OTC&-$^hk#Ao`U1`i%r&#Mp==548mKwL(Pz`U8 zs;i_$bZif-hn$_BGB7hU7v2H)(=oM5KRnuMTm1 zuC|qwY;`iW&?Oo6aQ+NDk@IMczSS6JFQ#Sq`DpccmNw(8`zhZWB|yb6eS^zbV;|<5*iTlF^QI-)<@8i$xg>SQw|BPK)X)tX z5*Ka>8QRTL%N*Sbo_Yx{DKe$DtP*~DK9ymwMc^CDEAwqGBG4JPWypK1UBjF&Gd=|R zn!PfZq=(}UobAjz)2&^cnqqX0U{Je1Smp%nr6HEJ)%H@bcbZ=RE$n8V7KSyKXpqeA zPoQ1SHaOY$@=v&-g+LkZe=QQ=C6`Xu`8k;@tIUA2pA^tYJ|kpE93-r(vfG4MXw2Q2 z#eRA2{xw<5Yckz#o_I9J^@rDmXvcM#i9Mfp9m2}i@;(Uqk?9Suhz$|isPqbnr3(}G zIa+zhs0qwke{ z00GzUj~4te9o!C?+&<&IgBU>;&rh2i+>A42&v{66-h3YYC`dOA_Bsvu#+RqC^NO;6 zZ#<+vu3S7bHy9o0*I>PGTn7bL+rRfHQE{DX;3*W?%aG+~O{gnfXo%m|;sE_Q>QdA% zi)yH~hQ%)Zp_v9Fo*3P8L=O2RHF`HQVB=YJW$-hRgmZ0%WAtP^_KAy>fLozKngBaBrPBe5%I+8+58h&S+&u_a(y~;;O9j<(*fE|6f2SwiNt|fc$?a5+|kyi?&WWMXW_H3Qt>>z zOzg2@GHI&gvwuZ`X}b*Hw^QsVmh#$>gt zloC9y?fVv~)Y!^u$mDG9kd;5G(}Rb^*y_`Ly??3qG`+h-pq9}&S>NbHiL1+$6bpyMu1;;jdrF= zz^RH28^g9Ii`jUSZk=@F+9IY(4eAxk&APRD=L9n?;4;C)*_m?TNlH?>KrKXY%s39} zSQyGK5SZfFiinSwX@L$(bxKQgnN(8EpJ~4$?j^I^4R?ru-(3Z;YM(lAPB_bgCAD8^ zSXPLoU&z%EFIVv0?cd4;ftcg8eCrb{0Xh*g!l=ZZ%X*1ZKClSi#f{}$VHJLKyw>wN zKshz{`NI>^OSM|ZrQ^frcC#$44njNdH}Z8YLehpGUc=ZU(*oX9tjeGE@~ z696!*dxjM>%!=Y&b9@EXD>*|}W`#9hlUZWrUl60aNM`Cvo0Tol7kyF8Z?k4RO!Eml zNxMl$dW$VZ%7-90?j9BTR?nEgB3X~NQuBWAUp<~mq+I+jgz|5I<-ZThgeyZWqwZZ} z#{CbL`R|YZURX4=>v*EAhIYI34@@nesTj1lR=-$SJwamMYSmWcP`fFl3f|){eYf~? z0o8~vBpsS@X##7`2S8_*aY}LwdPYY=Jr`E4cn)$tXvdcaiBwDv=iM53pQVI}pXChA z6obAMV8i-$&lPL<>3n#ab6=ngK33pJDi|;P;2@Z zFXg(bOm7EK;W6xL-VJWu(HXLV?Bci*K3iDZlT88(XP$~%qgm;pUSaCRPBJXp1}eh3 zV6qp=+pij_eY21AGc<AE){+@8`DG-qAVQ!OIquJc$$?Sg15D`hHsAYExb^WW`Zf5;J>nX`{^YqBd#h4r1H8dLBCxV))|sY6#Zs zv=$Vz|KISB^j+tYI~K+?<;N(@_qjjo?v-i0pU0SH;kL)vB_f4jxIGR5VTdqlh9Uyu zd23F)80C}NI`-BoyOVsU4VxEheB_cu9h;6RZN#GKs=+?!yM@(xjvp<=KksndkYOZT zRLwpp?V|oJ7;fWKo|@nM!b0)WsY|Ru1Bt7{&=WOcc8e7g z?_29XuG;c=?g}Oe`1p6a=*m++LOlp}#HSWdo}ZtO*;CJ!4@5^XDg>c1v7dg23v8#8 zOSSvk?PF;n9Z|BM`u3KWP0EU&>ezLx&sU$HIBotkiWah&c@=;UGW}z`K7+*mOTHb8 zvYinS_ZriAKo}xK?}H}QCbs!IJzHCHmWC|awQ*Zi)%*l6@0Gb$HhyrHN2H1#ED&rR zo}KaIV1G6I(peXP2ZFwzuiyclF#FpTF$^O3tF6X)Imvk0x~Iu?_UG%1oFMVCUDI#O z+wTaYat`4t>q9AxE5-sa=*`!+d$4Ho!m%cc9f1Pv>b^7vvacAwwAt}X z)QZ>bUzaGHnD(}2g9N!z_jw-`-xhUEUh>D=do*iwKQ-kcQF&$WhyC)(CRjoKbcTTM^7J%^mRjHiP;BvnEuH5(XkXAmLDRjay`z=!1$SC!* zG8=|T3b)z(g1=J66;e@Ry1T5g{ud7!uQ?4hH8rbI(^qco8LQCHsbmq1bNK`wd+qgu zs7TpRQ{m&TWG8UF^F|I1Vb_z)SRSK|K!WkS3(WVWU&)YA-Vz-k`K1q<)L)^3AD`YFpV!Y7@ zJXq!V_O4{{IGxoZC}{6s$;WE@%ZtCji?G${hN4EJ&zuRL!H8PIE6@e@5b!en`z0OC26R~w#=wZYFxL}vLQn@n#1#b=Oz~Mms`x%9OS)e zP3Bxj=5i6SL2=8)|4X~{JX=qB>$%v1dUdqYrQK#wX@Sq5r~R~x8h84eBN)zK#Bz59 zZQQw1ZTK-3WQRm_DOh}6x6*AEJtODQqF|;*107wj)kk8YNcBsGkaYIwH^Z&A3H_Kw zp;$pC`PH5_)lAvY*D3k}H29@*tI4cFGBH%dAw@mZ5^$dH{X0kC?a=~Sj(3f*N#g>= zK_3}GLn*05zO2TIp{|1{rtDw7^?8F^ zF=Kr__yNRc1>~1zfcmTaR9&~iq;L$j<-O`E0Q1M2Bb^yeUqXe{l5rAnTf@_y6bjJC z3y*);dc~r3GtmP}%BjE7qLe*7M{I;>%}sMXB6o3^KUeHC50nzYdDZ=|^*n~#Vm>^z zg(jCM5YIn7EUi(oiV2(FcB&-P^K5(8dmgBc`7*)l0+h)8mOz`yA`@o=j2j%2t~!q% z>pA}krFoR=;SSfNr{mY9$Igz9YF%+Bzen#sd^}odIsDRgvZ%@jC163}aj@8&uMj_k zh3uQ?;%M~xIM3+d;LsPvSU4^2w)-+$F>&;d;7r}YQmYE1LfojgiOl&@lLuI@!6lK~ zekSz7xWzjWpfV*e%xB}kP8~{RF-#A)kO~1oN^~vTp_p3qAP}h5Qy;q47aId;@WPHO zbst)NZ<9W^0usJ8)yD2FM6hEzed350Hs56ro9^0rK=Tp@+%?Gcy-XO?dTqTG%6-*I zplwg)%oUV?vLuJtvlH9i=z9_{rn@?$?mc?i7UI}nMq3#Chjbp;_m7;rDAg&%T~mWd zdI)EG9}&Xl9Y5J4@+Z6Xx+@*a5FY zkBg$m!J}NHwd3%rU<ZS@Z=!gy(YxGHVYczTes)wW%|G6+&t~yj}2Xd;4m%=e;%J zBicZsj$x#hL+xsEiU<`zKqZml#8yh+82u$BKS4jd%FTqXO!ln4fWMQuEe+FYZvHR` zZE(32m?+Sd7cE+?qr0K%=Rn0S41DYC0eWR4gnZP?dw9F^eKa9| z6$3APs$de!>G0jOzC(Q*jm?eWG(N2$kqlO`ZD;vp8Y;Z)>v&0Ff8`{F0}0=ZeKbNH{k^>L=GbpGO@G*J#n?Ac>bBy$c0!j4Vh+mNkVO!D6wK7s zZPi?^)daLtJKs=srNV1}!vH4(UfA?x7MOcOhaGNTPI>_LP0`-@cxCK6rBBHTs);k^ zhfS}aTQ?U)vDwNVakV}&V}W_SzUadHLR<`K`6T|&-ujQmX);vTERN1%*Kdy98^+5B zFtx$>%>^_i$|>(`<3Te8Ti-6R!HLhNg3>=8DM(n6*Lw=ncE!=AOb&=JW)3fT0x5nx& z9&C9S^E9!)t01Mwd}{gUr(|1Q=tbe!uhZ=b#AGoz<;~|r0Xx=-0>_w(an&e)~wqNuv{v7K_9wI7?qM@lv9Ms-p{@|B!GsXWUH;B zoZuNr`E+P)2MOKk%I?tj=XHQ?^0L%h05%;lS@e#ho}U35yEUKpXavG;$Qjo4xQ&zTUhtDbOy4u7tO{x+$}1 z-tNwTV_vG!$)|~90(jVP*LInR45tuM>g*O8WX8DI3dyUNpMnH5*=+`zJBit} z*(*2N4}KNadz|<~^;XT)bCp9Oi)}Q(in@m(8L%I!PX$19yXQ*ImA-;M_`wD}zL#qu z$?te|MLEmBP~0@(aKPTPJURLt7~b92FJ)ubsqX#x?UQf>gv#j27vcpFq#dFY=`9rN zdRNdNPTey8;~gcBF|i752iW-#uZK$~uiF@WJg3xmegK-FEii7rnV7q{b0Doh<9#Hx z(`8iFXLw^=@1b+DhFgt>9EgASneZLnHc7t2rdz3f5T>G&VL4B4UZ^M-s&*iA#CLW>!n5iX5}nmWteIBFmT44`teeTa z6IN(Seb1^LwXaVkp1#2NG!JE`uP=v&Y$|Pg0*+q;3*=QIT?w&+|7gK&Zxln;LVz+W z*f(#?O7W(y{F@V4)FICCdI7MhAhwEftu+B4cQNa`zEC21Pd>j7B?|&Y!Qe=ETIOV7 zW?#L+{xLfTY`ST1jO9q`b7K9a#9AotV)uc;$u1pi`o@j86|ZX}{oCYDWz*pB15S%0 z;ooBxeLn6QQ1xNt$EVXfE$>=A3QtZCSw`Yf^ za&$_gehUV7JCqBc+G{A~@A}w45L?u>#UlYx{nSZ42eSNF<6G_c8>mj~s7$9RUWEx* zPh*F#R9}Xj_vUFuwS!ds`ankgl3wknMJi-%JiGFajk{~uTT5XEC zq4V0q1hC?mh@Fq-Kn)Okj86jp$}ayCv-ls{5JLm8zhi%nL38@q=|8g*`7%-nJnp4Q zli)7`m$FLV3xWcT7F{c5`kp}UxoBTkr)x8bR}ugh~s{$%hFndF&7n{ zs@__IXWhBpe0tlB?|HXf?1YONPFf5sh-GD%e6lel-_2zJe&h_eQbdqAdP))a;GeoI z9OPKQuyLMkrCyTBFvTi*7}2mMB=3^ zA$kcr25h1!e0hoZP*{(A*nG3C5N`y}Z3?8=R2|IfD~G{c4NZRwhjaBE?M_OlP>{Rd z0q*)9aiVDy!q&ja==^(uuuN`os`0la`TWeWk^tl0+RSLl1j5JNnQd<~BW+Ewm4cNbS9+Dfj~ zQ8L}(xc~aoGnP2`$({0xp!%S1CP)){7DH~x!r{kPiH7PL#m6!%c75ii@Cxape9y$T z6+yFYZFbJP(uE@;|9%r5{Iq61Ze=5tRKd^OFeWc7OV<4)DRvt{iu1xS1uq8Z^aCGGba(WSI#h_6Py2n8H||bUOiWAJ#T)psol8gACE-I#yTyW=FN z7#sDFBd6LR(tE|&kfD~yZEC%`Q=(8{tX$1Cx@M#)N&%(Db(VaIn zQ#N70?X%$AK^%PKsOMWfFV7SXt)TuY_B)-pt<0v-u{377$e8r$CE@>Ufq&{S|JW(d zuSkYBu`tTm(q}QIX}Mt-yU$1kFx(#D0z%CLf4onW_uH|4KK*Qh`99!h*}XEU_tXFR zwC6Vdlt8TQaS2I(gWJJdG(te8C_Ifj@cL|zlKto_QzdlxN2`cy)fTB&Gx5(DRV|pn zew`z7bgtH+Se!{sy`9UW#ru4^V;HasznV{g+%pS#1DHu_eF0D z{YA?XmuIT^zdoYBFSqBJq1>2IHFl1D3>&vZ5O4DxVuqD|yZ%_r zSAjUHRy_zOVtFp+b@S?oo)B=NJ?~a&Ibue~9DdSNZaitD`URc-t0M%HaE*@VYjoC> z)Ac{5VpgX3FR=`jFba``CnbQc!JjNQuqd3kxaa(@NZQp`l|FF1} zWB}FNs4g?Q?M|-(Vp#eZ{%e042yDj6;whD=RoOy?g~Bp%495x}faP|Fr|F(Xvud&S zzBf)`6HigvALtn|Q=I>zcQxLJ=^UUH<%!V2qIxCxZDUJ zj+Y-_9ZFFk>g4D=x;_K-#qfJYaF^s8+cLqzhpbKUgzg`C%a7q#mFQe1fXYBxD#*vp;o z;$7uXmVE4J$6%7J$q@eb;e8OCdDT$bur?52t;sOO#ii&X$|$%vfdDMo=1+6usCCp1QCeo zz0AeM@F9TWdbNk$u1?-^Vb+>nIgbE9b#v!}I;lJBEt26bQzlrp)_$Q%xC97P{!Rp2 zT8(6U`>f1`VUoygHXTVXGwKrljP|}ONFXo=|Dd>jslPv3KIY}yST>!Uy}4SAeD!RW zhOEOTU(~rBt4@h%EQfyF-L3oQ!!&w1<-SBPGZ5>6DpP)o?6;8g6oH?|x*g)T+E=B;6baQv6QZm64qm9_4tBhLIS2!nAgRf-m(CIqkX4D%nNh#p}WT?e! z;|-AWWBe2~=_@1KuiT$2m$72T#4sdW2kQ9Y#y?(~i`}$s&F&AtW)F0A#?&2f+_;mH zKS-7@I>8_%v;VB}j4N!=+T;4>1*1aL?{(z3F8O!DXJ$~&jL#|hBY-__1^C>=?boMQ zPdwlkJVL|HI`*omu*5G-A|K|9I>*rmagyXrWg#VafcR*1CF^^2%`s?PABp8=%`uf7gJUumg_rSxreSe0@)4YKdoSB?xDx4v9C0QqcY z)$?VzW0&8p?Ld-59fSahQx*oqj*=+MqzSvjl3PAGS@yrt>L(&ZQHl9To@m3K`DRK7 zDk9vdGuR*pKmyiR%F1J!o!ShS`lNj-UYP&FcFVZgnncX&DhaTf74Jl~ZAn zTR)8%VtIiFu$XIio3~G&s%`b2#8+*$a`3%rDA_&@PpSTX{nq!Aoa5R7-2CxOd-mLx ze)*JpqW^`?D6j9iX@PMyg^}p4VhBR-WUf(v`mOA3VgPTDy2QazQPD zlNpCs9bot=p@f=CUFKgyvJXR+wQzR3BFbFaJgPDUnGfP}5rrWNYa3v9+5)ELh;A+*wID?=dVU|)(k zzwf}T1zs!KXg&T?jc+Vp);8Jq)avO`6+O za){3gNAA5XCKXCmh!Qzzl_}ghAU>0Rn{J2HW7_WT)OUu>dwdEa88BNBcUZ%+S;`WS z3AGWlVC`;vBM%CgDRz|#-Z)<94gjoW#S1FYn$2NS-tS3kum0#uDP&lO?3yn;);Vb+6`!ZM(f{adHLclJ_yZ&pZb?^p4EjH3Bpg z5wkW0qAngv~D)sF=2+c zA%bV&&c@trPJMP@4|LjSnCXs!uC&TD7ho-iZ>~*=(}G;zgC0x%+?*}jqm=93{E_k? zUE}?B=A=_N88=TMiS(`XoU+Kw1ME@46W- zW)|~4mj~S5<6J=U<%-fXJz8P>oWz|j7oMtFWkuk3DP)xD$e^4o7{l=Pd8g9)Eec<= z21Z6;S#2}1xhRH@KtBAb-4Ho<-`3#f!~0BXF;Bk1WFd_K zdMGD_Z|>~HMZEk+x94{h&vPe|PVc>E1Dc>m0TstI#(htRTBGI$CK&^58v)_^&B6H= z*Zy51iR}PC9=R|I?eoIml|Vw252V<7jLEc|NET>$u^(4m`mFs-{nCN{=mywXy>_$r z)uyzWS|pq!d2=BWN6oNjfUfvFcsBH1t$p!lc!1T@Bw6!aCWn4>zDBNqt+$PPv8$Y% zT=Zep%0KjXph5PEh;GOg0Hs_&Wt*{ALE)A0Rzp{v|IA^W*|>3}Z3tPyB~d zkiwYqJ&j)`l+1kyaj%by(d4kzJtlnZsr7I4&g$UvEUhqkhyEA^<<^VaaKT+ zD4IhAo&zz8*u7qM*ZSm&fdPo_LDYQaQNFekuP+*3RwSF18VI6gBZ9-5sz+*nT68J+cL6e^vEqx41+SZ1C!xECh4YqNTd<^Vg~;&73~iWe z!e3|%3?jUoJ1^RAfb8Cb*G9$s2|Hy_G5Ir;$gEOC@=Vm4Qf1HVsdJ@@Q@H_W5;dy$ zC9kM=44zU;xv%xxmY~JVoWNe(k4_S@sR^GVnHPiCNTqK2AvqK|js_u3oFr!!&pU!` zc_?|`GGy|1O%BuMzOnJZ6^$1hINEQQJNm;dx0~S0=no74Wj_x<7tzI)fCH@UZan1x zjPX6+UQ~|aO<17 ztNG=!nYGQ_qtWnOnw71O9;TB16EcP&H%IML?-9XcO=9WJY<_hK!m$c$6VIt`%y4z+ ztAhF!O9?c#;!g`plRTtbp5BCj-QrEYZTuZ-;&nFB|AMFKlPszg!8jc;;n5BDKF&zZ z?x=f7MFs3Y{iK!d>4o{4I1ouY$G6@dS4HRLL(OUft{Nh)sZtB3r{}h!NHUQ%kD9Ar z9l^Muvii$$N1o0ns|3O2OF+i(JA9vj+tTIO+oH>n6b0e*cXpLZJ$}QsizSQy0Eut? zq4$kXaszgoAlGW5sNLXF2&Z+7YcY0ebGmIimSngX#?SZWH2UK>7#1Lyw2i&j znJFL+1?CUO8(eLp6P3sB*7lCqZgWTr^lMWkbz$RxJMp8@eP3NF_dh|zFcO1fKFTQ;ZJLE`Q8+I4gpjVy<5KXqDIDlE6@6Jfs z+qd`5%p}suhP>g>ug-WvG8B9ZI3YS=3Q2tVms~oNhoS5OHq}R!YW*8}>8~WW7n>V( zTV1v?CN{9Yq;gwM^J~a3T?9yU2p66`4?iHj1+mQl!Q{LTCaqj>(&49VWu}Qw+NY;= z_jt_*tf~o81s$UvzhJeB3j4GYnXj#cdctONez26gHB=czA?7*IQD%XKPo=oj;*)9C z9j4LX!l_=(_=3ZzNf&I_^kFMtgBK|@7*cA|=(ZQ*>N`=PU7R$Y9gNoO7V~tGE0>7D z0sG(9Y4c@oa-7_uxNJOj^*@DL=BlKr+cQ{hRIMQIi@Hx0>q7>KjYD_J^dLX<_5>Uj zr6&rfxDi-FyMX0}$f8%vkjA>J`eO#-w~^MbfeC=RllTk2Nnm4R136@3;PI)zx#(F`mEt0_rBr+n55p915`_{Aj`32F3MHirD!(}I7!G?zE#X5@=|oC6jXxZo zTCVE76>WL@2mcRXTAzoHQ5rmO39BJ@{UC1sX$Vi>KezMf?3QKn%70m9%t=QB2$gPL z&L~v5&583!JsS2rI@ne^z1q>S(ag+{B<+HbgU$f{+`%U~lppn^mgOXVtc=QcX`n=_ zoG6w(MrUBTvj|9{t1~Ik72iI$o~c4b^oH8nt4pLNt)ID`p7s`)czRIBOa(W`^fWSQ&i@q!g0rXpxzt8qDr164Ej1ejv zi5yB4YF@1^b5SxIYst*rS_n`XuX1A)_PT0FU@m@JEZ@eJMh&03IqkGvnN|R?i~y~99LntM8KNN#k^4GZ2UE|MH@RTjd55`r6bF4H;p=#q+}uEwtML1 z68T2&159vWIu!slK=1@{uN)V39@OUqrvSY6oe_<`c>2m|2&_*cN#iDOV^JN1yqpQ% zYIZTJBsfAN-0ut>VdFNdpqTbQe0jNZYQrj>gs4P>jy&5fT``eL`X%s$KNnloy=sDLIB>VFAkmhMTphi3r;L+4Y3|e7@(^_Uy@}L#c;_HV|K>j zN#7~gCz-b5#SecQ_M?8Y?abE#mG=bZD}r%12volQT@jOLX0PvmpF->|nVQ_UJn zHvR8ngVzP1PBN+j&QSOC>{SHkAtn)5`i4AsFT zQw|YN3SVU=z2KlM`T9ePZ&m152Aax9*yY&3(b<|{kT&R7jVNO{u1YBVFwCTA+86A7 z^UV3v(O1{)(|%UcXQIxJRFthmYf0N>R;gQBqQ1zD3XbB7cLTY%#5$n%O|A9o%;mN( z_hJIc2(=oIg88pUNIf4><9Ms5YIr4fRXN7jmW z2EGuIVJ!>$b%n0^`B~A{$s$JEZ*bS^wTxonTRoElA*UeihJ!4IKt*H9HQF?U8)ejX z&j!oY0hz4%$GBmK#iiJ?kDgSVv4=GVMT60U4%$T8T|oE_ks>Vjq(r%l+QaR4^hW9T zstUNrb@r$28Br6HG_|p<#_;gNIrmeSt5XmPgFzD9E$QT2Wd3XyHJg`eTuFB9ni>7c1me#WuyIW|)|80LY2yj-45GM7_%vGj z;vAUZCWC=;12>LVI)N)x$m}H|mIGdJ@n&9=E7O`M6Tjn_urJEleoIgo$H7GGzrl!< zk=^+bFVt-8Dw}%uJuy8=t_i)wF_;sOE505uJDk?amupj@;}tp_GL!6iPG$}D>#UbU5TEl9>#gN6lJOrV{7JP?HlbWa*^QC~;;x^l%DODt4b5JwxnI$v zEm^BqmqM=g>d}DssL__#bSU8z71oHn`aUX;2FjjR$lEYvU$K{b0%v~oSR;N~p4~00 zsfcykWem9T$=Xn|GR~OK0gva=HOE@d>g$KjP-1(;1$FL@do#O#@gj36y3+GWb^MSD z6SA*cQ(Vg>$zu)kc6(Kt0P3Z#v_ZP+i+R zt7)T^0WkF(01C@uA&XRX7W_T-$?>h@;hVSxT1|Q5Bs%IV==x`E#A?QlZSdyhv-yp5(QcDR{S1 zcrgBPSRv>IBi%yOINA^~-ZuQT?I`cVsFfx|zSQqU?myu;ZtZtVqj*@dKdWq2W5waO zOt|_vf1TPiyhh12^&oilq}YjR3_REUQ)p@jDkfKK4BC)FG`I=#ux%CKJG& z*__lqbY}ZIJsOLvxURcr9%KydI>3HF5Bi~VqDjONW!%uP`dtb6xQp=4UEaTc-UsbB z+IiH!9zEQmhG!|aoh%mjTyAOJu_I$WkBAGjll&aV3P{?=ywsC!SbX_SQZGTg9yc7* zB;Y*+c5oox*8rn&*0#$D3oXEYdnqn1vAI)w(C6lY-GBDx%x|S{4;3R{AkY!IM#^9U zLN@IZEI7oC+MtKC13p!ksp+>fr=|5>e^JNjYz3^cwWh2t542Z?D7Wuhh5Nk`7K`2| zFZ}IrQGeZKJfX8Vz+E-BDf~FLx2$6-60TM0>Lf8AwY1K;O=f6Jh;=iySvlO$2oUq%{^<) z!`yQp=3$2qnuRL5q!){duM94FWt0nm4{h~;-yLLp zuZfd4yU8826s6g5n3{4sIR!^@dg1%nyjgGTK`<91ctsi{6Y{=q#P@R0+qBO!=PS61 zOSl+KIYzugwQ(*W;AB<*&|4tuzg%|lHMRg-Ta)I^bzI0wS3eXU@j>$Y<&Xe$3!eGa z;e61eK(*lafZ3B)k>8*>53yTKu%xgY-?3WtlG;VbZx5Zvp$;V0j|aDaoR(3%`QLwGRgAlb))&J^~zEUFs4qMnUz(iIR_4q@kMC)+(fjgIO zcPvLH6Lf@rx`svX6h?7-Z~DH5cRn0NWSVUhO&iX)w*DY>9eZJuDtZ zB%{UIm~>^=^Lu)S&Ear5M72oUYGvX2P?pW|9|dA`;$=UxR?guPE9ZHi(Q0yd|fOu`3OVGp4nL~I}6wa zGZFtNi#5|!jT!6*CK-=(*LZ=3&&EKC)k=%oC7JnXQ}z$7tj`f!M?XBGUyHcnJb)Sc zaIq;lpYw0Y7&^+ydauM<VbR-!E&BZ^aHKF{Ciq(n9c)W@8PS9G+u zCyfn?z0tJ)JjOPJx(S(e`6_DA$I65e8@v{yfICh)Unx7|{u$=zr%RcP{22V|rEp?F z1&vbGYE;U|r{)7*7Te41;?W!)RLk(IR*zsJcJuT*3j+%Rb33DvBz7a7{aG(>xK?9W z#rhfj^ZcQp`@U#qwb%?G|5D2)XC;i<^$#1gZ=c378#ZfCe^6Y=$`T8S8}^WsqqNb8 z|0Z>bog1RX8<{OF;^nmS*;?e8R@23fo6*Wuc{HPzDv#Si6W3RbGB1#BkciAxyen33 zh$k`X!u`0ty>9&8-GA&LdQy)|=X5=jgu7x4iiSVZbo~(QhZYEo055L&`I~WDH=ZaI z6HRn-@6T0h&EYp$s@M7lzhX51hUwvYp7p_4a-@2f)3mLl2ip?z^SMsY1u$CrJ||o~ zI3U|%$(2nhU<(i6FmF{2=@GOy(U|Bj>6}*TF19AyBrGE6GTiv(7_`<@ExznxKL(jh1u#SMp|az^o@%ks3Zg;r{skf{g<*u;uITqRT@2-9f}VU0 z_NPRhU@9nRl;6+yyJu!>F+bEq<9!jrdV3;6{^TpMVtIb5K zOsavclbFJ_wMgN*^R3AkWXvt<$#u6tG}X-RuuNlm)nLEtsADvQYT0~+?&JMkPUHJu z%0gePfr&qqT5+feg#20d^5N zax>1%7LV0Mxjisu0<#KP6dbCoIOww~BnRC&ZTH&?(h)s6`-8I{ievJ47Uwd9u3vbtJ2vGicO#<1uJwRUsG6 zmI=SGy6CRneMuP{GU;#4?>Yh)2%RnaypF-KFYTQd8Z*ahxRV(YSVLay6{_B1srIEZ zYI*zVOKtug*bOC`%&o8d8XOzeDHR*+kvo)(q8tx_h=2o$j#kW2!)`H|C6mNKxQ7+? z!|1il8$5}8s`IrT96FU6zUBzu=v!jrmsHY1q_eeHEXf-KiNV>n}fTr}O|VMsjl{gHTUGLTD}Lt4Y^cK3-?L>cbC= z)vZ5>D_%DbCZl=pjl?j1;}d?(W#i~1)OLs8X`Eeu^WtUxpl!}Aw($=xZh#268xA!sRJb%a^$D$QFED+UBf;l#vgWXRGXc4`W9(79>JBHVpw-1Y zC7rb-KdW&ZD9}HD$Te`-ozY-GcpVdS~bV}eUAcvI|MlYGfBv5zI7X*OP3tr_?c+fKTdU*Tu(+mvoB}9+{Tucye zS#MKB@W_MkAK%@28pr{@O2_%%@Z__kt2P-Y!`}m!1ObmjL%sJjMF)} zH-NYdK22XXyPgN1Yz%xY3rBmAntIuJ^DpA9S?fuy9cJt_WgMQLs zG5|Sp*O$RyLwve5@>Vk8<-k5Tcuo{EpN{lDkSR~rJg67?xh?dDo~?CSBnmV+rLS6z zWFV;&sYje_GE;QKCH>X-C6~%45lY0KlO}kNiiC-Y>99AY06beSK)4_(7?06}Vp3KX zzUzM1@O?M$b3{h47RWbb5j8zLo+$T_kx6gAB&4f}#_&ft-7-g(g@t4yjeuB;=wTns zrfSZE8YJL-=wcb9Wp2B2qM;y$_c`{Wl18@WYZXT?=UZ&CU!nkU@&X)A2)5$?e3m~E>20IW5m{}xEC!dSDGVC*&v=UHvn-~1gFAje2D9V&l#d1&0RroQkPDkA)$2=Y!nj+7fmQW*VQ|qv0e{7KAVzfTKr} zfH~~wVK4i^!Wonx*4lS3A8aVzgEuBClkYU5e!f%5+b{~*(X+ERFbya|Bz{(7$xTs@Pja~+9h)b+KI(7@7in-<#XR4i`lu)A_ z)ebFGJG+MzDG#yD;=X!dz(lJyiC%TMMR;?xT`Al!??mfT(Qn!}6S(78On7_1I)q}Nug(R+Bg&$UVP`_xwN}jh&L`S@zpq|X zw*Q<5(YIaz@UyJU%Ui984I9`QO*Y;YZBTbG>ii`Pw2ME$^c-pQYwKg#`ZNB3G*Q>G zt{_sSKt=y5vn_zgbU2=2++I#rc+QbF1TNUlw%sN@84&rvFi+&J{DS?a2~bydrfX2v zW7|gBC}kuYwwEQqsQwia1)de25)*D-yGh;fU$gbyL_i&UJ+&T!p9M0}8ctf?2oZXYB%JV*=K(Q{5u8Gs^_tf8G2n_JL^=K;m zjTqC?ri(sOy8=u?4z6b{f~Q}GzPwCxzwg7Nr&!rp$SI#<(x6G3YI*zW$y!MgZqLh+ zAbYi~*~>#k&#s(oMT9comXcJD6(H=t?uCh@P=zI}(!2|D;Gu?ceQ4kcstUX}4o2=3 zfIOF=m@$By`}mO)g@uj81Q55kk;u845*le&>W^m(knq|oyx9NSR$Umcn5YW!q11zV zFODBUqXL;ZApv@r`CYUyTtER8%noo)`ouoq-~DEfZsKm>7>GhX`(J`^=r;d7X@&iB zR%OR4Nqw7x>UC0Gxq-mo)x#8Pgw8{olEg4m^TtbnBUD+5RXnVJdkb)NkgdD3h|bdf z`qj-|lBqW>2&1I67rW^qTYqKJVO^bde01!=xetNAm42RDqmyF@Wr;DUw%QgWb=mFx z8&1IpFEYDjOi1&S5lo}9E!)t&lXG4+;0!1q80eguV zy+nTw%?d8%w=abjcIKZh@3lJKavIs=FvD`{xE&Li*@~uJ2*PH2JR#clbs?vr;O0O_>%1lEm}cD0kQ&Gc zrWn!Zj}uF^>iNq7Svcr4g zoJqT`OB7hi1YA8G8P0@@Y^2ebI-$J2F_n^`)pDzO(;N@wKHi6gtq=>M_*S zZP7VWq03&bo+KN{^L!V4UOs>7TnFa)i2sf9t_G>a{r=OVWp!7ip(+Dc0w-j;c*^6t zi_~G`MCLv0!%#gs_;`NGiEV}Pr94&8+FSkC@}X|6g|?LDU5%Q}v=k?QQyz%os&*eQ zwIcG^Ef$SlHO3l2rCf0wV7j=1`#k6T6t@cX3b<&^nWJWMf1+7stZ zmDOx4Q0l)dJ^q?#E<3}4GLTsj2NSL=E<5S3PtedoeiIm&UnacbJG5C?J92B;{rhcy zhF!D%TQ>G8uhX4LOK&VAugBe0#J9~snS%pjKdt!&&yOBk!@`vY6D2xY3~&Rz+};@a zkh8_c%|9;vam;!hp3edVd9gs13~n@^q>~$?H^L6Sp4!b>k`b(Q1c?BiQ#Q!!D}qQ& z=eVz~uBQ@tFT2VGtLZSs4y-gSUe^}jd(3(`{f|1pkyf`JKNgp$)N(Q z4rF;9_tLS*?{c`6Ljo9F0WKgHfS>6OydLH?0v#XVh^8P&Y|?JhY63i%3~-~)V8+Dm zfpYT+b7KJ`LM*JYM03FJ?R;W8+$ew^wAOcQG&LmZEY|w zfhoSskytS9ACO)8Y+(HI_K|aN^RHfI^=z9J%*4EzyiG0s-j9Ohf_y|1cb;%{1>Swd zR1Gmp*rPGs#a^9x2Fx{Br#84FLX%9HwYiw#^$9mits;@+83G=6xBb(CupGH$uGc6F zq$9ru2BvrJ(JvM3F=~KeB|{@otUn(3nS$1@Pd7h`x(Lm!_r=9{etUF;o+Zq-*l%La z*V#n@Qf@?HVIdc%y(zmCK8^feOZ)2B#`-F7*2Kz!uB0cDQVsd42M*%kl9vbbnIK#q z_!9>-2MB>Rgk2b0Z{XwtZeqai3p;CP-=(UiL%N;owOj3q@y+(%XbF7rHdr%@vTmqJ zv)Wv>v-5ts=?(>ed+?=9alpV7|&&W4^L33}aU1ezd2bs9XA1U%q|7gKLa>VLk&nAE3DdEL`^Np3b3 z?e(#Wcq^ck8Ng6t0D;TVrX&Y5g9o57QaFbSVVrD&Q6v$kZ)mHi*7R!LJN0*h{U z(*_n$#VNNnwr$-z;cT?V(XqJFJdrUTj&4G2f<@}ZCa4nh{X-^j1u95)6a0z)fK4P+ zB@&VHOm6tNG7g6yC zq)AbtGoMdy*noprIL$5yaim++9{TlG>jGln{JHyQqnmru6}tc=6GnJA@Y%`%AS9bD zRzXu4B?*&gg?@lo(rTM{O0RLAGs1%!T_(3EMwA)SYeZ4rU(49+!L5#^5lXanKb?Eq zt^NnCyvfj{|9w8>Xfc*QSeRM2(T_>HS!`_1H7K#^uKbk+fa(0m`yoR%BVu{lo+&n8 z@JObiBn23eObL;OkbPjJq_y5tUz;2|Bwl6KgI4c1k>2Tw+%ovlcB@tB>lUcwM^BM` zu*38?zrd?51GO@$9p=t67-$ns_iH>P>-sqN(plq5XxRllo5P2c7KY4<)UwfE4WwyJ zm*|#o#n2||%p&wWh+n?L z;Cnp6^v~)t(s#ee;~XVmzGAZ^0F}zgC4SHlj6+Wqn$|2z$5mBES7HiH#+1rdJAN8mBp%hr^5)Pk7c12Dj$HEObRQ$QxS!4DN#!=-vls{ z{1mks?H^tbXg75gob_!d!w>1!oh`QJTM}~Iii5KOU(@~!3<4xm+T`T%B-u$m!J8~W zSgfP1>?)1RDZ$^tLIl8=vt}=wie!D>yE9%BmCVScZSapr@@cjklN;)2<~3`NV{+3y#bbVjO@ z8uj~=-gY*dV_tizm-VL1uociwlEX^|X5UQR5o%g{$Oo7W;{8OlJ|`0RPKL3&tVXcT zL_!u|Sgfzr{@CpfEGA>vBdp%+yCDy(c5z8K3dquZmL}cc93x%K-7J|)#~f&rh4MY; z0Rx=pob$&SCeEc7$g>si1zq5ZY;MO(MD=)DHDFUglj~_10FN>z=1z1iHis_G{o%7+ zj}4#}v$svBjWiG+&9mzp02n2K-0-xP=jDn4#@dGA06w_^-&EvDZE>dD54WnJ>XLCp zV1MYjz5daOwKs`@A;{D&<9|f6<~~}p^4cnda?9aFka!*&OHqI(NsSgq}jq_<_`p&8A@bg(akXYdZd?S z_jA=6b27|s6C4C7V^FzcEn5}2+@Zv|3Od-MGegn@<1#_vR=+G}%)PWtBhh3xRwidQ zVo`Mo>N|agjt3gCa0N^L%$H$T=IKH0!(VoV6pl|$c)H%z*pm(KoL|uzN1>V^tiQPF zI7buJqJAeA`I$lUNF)y5{^;+ka|nafT@M8dl|;rqX`t_7=DeA}-LyC#D{^zB^F4uVJp(6 zJtA}*rz?!N7rpQae4${hzB5}}dWGy5M#5brsU-AKD_sb|_nXivSN3DU?>lVA zi*{?wVDAq5NH7n587cd1@3i6aK6gOrn(zyS{GaQxlP!IW%Y6dc9Vje&pd zt7KqCuUvO3N(7pg3=HB)v_Jj7U;8-BSr?AYl<4s0+g51dV$amthy(9B-sVtu7{U8U z!_Hu1TevwM!xe0aWc}{uWIaTz{9(70qsr+}7wrDwDAsM(%#zudt3MqFVnu{n5Ds-D zDiUJM?t7yyX#h8>h=1xg6otkHz8{O4*qB`vmL7mbj^efBrnv#OJB(+FW4T`J5mHJ< zf2QM#%~);^P&(W4yja=YrPtYYeFF!qrqQlYVzIjq8!N~ZO$Z|#8O!B|D|&c)&V|)T zN!y-XNe#v|38b>@b8og z$7zc1)2r~9w0(gJ&49|ZfhsN%fLTt{qD`RB$9EukofP)LxL2CfW+A;lq4GE2YG+Hv zNY1oKJi8!ISB(4&jN!VtE9T>QOe^jWa396rtNWk{7z6L-BLHi(`NJ3m6L8KO*5rFc zPUT9a4eFEE@*HIdT!M2XelEa04Yc^{m+*(IwsyT}g$63nQ2hbFYo#_Oq@0DB|tMDvh%Hl{p4H zKpEZr^nGVM0u|3V+7?J(Z+*|ekvm)TvdEX7t_b#O;Q;Tl^4+)PcUGG1(|Juzcbgnv zTPJ^lI*mm?UHyxI$IUx9V<(1?Gh&8SN7EAp$`QEan6*3gker~IQ9eP2-t7u8C{6A| znVQdERa?|1!`UtCukTzZ{!TPp8+28_q^AD5Gn$PykiZ%M$P}{RN>%QV3pIOKN6W4$ z@K2(x@5-Fevp|RSe|f(P8!F8q|6K=C3NfIqqr11sZ1s7D##vHdE`KT#3wRF>-gd-e zRc1JvE$)884cE!V&1C4D%Y6e^?gH8tm7j`$JLEMU`y8%TRh|{A4pOx0;3Dwj5GTLI zF93P|vH16y`QSz->Ev_6WqB!fN)W0(dXJ zu5@8pvI9{KCxrWn>u-B#hTUQYyE?BeEeLibdJdqR1G-vKu+7=lh~ayx^j!l$73rR_ z=MV@0?@&-Dur4Q3O5s)7sTQirFd!JXH`%d%2g%NkH|_V`v4cQ)Y%;aGyBd87-XRjXx#M_1Nz<)Z z=S#6HJMK*R>S*EFJv49rZ+BPkN1hHMQq9&_iGX?A^Zj=S=~@&ss(%ml?JKz<6t+ji zPj_lDA&?)4|5cU#zw|d`Yr?UdKeCKZE?pzo9RP2Fr`A#kY>z_X`2~7D8n7B^9BjBM zTp{L6M-$^bMZjHH%u*HWO`|8CuX9Vod#Ls6!rCL+s+w-w0>k0XLQZ6Bq;Fp{LHB~J zmF(U!7I2AKb7Z{G{P4Lw=MLwMU48-(CVC^d`2p{HHfMDl=64A0eKhK$WTTe^5Mc}; z;H7(Vd0gKNthK^V&b2h(@ta=lYJI1R`}2zlp2p4ZyuzSU=a}?}Mb%)<%0`~R&`Y_7 z&x4k%GDsKdVRP=oMq%(6@V>7!^!cIn*slYZyP3nH>?69+cGhj&2DhGJ>RFhSS+i>t z2;S!u5$fcDFvp{Aw*5M7`O>8Y$G~!G`I5=L;$2XleCi&8E+XRwfH#0fCY#Qf0b1}% z(Att{GBc&(acY}X@^EqAy>*k~cD8-0_H7`c^PK?R5an)7uzRt3L0M;2k;9@yDpndc zG)lf%+pagY=RxGnCez~YlWRQwI8?&-8RD5YDt*B}qY|ZHHe-W6-L#25KAorVt8KJ> zK}WDX>GYl6V%nqHN~hP99t8EF9vlJtd1!>2xW;P~7{A#bk;9HR=G`=_Owc^;?h;11 zvopZ9CbUbSVhjWOdk4Fbxf)$@fj(BNZ1~Mlfv#Tf-8k*f4tQy(sf@Eion$4m@ zBCbTf%X~pwO6m4p4Doh*?$G1bF}kZ;-3XV5<)~~$Dq*haR^s0d8%gw>f zmHT_%^{5iL&Pcz`d-sh|cA#G}-B09EiLu=rw4Pw_W*Ifne2qP$0v`>lm<=wlsF#$1 z;uC#w6uHr!<6z_w=M^4>I=xnz8m5{{Ct~k_YjcjLD znp;L4Vw>%|O^I8s@X^oPra-C`!(6eU^C}*`Nc5L z>Y2=3=3&6Rd!;}Nge!G|#WX>Tr@3I6LNuMr%bn@ThidX`gLCRHJxiAep>HPA4Wy$X7xg&kMN={ENp%?_(Sz$8nJJ|1S(`d zd$)E3NaVDR4C3YdPSdWBq9B;b(AwGk$k)q_HB3T7+W_wm-@c${*V4`LF}N<3He=8I zj`}rMoWdy4)?eMitY)ReW%Y2alMl83vN+vq@CD?d5nQ{r=GXO((rQ7!;(2dw5+hL?(drx5_}`9)gjQe_u;B45cK zidVlmYHtK~pCI23=nykCg~xLUc4+Af4I_+Tiby{=#ay|@-=%LPlAeOmM)|*g+0G^9 z7v#JmY~px5aZw9RoOf$}RCpBM51wZ2q;eeU12MAH&Qy)XjG=@q!I<{|c zo-`l}_dMVgcuj47?8!ZqYF?Q!)EK)96aH0Yn) z)oW8p-Bcl5p~n-9WQJ%K{7PmP^z4qHx9AcK^NFzN?Ba91N&b-QM8zyIZZCoKYPG5f z_=z(lE^+jT@dkUMHiGed{Xr~uhQBey1~#Na=gVze@ebTsSwk)-hV(oa{pDc=)htd{ zbrYgGM}~D}t;L)|5@&bTvI#=&Vw`q_THqfIaIeX?;m~TF9XehYoG{@2}v!hKz47QM&%5G?K z>mj!2x>SCBc}a}_jwIv8t0j7f@iBBKut=UT#vNi|PM@7^F?d{6q!#*!!$}kHQYgXa zJkOCyS-HFly~#lO(MUS=sej(ctL-Rtzw_$HRJoyIv1ImEoU;1H?(5pA8hzv`B`&J9K(pMA{NJ2L#qO?NbuEAb!;~`)D!ZnK`*uEH^+DH>wiB7%C3km%?iV1 z=!5)SdGiZyz5PU*OD%T&k#DO^XX|2HYqW2p6r89Da>a5!`MorZSZ@2#aA8J*jK*Pf zK&AxBlrE2dU1st&-Jv*rwonK1Xxbe?eD8)KZ4Zy}?Kmywc<%#xOgYkxrdPz#s`%VM zS@lnQF$gV1!k5g&+%@|Kr?3S6J&NR3#FvQXx=04ZWM3{%2DBt2SrEYPLEfq;#E;lO zHC;w0>!-ppMZ9?@yBBYWu#ENJP*VT5S?vDr&OKii=9%{-8NQA$!F$mbJ1s5n`m%xon&gUUaU%QtHw#fN8Dz=e+Em_Fm)eQ$$ zIDobsyOm3efc;qN!Pk>4zj{4yl^CgQ_>f>Gp13NZu`2$j4@2>(!VUx?{DVn!R&!9V zQRG%mH(d|vsZj1dov&ZQfP4$v=L1WpnkhhxXDyP4d!kUiO&{9rL+zmYGM}1RR|y#E z^W;nV*An@ou#5X@4@OouOSc*wEJsC;JIgT@28M(jL008)hev9Qy9ijNN^3NutX%y? zSiyeY{*J`sw=XTopcJSxKzqsoj&dx=qkDUo)227IHGwXUM!)O<1a%zF?o_}|P1@_b zBg)NaiG0Uv!(KRPfZSMi64@igwSa!&cNDd(K1T|^&0MxpoJ}xGro^U_n52+V+YIMcY=gm$8V{G$y~cKzN6#bAN7P_H1q4;xSPZq(`{w5qx{G z>97{W+57;HqRS1Eoh^9xehRwOMXl+2`c}vFJ|#mu>@y>4XOfN*C9Ju-?J!vft@X7GEc~Dem<4F z*|a(#h{%&b7MCO)TP$)CypxoCqx-3j&r-<{E(%1Ftk} zQl252HOOr^_Lt8Ny{$Z&3gT_N_p$0wGNZv7X0S6|K(>C(NX0<0x>5WguY96-Yq8^2 z$rbwqUUOb3{}Z5hXJ=9Z@&LFqn#1^m&k;<@pz`Rum8z88s*w?QS2{Fld{}x6B&)>! z`~iVC!`uA;xs`YUE23e&@AN3O0QO3l6@iAMgkPGexgMO@@d^-Kznd!SSUyym6zaJq z!Z-r$NBmRH?k2Qe=w`2Y`u%vNburSO%iKSyZEq|~jhB$nH*a=-@RkaGt-bbfIE3?1 zG*J_lFB*i?QOz^29T)^8o@!Hj`rhJOEE(VFWck8r#c91P56_ok@%s`mqU>}AXlLa< z*q@kb{<0vRr(q@hUNn?OXBSh}un|_yS+xzvznSQfIA(pg5$~rF1{H& z=K2&Qls1#2aHl+fkz6D3gfYPGv=}Q?;BtYYALFuxAZtW15$yLi!p|7^IUuc3HTh++ zlb9@$rhd2(*n?YV_Ni|5nmls@YZ%MQ7TwOq%^!{pZ~3!qT=~+Awo^KIV87Sd%B~m} z>ZB~cI>;K^GQd1*N%;u%Nf@TkL$a&;HL4R9yzVTky{PQ&>Q=l!VlE^7EO#3dT`il) z@?s)q;6mG?-|$bYdy1Gx%=!krMlrN+a)V|jQJQk>|a8NA|tufgVQ`az>fsYqL!r{Q`lUb;QL2si9b=((X5ix%|navGT4 z7hzK8Eo*WzOLOL%6qlT<+6R{uLC@h53LDOmrB$ROG{4rMNq;LP{79{PelKgX8_AX- zMm=7d4wN&RZ)USK80jLZ3)Smfl5Vq&6{+Q@rBBQ5sCUtu$2#8g>M(5%BMw zWm86)mn9Ec1;~!XXkGehjnhQri}y9)-3}Q~kzc0u`P6^u#qDLh*$Ac8dq>Wl{n`AR z4p_pLU1Vc8tCcQ;dnJ z?bdU)k&j;zSfXZBQur)yJZnF5aIP{vh|3%t`H4yXUonET18p-_V(y0*mV^Qa{UL|A z5l9!c#Ft{TbTzR6a?+|}C8)T7p9qVAHRt@W<%@lMh)7?` zZHpB~pJpu`C2C-2Y?<*JvEa|7#A>zi9PEV2ikj%makqJfsp>CZUDjCJ$sE?}qC|yKajh)+!A#rYUW< zmv$QdntY!P5>{MmY<3UVJv==}li*rTM;k#F8YrC1FFwh|Q@3aTcqti#cxJRspcRG) zC}~Llb!hWgko-4t27z}{Z>n$}T^W$R^w`Jn!WQsigNJlPiYf5mjp?obAC(Z~=l{2# zY)jF9T<3fT;3}NTV~>B()WR+s$5vDrW;c5?s>yO z_LFMP>+VX}#~(d2mN8LbLptFjcg$a+g(ep%qpr~0ANRKkcUQ+hDKY2pAyd@LvSnIT zroxYzfk*KOs4Ck)w)vBi1<8k%y_j#_HCRbyFeW;N+Kw1De7`p@11cHM2a_HucpQVy zC+0MM%vdg4J&1mqFK?^$bVW9{rGHZQThTzFXP6}E;Kd-jXdBZjXGp~{X`QuWDS76> zX*q4?Gur%6gU?ZLsK)?9a_c6PxRna^ucPPvjd9ui>84yT!F$89uKX5e2;_!p4y7iR zC5}!d7>xbJfNAXc_0xNVfh3MU*?nsA!MHsbWW6}lawwh32==ziWkQ~6Jl}87*PXs& zaFla6=|Lc8q4Ow?K!*T-o(u=M)A5SfvCulz$r8bD)e2F&-YDMMAh%xx@1KxvtV!T> zJUMHh95`qtdv<^Z*~4kXv2?+8)?XGj>yn8R76wXH9*Aur+^iyqlpvvn{4n_d2(cq) zNi=4t#`D@^wKGG5`&u+MseC4@vPl9sz|J@Fmr=Dy-2vV&;q$Q{jN0=j^!B&@jbu_8 zob8W=+??&0EtwQP22_!;PI{x51wG&=Vs;kO8Qd}?f|GyKYHK;c^0G*{PTjwE=+|J2 z(p1nKr_~FYY4aSp6zNyJak+++k|TX;rMQ<7Z|Cwv8f%a}2i6lxOPSXP)x1*$Jj|D% z?$_U{47Ux9Zzqdql`|YPmh}eOkWTY7C+P52e{T=xvlcIwDNKhEvQnk+dW>e3y7g9V zv)RC(xZdA{{&0ItTP(HAudS>YzI5EKc(v85($19X?s7UBW|bs!_XJ`o0{hADapUlQ zMvJk`OOqFKK-g4!>T?=xVGwVK%4dCs$qM4!p4|nV;1_QjY){Y5Msa2RZ-=O56F)Mi z3MkH5o|lU0w@o#FWo9>{U5i`;)se*&xHay!eus!@PFRVRuAo%;TRt zXM^iG(ZJmzTgdVU38kz_hj1L;nhMYTo9}cQ4aqrB!1hHVc$SH0pCFee5Y%d0`4t|% zGf|vb7fzb1BlU2xPyC8OF?o)&C==xIG|-b=43(cFK%QdGqjJD}tIfv_4h|5=`eYWn z*7_5a*g~G+`vjolguLG&`dzNhX)_tkq*wnYdsi`iRRsn{PeetKZS9F59MBrMHnKC zlU~)q8@s&H~tCk|qKBhn(3RG~eq3;aBuD_K9> z#;8I~hZgP?XHrA<*&m8Al43NCM~AyQlE;_kJ$yiuJ^9r z^S>A3IXtvb%iJ!af0K;rG9>xM_ff~+;=%3mP;EhIYrMYjhkjwcc7BF)itT!V%GvoY z=dx<0qs}^9MKAYp$!@_bsm_}ljDu))saVJuGAK;uQEGB?skwQ1pWQe!3WL>hD_%b} z|DnBNEV`aeRb9mj?#NoMPb84T)PJA!2fw)?6% za)+towY7ST@qV%b)SUT38I)6V9Xeovbck8}2bYX1X59+(`8pS+BIX+>0hMA!jiRJN zEA!)%bt&U!iB-%S~~47M8P=+9EMjS#U6qm?2JB{rOx)n!F3RjPBzs_^n_q9Ao~0bFZX~WP(#J1 z<|)*TvE8HHYi5&Fd2gy-N@Mdy#~%b(GLO?fl`e|WYw2i~KQi6o!MH&rq@>$Ga5GHO zGwTCPtl!tQl)vgvH|Ra<@Mew=nK=9`7=ezQYheBMZl%Rtxg1BgkSrIMjDz8~Kn zdrbzt5$^NIo9i#Iwyuf2O}&iyet?E){_q3E2TjT#MT0dbBzr>7$_$W=gBvY=v?0&G z| z&##@01LVtd3&dBBpWE-3eq{^T9u#o7-S`Uski4Hs#50z>t^GLP?XTw4ds2O3!Ouq5o`1h0=JCvcYkGV(GzZ(pxC zU%&OqX!Gg(Qp$-a-pvsLWb(xZ60j||%+Jl4UfH&9$S^ZAFI!{r)g2nhSI$&?*Gg~O zUM$55B|hW~PPpX-$ODZ=>lBSvCY^$J`+~OeMRJKBR2U|KXI`f~uiop@@%J^BCBfWg zp{Ka!eL1#2+B*HXGYhM&;2+e{0rCwO1K4}vz}X@$_VjH;PSzIVmbV6)dB}{v0|ziAqDK4 z3x(oNlDm7-`#cUGY~^C;ViMj4P8MmtM&|#1Ff+d7Fc2c$g^3Z20~?hG4yY#%-`pz^x?4q41jT? zVkauH4bHzi-Uspm-Qt3vMm%?~>ccBetEsJ$y3Sbh{aiT`oYEj9JWr=IEv{eCzg;@~ zeQ}AN{Fo4Z-iDW!pRC_(_V6(2px!+b`}niD(ede?1R|MLpOlcg`RF=U$dMu1oR^se zxe3_wwKeLpA0G15??Dj52Rhhw-;7WW*d362Qym+)JSuY+30Rr1!-9-OLJ{k&-r#KD z?b+Y?XCsZfvg75HZPna5!dHm*l8Dn!#&$i*)sf{`-R&o!e%(U?AF=Iv)M#NrJdc%l znSTiqu`eb7L*nYK7)AnI^BUZT9>hY1f$3bIm5;0Esxm=%`~S>MxBdq@1@iPi&?yMO zmJZM<&xF9yfj~$h|NoQ!Pj7;+ODlY3A7@4ayiX8#JOQQxeCvvZ`LP#*{AVlF@c;Ez z=>JvYMhcO7q#Wh8|BK zI*%I+J4;5ey$4}VK3v7;kN*^*by5g#*Tv{o$@lpSwtLZF+z1dn7b>jX%Lat~$Mp># zxngR-tvBlG^5g`4!U4RQWu(t*kP(8a6G2`m61JLKwffhtK)Il7!tUQnevWFfCY#la zvQ{K2`1#3@R*s*yMfHSpMCGyDus?*=`+}2Ht&@hUU7=NOm(~rQI*mghf+Tc>^wa7o z7R%U9CFXM&Ny64iC~x#zd)K6}sHEKH=4M(E|6gaUA89`TrXBR8W2x0AUnU6} z?Ez9Vxum>~fksB%VKVlcgMYxdfPiEXY-j;#DvDQ(n&TVx;IhPa^wxj&LdHTRgHUR6 znqle#xM5OR0~<^RaG?a9gW>uJ2(bG-nzv-@>KhyBJq3Yc4Vu!3ISxgzh1f5tVfr3K z=zmCpc)NEQ!c*SBz!&^Pz~66rYS$hRo(_UaqX4jqK4&vm_qv1U+uFaiWjnRHa!4A# zo9b~Upy2~N2N6eqs6RTPB&b9l<6LN$@$ZdBt1Z-GR>AeXh4b7I`xxN!AEUOXfUCl! zJc&ak{dsfn8s((P<+KwDj9f8HI-iQ{E4g4*^(e^}Yud91Bbn473}D%{2$D{WmJ_>yzMQbpdc-cpoFA!rzoA$-7VeH zDj*Hg(kuC^F3vgcxL?mZZj3wp;t)ai+RuKTwdQ}$-|UfOcz=0y zXXOkO%SQo1uV+XqdXK!OYFVASKafCMoikUUfBN*S$`CgP!<^Praz)xT4Eys9VcB9K zAHdSG@qq*n%?fPDmI#pPLjhD?x~#0MACb&u9cq63=Hrh~{wQb2@yy_d8=*d{#kp-z zLVPFod)cMka$h#&B;sZ`+vI_#R<7?4P`5H1=C@G*)hhuEl{j2xt}y4ZT+y=|zk555P%xv?C{C~C(HdWm2T z94ZL_)9I)46%sm7xjM$*0>I%=osGeyd%866Dn5W$f#M@ji=9F0bH9yOW34(~B2uPR zt$DHiZ+>I0W@=Lu)FBzI)S3@{t~NS_FX%9BEQx;hI^V0M*8|_*{ubMYB=Lk5u=YJdhOYDZjCozzXz86Zr}B@ok}!{w2Ekt

1k>r#C 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 z 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%0Atw`mcCOVtc;K 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

o)(2+ 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 zA=dfFtVupdateTweetOptions?.media_ids; - } - - string resourcePath = TWEET_ENDPOINT; - if (url is string) { - tweetTextWithUrl = tweetText + "\n" + url; - encodedStatusValue = check url:encode(tweetTextWithUrl, UTF_8); - } else { - encodedStatusValue = check url:encode(tweetText, UTF_8); - } - - string urlParams = STATUS + encodedStatusValue + AMBERSAND; - string oauthString = ""; - - if (mediaIds != "") { - string encodedMediaValue = check url:encode(mediaIds, UTF_8); - urlParams = urlParams + MEDIA_IDS + encodedMediaValue + AMBERSAND; - oauthString = oauthString + MEDIA_IDS + encodedMediaValue + AMBERSAND; - } - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - oauthString = oauthString + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + STATUS + encodedStatusValue + AMBERSAND; - - check createRequestHeaders(request, POST, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->post(resourcePath, request); - return check handleStatusResponse(httpResponse); - } - - # Reply to a Tweet. - # - # + tweetText - Text of tweet to update - # + replyID - Tweet id to be replyed - # + url - URL of attachment - # + return - If success, returns 'Tweet' object, else returns error - @display {label: "Reply Tweet"} - isolated remote function replyTweet(@display {label: "Text To Reply"} string tweetText, - @display {label: "Tweet ID To Reply"} int replyID, - @display {label: "URL To Link"} string? url = ()) - returns @tainted @display {label: "Tweet"} Tweet|error { - http:Request request = new; - - string in_reply_to_status_id = replyID.toString(); - - string resourcePath = TWEET_ENDPOINT; - string encodedStatus = check url:encode(tweetText, UTF_8); - string urlParams = STATUS + encodedStatus + AMBERSAND; - string encodedReplyValue = check url:encode(in_reply_to_status_id, UTF_8); - urlParams = urlParams + REPLY_IDS + encodedReplyValue + AMBERSAND; - string oauthString = ""; - - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - oauthString = oauthString + REPLY_IDS + encodedReplyValue + AMBERSAND; - oauthString = oauthString + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + STATUS + encodedStatus + AMBERSAND; - - check createRequestHeaders(request, POST, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->post(resourcePath, request); - return check handleStatusResponse(httpResponse); - } - - # Retweet a Tweet. - # - # + id - Numerical ID of a status - # + return - If success, returns 'Tweet' object, else returns error - @display {label: "Make Retweet"} - isolated remote function retweet(@display {label: "Tweet ID To Retweet"} int id) - returns @tainted @display {label: "Tweet"} Tweet|error { - http:Request request = new; - - string oauthString = ""; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - oauthString = oauthString + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - - string resourcePath = RETWEET_ENDPOINT + id.toString() + JSON; - check createRequestHeaders(request, POST, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - http:Response httpResponse = check self.twitterClient->post(resourcePath, request); - return check handleStatusResponse(httpResponse); - } - - # Delete a Retweet. - # - # + id - Numerical ID of a status - # + return - If success, returns 'Tweet' object, else returns error - @display {label: "Delete Retweet"} - isolated remote function deleteRetweet(@display {label: "ReTweet ID To Delete"} int id) - returns @tainted @display {label: "Tweet"} Tweet|error { - http:Request request = new; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - - string resourcePath = UN_RETWEET_ENDPOINT + id.toString() + JSON; - check createRequestHeaders(request, POST, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - http:Response httpResponse = check self.twitterClient->post(resourcePath, request); - return check handleStatusResponse(httpResponse); - } - - # Search for Tweets matching a query. - # - # + queryStr - Query string need to be searched - # + searchOptions - Optional parameter which specify the search options - # + return - If success, returns 'Tweet' object, else returns error - @display {label: "Search Tweet By String"} - isolated remote function search(@display {label: "Query String To Search"} string queryStr, - @display {label: "Optional Search Options"} SearchOptions? searchOptions = ()) - returns @tainted @display {label: "Array Of Tweet"} Tweet[]|error { - string resourcePath = SEARCH_ENDPOINT; - string encodedQueryValue = check url:encode(queryStr, UTF_8); - string urlParams = "q=" + encodedQueryValue + AMBERSAND; - int? count = searchOptions?.count; - string? geocode = searchOptions?.geocode; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + urlParams; - if (count is int) { - oauthString = "count=" + count.toString() + AMBERSAND + oauthString; - } - if ((geocode is string) && (geocode != "")) { - oauthString = "count=" + geocode + AMBERSAND + oauthString; - } - - http:Request request = new; - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, self.accessToken, - self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - if count is int { - resourcePath = resourcePath + "count=" + count.toString(); - } - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - return check handleSearchTweetResponse(httpResponse); - } - - # Show a Tweet. - # - # + id - Numerical ID of a status - # + trimUser - User object including only numerical ID. Omit parameter to receive the complete user object - # + includeMyRetweet - Include retweets - # + includeEntities - Include entities nodes - # + includeExtAltText - Include alt text of media entities - # + includeCardUri - Include card uri attributes - # + return - If success, returns 'Tweet' object, else returns error - @display {label: "Show Tweet"} - isolated remote function showStatus(@display {label: "Tweet ID To Show"} int id, - @display {label: "Trim User Or Not"} boolean? trimUser = (), - @display {label: "Include Retweet Or Not"} boolean? includeMyRetweet = (), - @display {label: "Include Entities Or Not"} boolean? includeEntities = (), - @display {label: "Include Alt Text Of Media"} boolean? includeExtAltText = (), - @display {label: "Include Card Uri"} boolean? includeCardUri = ()) - returns @tainted @display {label: "Tweet"} Tweet|error { - http:Request request = new; - string resourcePath = SHOW_STATUS_ENDPOINT; - string urlParams = ID + id.toString(); - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = urlParams + AMBERSAND + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - return check handleStatusResponse(httpResponse); - } - - # Delete a Tweet. - # - # + id - Numerical ID of a status - # + return - If success, returns 'Tweet' object, else returns error - @display {label: "Delete Tweet"} - isolated remote function deleteTweet(@display {label: "Tweet ID"} int id) - returns @tainted @display {label: "Tweet"} Tweet|error { - http:Request request = new; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - - string resourcePath = DESTROY_STATUS_ENDPOINT + id.toString() + JSON; - check createRequestHeaders(request, POST, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - http:Response httpResponse = check self.twitterClient->post(resourcePath, request); - return check handleStatusResponse(httpResponse); - } - - # Get a User object. - # - # + userId - Numerical ID of a specific user - # + return - If success, returns 'User' object, else returns error - @display {label: "Get User's Detail"} - isolated remote function getUser(@display {label: "User ID"} int userId) - returns @tainted @display {label: "User"} User|error { - http:Request request = new; - string resourcePath = GET_USER_ENDPOINT; - string encodedValue = check url:encode((userId.toString()), UTF_8); - string urlParams = USER_ID + encodedValue + AMBERSAND; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + urlParams; - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - json response = check handleResponse(httpResponse); - json[] array = response; - json user = array[0]; - return check user.cloneWithType(User); - } - - # Get a User object by username or handle. - # - # + handleName - Username or handle of a specific user - # + return - If success, returns 'User' object, else returns error - @display {label: "Get User's Detail By Username Or Handle"} - isolated remote function getUserByHandle(@display {label: "Username/Handle"} string handleName) - returns @tainted @display {label: "User"} User|error { - http:Request request = new; - string resourcePath = GET_USER_ENDPOINT; - string encodedValue = check url:encode(handleName, UTF_8); - string urlParams = USERNAME + encodedValue + AMBERSAND; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + urlParams; - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - json response = check handleResponse(httpResponse); - json[] array = response; - json user = array[0]; - return check user.cloneWithType(User); - } - - # Get a user's followers. - # - # + userId - Numerical ID of a specific user - # + return - If success, returns 'User' object array, else returns error - @display {label: "Get User's Followers"} - isolated remote function getFollowers(@display {label: "User ID"} int userId) - returns @tainted @display {label: "Array Of User"} User[]|error { - http:Request request = new; - string resourcePath = FOLLOWERS_ENDPOINT; - string encodedValue = check url:encode((userId.toString()), UTF_8); - string urlParams = USER_ID + encodedValue + AMBERSAND; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + urlParams; - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - return check handleUserArrayResponse(httpResponse); - } - - # Get a user's following. - # - # + userId - Numerical ID of a specific user - # + return - If success, returns 'User' object array, else returns error - @display {label: "Get User's Following"} - isolated remote function getFollowing(@display {label: "User ID"} int userId) - returns @tainted @display {label: "Array Of User"} User[]|error { - http:Request request = new; - string resourcePath = FOLLOWINGS_ENDPOINT; - string encodedValue = check url:encode((userId.toString()), UTF_8); - string urlParams = USER_ID + encodedValue + AMBERSAND; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + urlParams; - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - map headerMap = requestHeaders; - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, headerMap); - return check handleUserArrayResponse(httpResponse); - } - - # Get a user's tweets in timeline. - # - # + count - Number of tweets returned - # + sinceId - Minimum tweet ID - # + maxId - Maximum tweet ID - # + trimUser - User object including only numerical ID. Omit parameter to receive the complete user object - # + excludeReplies - Include retweets - # + includeEntities - Include entities nodes - # + return - If success, returns 'Tweet' object array, else returns error - @display {label: "Get Current User's Timeline"} - isolated remote function getUserTimeline(@display {label: "Count"} int? count = (), - @display {label: "Minimum Tweet ID"} int? sinceId = (), - @display {label: "Maximum Tweet ID"} int? maxId = (), - @display {label: "Trim User Or Not"} boolean? trimUser = (), - @display {label: "Exclude Replies Or Not"} boolean? excludeReplies = (), - @display {label: "Include Entities Or Not"} boolean? includeEntities = ()) - returns @tainted @display {label: "Array Of Tweet"} Tweet[]|error { - http:Request request = new; - - string resourcePath = USER_TIMELINE_ENDPOINT; - string oauthString = ""; - string urlParams = ""; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - oauthString = oauthString + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - if (count is int) { - urlParams = COUNT + count.toString(); - oauthString = urlParams + AMBERSAND + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - } - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - return check handleStatusArrayResponse(httpResponse); - } - - # Get Tweets of a specific handle. - # - # + handleName - Handle name of user - # + return - If success, returns array of 'Tweet', else returns error - @display {label: "Get Tweets of specific Handle"} - isolated remote function getUserTweets(@display {label: "Handle Name"} string handleName) - returns @display {label: "Array Of Tweet"} Tweet[]|error { - http:Request request = new; - - string resourcePath = USER_HOME_TIMELINE_ENDPOINT; - string encodedValue = check url:encode(handleName, UTF_8); - string urlParams = USERNAME + encodedValue + AMBERSAND; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp) + urlParams; - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - return check handleStatusArrayResponse(httpResponse); - } - - # Get a user's last ten tweets. - # - # + sinceId - Minimum tweet ID - # + maxId - Maximum tweet ID - # + trimUser - User object including only numerical ID. Omit parameter to receive the complete user object - # + excludeReplies - Include retweets - # + includeEntities - Include entities nodes - # + return - If success, returns 'Tweet' object array, else returns error - @display {label: "Get Last Ten Tweets"} - isolated remote function getLast10Tweets(@display {label: "Minimum Tweet ID"} int? sinceId = (), - @display {label: "Maximum Tweet ID"} int? maxId = (), - @display {label: "Trim User Or Not"} boolean? trimUser = (), - @display {label: "Exclude Replies Or Not"} boolean? excludeReplies = (), - @display {label: "Include Entities Or Not"} boolean? includeEntities = ()) - returns @tainted @display {label: "Array Of Tweet"} Tweet[]|error { - http:Request request = new; - string resourcePath = USER_TIMELINE_ENDPOINT ; - int count = 10; - string urlParams = COUNT + count.toString(); - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = urlParams + AMBERSAND + getOAuthParameters(self.apiKey, self.accessToken, nonce, timeStamp); - - map requestHeaders = check createRequestHeaderMap(request, GET, resourcePath, self.apiKey, self.apiSecret, - self.accessToken, self.accessTokenSecret, oauthString, nonce, timeStamp); - resourcePath = resourcePath + QUESTION_MARK + urlParams; - http:Response httpResponse = check self.twitterClient->get(resourcePath, requestHeaders); - return check handleStatusArrayResponse(httpResponse); - } -} diff --git a/ballerina/icon.png b/ballerina/icon.png deleted file mode 100644 index 40d78f26f30eb605e2791776dd7842296b15c2bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8098 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 diff --git a/ballerina/issue_template.md b/ballerina/issue_template.md deleted file mode 100644 index 757e13e..0000000 --- a/ballerina/issue_template.md +++ /dev/null @@ -1,18 +0,0 @@ -**Description:** - - -**Suggested Labels:** - - -**Suggested Assignees:** - - -**Affected Product Version:** - -**OS, DB, other environment details and versions:** - -**Steps to reproduce:** - - -**Related Issues:** - \ No newline at end of file diff --git a/ballerina/modules/listener/EventDispatcher.bal b/ballerina/modules/listener/EventDispatcher.bal deleted file mode 100644 index e29e46c..0000000 --- a/ballerina/modules/listener/EventDispatcher.bal +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/log; - -isolated class EventDispatcher { - private final boolean isOnTweet; - private final boolean isOnReply; - private final boolean isOnReTweet; - private final boolean isOnQuoteTweet; - private final boolean isOnFollower; - private final boolean isOnFavourite; - private final boolean isOnDelete; - private final boolean isOnMention; - private final HttpToTwitterAdaptor adaptor; - - isolated function init(HttpToTwitterAdaptor adaptor) { - self.adaptor = adaptor; - - string[] methodNames = adaptor.getServiceMethodNames(); - self.isOnTweet = isMethodAvailable("onTweet", methodNames); - self.isOnReply = isMethodAvailable("onReply", methodNames); - self.isOnReTweet = isMethodAvailable("onReTweet", methodNames); - self.isOnQuoteTweet = isMethodAvailable("onQuoteTweet", methodNames); - self.isOnFollower = isMethodAvailable("onFollower", methodNames); - self.isOnFavourite = isMethodAvailable("onFavourite", methodNames); - self.isOnDelete = isMethodAvailable("onDelete", methodNames); - self.isOnMention = isMethodAvailable("onMention", methodNames); - - if (methodNames.length() > 0) { - foreach string methodName in methodNames { - log:printError("Unrecognized method [" + methodName + "] found in user implementation."); - } - } - } - - isolated function dispatch(json event) returns error? { - map eventMap = > event; - if(eventMap.hasKey("tweet_create_events")) { - TweetEvent eventPayload = check event.cloneWithType(TweetEvent); - string? retweetedStatus = (eventPayload.tweet_create_events[0])?.retweeted_status?.created_at; - int? replyToId = (eventPayload.tweet_create_events[0])?.in_reply_to_status_id; - int? quoteStatusId = (eventPayload.tweet_create_events[0])?.quoted_status_id; - if (eventMap.hasKey("user_has_blocked")) { - if (self.isOnMention) { - check self.adaptor.callOnMention(eventPayload); - } - } else if (retweetedStatus is string) { - if (self.isOnReTweet) { - check self.adaptor.callOnReTweet(eventPayload); - } - } else if (replyToId is int) { - if (self.isOnReply) { - check self.adaptor.callOnReply(eventPayload); - } - } else if (quoteStatusId is int) { - if (self.isOnQuoteTweet) { - check self.adaptor.callOnQuoteTweet(eventPayload); - } - } else { - if (self.isOnTweet) { - check self.adaptor.callOnTweet(eventPayload); - } - } - } else if (eventMap.hasKey("follow_events")) { - FollowEvent eventPayload = check event.cloneWithType(FollowEvent); - if (self.isOnFollower) { - check self.adaptor.callOnFollower(eventPayload); - } - } else if (eventMap.hasKey("favorite_events")) { - FavouriteEvent eventPayload = check event.cloneWithType(FavouriteEvent); - if (self.isOnFavourite) { - check self.adaptor.callOnFavourite(eventPayload); - } - } else if (eventMap.hasKey("tweet_delete_events")) { - DeleteTweetEvent eventPayload = check event.cloneWithType(DeleteTweetEvent); - if (self.isOnDelete) { - check self.adaptor.callOnDelete(eventPayload); - } - } else { - return error("Invalid payload or an eventtype listener currently does not support"); - } - } -} diff --git a/ballerina/modules/listener/Module.md b/ballerina/modules/listener/Module.md deleted file mode 100644 index 365d685..0000000 --- a/ballerina/modules/listener/Module.md +++ /dev/null @@ -1,121 +0,0 @@ -## Overview - -The `ballerinax/twitter.'listener` module provides a Listener to catch events triggered from your Twitter account. This functionality is provided by [Twitter Account Activity API](https://developer.twitter.com/en/docs/twitter-api/enterprise/account-activity-api/overview). - -## Supported trigger types -1. "onTweet" - A new tweet was created -2. "onReply" - A tweet was replied -3. "onReTweet" - A tweet was retweeted -4. "onQuoteTweet" - A quoted tweet was deleted -5. "onFollower" - A user was followed y someother user -6. "onFavourite" - A tweet was liked/favourited by a user -7. "onDelete" - A tweet was deleted -8. "onMention" - A user was mentioned - -## Prerequisites -Before using this connector in your Ballerina application, complete the following: - -* Create a Twitter developer account. -* Subscribe to events and obtain verification token - 1. Visit https://developer.twitter.com/en/portal/dashboard, create your own Twitter App. - 2. Get credentials such as API key, API key secret, Access token and Access token secret. - 3. In `Authentication settings` section of your twitter App add the callback url. - -## Quickstart -To use the Twitter Listener in your Ballerina application, update the .bal file as follows: - -### Step 1: Import listener -Import the `ballerinax/twitter.'listener` module as shown below. -```ballerina -import ballerinax/twitter.'listener as twitter; -``` - -### Step 2: Create a new listener instance -Create a `twitter:ListenerConfiguration` using your `twitter Verification Token`, port and initialize the listener with it. -```ballerina -configurable string apiKey = ?; -configurable string apiSecret = ?; -configurable string accessToken = ?; -configurable string accessTokenSecret = ?; -string callbackUrl = ?; -string environment = ?; -string port = ?; - -int PORT = check ints:fromString(port); - -listener twitter:Listener twitterListener = new (PORT, apiKey, apiSecret, accessToken, accessTokenSecret, callbackUrl, environment); -``` - -### Step 3: Implement a listener remote function -1. Now you can implement a listener remote function supported by this connector. - -* `onTweet`, `onReply`, `onReTweet`, `onQuoteTweet`, `onFollower`, `onFavourite`, -`onDelete`, `onMention` are the supported remote functions. - -* Write a remote function to receive a particular event type. Implement your logic within that function as shown in the below sample. - -* Following is a simple sample for using Twitter listener -```ballerina -import ballerina/log; -import ballerinax/twitter.'listener as twitter; - -configurable string apiKey = ?; -configurable string apiSecret = ?; -configurable string accessToken = ?; -configurable string accessTokenSecret = ?; -string callbackUrl = ?; -string environment = ?; -string port = ?; - -int PORT = check ints:fromString(port); - -listener twitter:Listener twitterListener = new (PORT, apiKey, apiSecret, accessToken, accessTokenSecret, callbackUrl, environment); - -service / on twitterListener { - isolated remote function onTweet(TweetEvent event) returns error? { - log:printInfo("New Tweet"); - log:printInfo((event.tweet_create_events).toJsonString()); - } -} -``` -2. Use `bal run` command to compile and run the Ballerina program. - -* Register the request URL - 1. Run your ballerina service (similar to above sample) on prefered port. - 2. Start ngrok on same port using the command ``` ./ngrok http 9090 ``` - 3. In `Authentication settings` section of your twitter App settings, paste the URL issued by ngrok following with your service path (eg : ```https://bf31de7fd929.ngrok.io/webhook/twitter```) (`'/webhook/twitter'` should be added after thr ngrok URL). - -* Receiving events - * After successful addition of callback url, your ballerina service will receive events. - -**NOTE:** -If the user's logic inside any remote method of the connector listener throws an error, connector internal logic will -covert that error into a HTTP 500 error response and respond to the webhook (so that event may get redelivered), -otherwise it will respond with HTTP 200 OK. Due to this architecture, if the user logic in listener remote operations -includes heavy processing, the user may face HTTP timeout issues for webhook responses. In such cases, it is advised to -process events asynchronously as shown below. - -```ballerina -import ballerinax/twitter.'listener as twitter; - -configurable string apiKey = ?; -configurable string apiSecret = ?; -configurable string accessToken = ?; -configurable string accessTokenSecret = ?; -configurable string callbackUrl = ?; -configurable string environment = ?; -configurable string port = ?; - -int PORT = check ints:fromString(port); - -listener twitter:Listener twitterListener = new (PORT, apiKey, apiSecret, accessToken, accessTokenSecret, callbackUrl, environment); - -service / on twitterListener { - remote function onTweet(twitter:TweetEvent eventInfo) returns error? { - _ = @strand { thread: "any" } start userLogic(eventInfo); - } -} -function userLogic(twitter:TweetEvent eventInfo) returns error? { - // Write your logic here -} -``` diff --git a/ballerina/modules/listener/constants.bal b/ballerina/modules/listener/constants.bal deleted file mode 100644 index 8b24741..0000000 --- a/ballerina/modules/listener/constants.bal +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -public const string TWEET = "tweet_create_events"; - -const string UTF_8 = "UTF-8"; - -public const POST = "POST"; -public const GET = "GET"; - -const INVALID_SIGNATURE = "Invalid Signature"; -const string TWITTER_ERROR = "Twitter Error"; diff --git a/ballerina/modules/listener/http_service.bal b/ballerina/modules/listener/http_service.bal deleted file mode 100644 index 0bb8c35..0000000 --- a/ballerina/modules/listener/http_service.bal +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/crypto; -import ballerina/http; - -isolated service class HttpService { - *http:Service; - private final HttpToTwitterAdaptor adaptor; - private final EventDispatcher eventDispatcher; - private final string apiKey; - private final string apiSecret; - private final string accessKey; - private final string accessKeySecret; - private final string callbackUrl; - - isolated function init(HttpToTwitterAdaptor adaptor, string apiKey, string apiSecret, string accessKey, string accessKeySecret, string callbackUrl, string environmentName) { - self.adaptor = adaptor; - self.eventDispatcher = new (adaptor); - self.callbackUrl = callbackUrl; - self.apiKey = apiKey; - self.apiSecret = apiSecret; - self.accessKey = accessKey; - self.accessKeySecret = accessKeySecret; - } - - isolated resource function post webhook/twitter(http:Caller caller, http:Request twitterRequest) returns - @tainted error? { - json payload = check twitterRequest.getJsonPayload(); - check caller->respond(http:STATUS_OK); - error? dispatchResult = self.eventDispatcher.dispatch(payload); - if (dispatchResult is error) { - return error("Failed to dispatch event : ", 'error = dispatchResult); - } - return; - } - - isolated resource function get webhook/twitter(http:Caller caller, http:Request twitterRequest) returns - @tainted error? { - map queryParams = twitterRequest.getQueryParams(); - string[]? crc_token = queryParams["crc_token"]; - string token = ""; - string base64Result= ""; - - if (crc_token is string[]){ - string apiSecret = self.apiSecret; - token = crc_token[0]; - byte[] inputArr = token.toBytes(); - byte[] keyArr = apiSecret.toBytes(); - byte[] output = check crypto:hmacSha256(inputArr, keyArr); - base64Result = output.toBase64(); - json response = {response_token: "sha256=" + base64Result}; - http:ListenerError? respond = caller->respond(<@untainted>(response)); - return respond; - } else { - return error(TWITTER_ERROR, message = "Error in CRC token validation"); - } - } - - isolated function validateCRCToken(http:Caller caller, http:Request twitterRequest, string apiSecret) returns @tainted error|json { - map queryParams = twitterRequest.getQueryParams(); - string[]? crc_token = queryParams["crc_token"]; - string token = ""; - string base64Result= ""; - - if (crc_token is string[]){ - token = crc_token[0]; - byte[] inputArr = token.toBytes(); - byte[] keyArr = apiSecret.toBytes(); - byte[] output = check crypto:hmacSha256(inputArr, keyArr); - base64Result = output.toBase64(); - json response = {response_token: "sha256=" + base64Result}; - http:ListenerError? respond = caller->respond(<@untainted>(response)); - return respond; - } else { - return error(TWITTER_ERROR, message = "Error in CRC token validation"); - } - } -} diff --git a/ballerina/modules/listener/init.bal b/ballerina/modules/listener/init.bal deleted file mode 100644 index 0c3078c..0000000 --- a/ballerina/modules/listener/init.bal +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/jballerina.java; - -isolated function init() { - setModule(); -} - -isolated function setModule() = @java:Method { - 'class: "org.ballerinalang.twitter.ModuleUtils" -} external; diff --git a/ballerina/modules/listener/listener.bal b/ballerina/modules/listener/listener.bal deleted file mode 100644 index e4d9085..0000000 --- a/ballerina/modules/listener/listener.bal +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/http; - -# Listener for Twitter connector -@display {label: "Twitter Listener", iconPath: "resources/twitter.svg"} -public class Listener { - private HttpService? httpService; - private http:Listener httpListener; - private string callbackUrl = ""; - private string apiKey = ""; - private string apiSecret = ""; - private string accessKey = ""; - private string accessKeySecret = ""; - private string environment = ""; - private string webhookId = ""; - - public isolated function init(@display{label: "Port To Listen On"} int port, - @display{ label: "Twitter API Key" } string apiKey, - @display { label: "Twitter API Key Secret" } string apiSecret, - @display { label: "Twitter Access Token" } string accessKey, - @display { label: "Twitter Access Token Secret" } string accessKeySecret, - @display{label: "Callback URL"} string callbackUrl, - @display { label: "Environment" } string environment) returns @tainted error? { - self.httpListener = check new (port); - self.apiKey = apiKey; - self.apiSecret = apiSecret; - self.accessKey = accessKey; - self.accessKeySecret = accessKeySecret; - self.callbackUrl = callbackUrl; - self.environment = environment; - self.httpService = (); - } - - public isolated function attach(SimpleHttpService s, string[]|string? name) returns @tainted error? { - HttpToTwitterAdaptor adaptor = check new (s); - HttpService currentHttpService = new (adaptor, self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.callbackUrl, self.environment); - self.httpService = currentHttpService; - check self.httpListener.attach(currentHttpService, name); - } - - public isolated function detach(SimpleHttpService s) returns @tainted error? { - HttpService? currentHttpService = self.httpService; - if currentHttpService is HttpService { - return self.httpListener.detach(currentHttpService); - } - } - - public isolated function 'start() returns @tainted error? { - error? listenerError = self.httpListener.'start(); - check registerWebHookURL(self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.callbackUrl, self.environment); - check addSubscription(self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.environment); - return listenerError; - } - - public isolated function gracefulStop() returns @tainted error? { - check deleteWebHookURL(self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.webhookId, self.environment); - check deleteSubscription(self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.environment); - return self.httpListener.gracefulStop(); - } - - public isolated function immediateStop() returns @tainted error? { - check deleteWebHookURL(self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.webhookId, self.environment); - check deleteSubscription(self.apiKey, self.apiSecret, self.accessKey, self.accessKeySecret, self.environment); - return self.httpListener.immediateStop(); - } -} diff --git a/ballerina/modules/listener/natives.bal b/ballerina/modules/listener/natives.bal deleted file mode 100644 index 9676fc1..0000000 --- a/ballerina/modules/listener/natives.bal +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/jballerina.java; - -isolated class HttpToTwitterAdaptor { - - isolated function init(SimpleHttpService serviceObj) returns error? { - externInit(self, serviceObj); - } - - isolated function callOnTweet(TweetEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnReTweet(TweetEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnReply(TweetEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnFollower(FollowEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnFavourite(FavouriteEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnDelete(DeleteTweetEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnQuoteTweet(TweetEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - isolated function callOnMention(TweetEvent event) - returns error? = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; - - # Invoke native method to retrieve implemented method names in the subscriber service - # - # + return - {@code string[]} containing the method-names in current implementation - isolated function getServiceMethodNames() returns string[] = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" - } external; -} - -isolated function externInit(HttpToTwitterAdaptor adaptor, SimpleHttpService serviceObj) = @java:Method { - 'class: "org.ballerinalang.twitter.NativeHttpToTwitterAdaptor" -} external; diff --git a/ballerina/modules/listener/records.bal b/ballerina/modules/listener/records.bal deleted file mode 100644 index 11cdd0e..0000000 --- a/ballerina/modules/listener/records.bal +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -# Information about creation event of Tweet/Retweet/Reply/Mention/Quote Tweet -# -# + for_user_id - User ID -# + user_has_blocked - Only found in mention events -# + tweet_create_events - Description about creation events/activity -public type TweetEvent record { - string for_user_id; - boolean? user_has_blocked?; - Tweet[] tweet_create_events; -}; - -# Information about favourite event -# -# + for_user_id - User ID -# + favorite_events - Description about event when someone make tweet favourited -public type FavouriteEvent record { - string for_user_id; - FavouriteEventInfo[] favorite_events; -}; - -# Defines a favourite event -# -# + id - ID of favourited tweet -# + created_at - Event creation time -# + timestamp_ms - Favourited event timestamp -# + favorited_status - Tweet object assiciated with event -# + user - User object who favourited tweet -public type FavouriteEventInfo record { - string id; - string? created_at?; - int? timestamp_ms?; - Tweet? favorited_status?; - User? user?; -}; - -# Information about delete event -# -# + for_user_id - User ID -# + tweet_delete_events - Description about delete events -public type DeleteTweetEvent record { - string for_user_id; - DeleteEvent[] tweet_delete_events; -}; - -# Defines a delete event -# -# + status - Information about tweet deleted -# + timestamp_ms - Deletion operation timestamp -public type DeleteEvent record { - DeleteStatus? status?; - string? timestamp_ms?; -}; - -# Describes tweet being deleted -# -# + id - ID of tweet deleted -# + user_id - User ID belong to tweet -public type DeleteStatus record { - string? id?; - string? user_id?; -}; - -# Information about follow event -# -# + for_user_id - User ID -# + follow_events - Description about events when someone follows user -public type FollowEvent record { - string for_user_id; - FollowEventInfo[] follow_events; -}; - -# Defines a follow event -# -# + 'type - Type of event -# + created_timestamp - Event created timestamp -# + target - User object follwed -# + 'source - User object which made the follow request -public type FollowEventInfo record { - string 'type; - string? created_timestamp?; - json? target?; - json? 'source?; -}; - -// public type TwitterEvent TweetEvent|MentionChangeEvent; - -# Define Tweet. -# -# + created_at - Created time of the status -# + id - ID of tweet -# + id_str - ID of tweet in String -# + text - Text message of the status -# + truncated - Whether the status is truncated or not -# + entities - Entity of status -# + 'source - Description about the source -# + in_reply_to_status_id - ID of an existing status that update is in reply to -# + in_reply_to_status_id_str - ID of an existing status that update is in reply to in string -# + in_reply_to_user_id - ID of an existing user update is in reply to -# + in_reply_to_user_id_str - ID of an existing user update is in reply to in string -# + in_reply_to_screen_name - Screen name of an existing user update is in reply to in string -# + user - Detail of user post -# + geo - Geo location details (longitude and latitude) -# + coordinates - Coordinates of location where posted -# + place - Location name where posted -# + contributors - Contributors to a tweet -# + extended_tweet - Extended tweet or not -# + quoted_status_id - ID of quoted tweet -# + quoted_status_id_str - ID of quoted tweet in string -# + quoted_status - Quoted tweet or not -# + quoted_status_permalink - Quoted tweet link -# + is_quote_status - Indicate the quote status -# + quote_count - Number of quoted tweets -# + reply_count - Number of replies -# + retweet_count - Count of the retweeted status -# + favorite_count - Count of the favourites -# + favorited - Whether the status is favorited or not -# + retweeted - Whether the status is retweeted or not -# + filter_level - Filter Level -# + lang - Language of tweet -# + timestamp_ms - Tweet created timestamp -# + retweeted_status - Information about retweeted tweet -# + possibly_sensitive - Sensitivie or not -public type Tweet record { - string created_at; - int id; - string id_str?; - string text; - boolean truncated?; - json? entities?; - json? 'source?; - int? in_reply_to_status_id?; - string? in_reply_to_status_id_str?; - int? in_reply_to_user_id?; - string? in_reply_to_user_id_str?; - string? in_reply_to_screen_name?; - User? user?; - GeoLocation? geo?; - json coordinates?; - json place?; - json contributors?; - json extended_tweet?; - int? quoted_status_id?; - string? quoted_status_id_str?; - Tweet? quoted_status?; - json? quoted_status_permalink?; - boolean? is_quote_status?; - int quote_count?; - int reply_count?; - int retweet_count?; - int favorite_count?; - boolean favorited?; - boolean retweeted?; - string? filter_level?; - string? lang?; - string? timestamp_ms?; - ReTweet? retweeted_status?; - boolean possibly_sensitive?; -}; - -# Define a ReTweet. -# -# + created_at - Created time of the status -# + id - ID of tweet -# + id_str - ID of tweet in String -# + text - Text message of the status -# + truncated - Whether the status is truncated or not -# + entities - Entity of status -# + 'source - Description about the source -# + in_reply_to_status_id - ID of an existing status that update is in reply to -# + in_reply_to_status_id_str - ID of an existing status that update is in reply to in string -# + in_reply_to_user_id - ID of an existing user update is in reply to -# + in_reply_to_user_id_str - ID of an existing user update is in reply to in string -# + in_reply_to_screen_name - Screen name of an existing user update is in reply to in string -# + user - Detail of user post -# + geo - Geo location details (longitude and latitude) -# + coordinates - Coordinates of location where posted -# + place - Location name where posted -# + contributors - Contributors to a tweet -# + extended_tweet - Extended tweet or not -# + quoted_status_id - ID of quoted tweet -# + quoted_status_id_str - ID of quoted tweet in string -# + quoted_status - Quoted tweet or not -# + quoted_status_permalink - Quoted tweet link -# + is_quote_status - Indicate the quote status -# + quote_count - Number of quoted tweets -# + reply_count - Number of replies -# + retweet_count - Count of the retweeted status -# + favorite_count - Count of the favourites -# + favorited - Whether the status is favorited or not -# + retweeted - Whether the status is retweeted or not -# + filter_level - Filter Level -# + lang - Language of tweet -# + timestamp_ms - Tweet created timestamp -# + retweeted_status - Information about retweeted tweet -# + possibly_sensitive - Sensitivie or not -public type ReTweet record { - string created_at; - int id; - string id_str?; - string text; - boolean truncated?; - json entities?; - json 'source?; - int? in_reply_to_status_id?; - string? in_reply_to_status_id_str?; - int? in_reply_to_user_id?; - string? in_reply_to_user_id_str?; - string? in_reply_to_screen_name?; - User? user?; - GeoLocation? geo?; - json coordinates?; - json place?; - json contributors?; - json extended_tweet?; - int? quoted_status_id?; - string? quoted_status_id_str?; - Tweet? quoted_status?; - json quoted_status_permalink?; - boolean is_quote_status?; - int quote_count?; - int reply_count?; - int retweet_count?; - int favorite_count?; - boolean favorited?; - boolean retweeted?; - string? filter_level?; - string? lang?; - string? timestamp_ms?; - Tweet? retweeted_status?; - boolean possibly_sensitive?; -}; - -# Define User. -# -# + id - Id of user -# + id_str - Id of user in string -# + name - Display name of user -# + screen_name - Screen name of user -# + location - Location of user -# + description - Description about the user -# + protected - Protected status of user -# + verified - Verified status of user -# + url - Urls associated with user -# + followers_count - Count of the followers -# + friends_count - Count of the friends(User's following) -# + listed_count - Number of lists -# + favourites_count - Number of favourited tweets -# + statuses_count - Number of tweets -# + created_at - Created time of user -# + profile_banner_url - (Deprecated) Value will be Null -# + profile_image_url_https - (Deprecated) Value will be Null -# + default_profile - (Deprecated) Value will be Null -# + default_profile_image - (Deprecated) Value will be Null -# + withheld_in_countries - (Deprecated) Value will be Null -# + withheld_scope - (Deprecated) Value will be Null -# + utc_offset - Difference between UTC and current time of location.(Deprecated) Value will be Null -# + time_zone - Information of time zone.(Deprecated) Value will be Null -# + lang - Language of user.(Deprecated) Value will be Null -# + geo_enabled - Information about location.(Deprecated) Value will be Null -# + following - (Deprecated) Value will be Null -# + follow_request_sent - (Deprecated) Value will be Null -# + notifications - (Deprecated) Value will be Null -# + has_extended_profile - (Deprecated) Value will be Null -# + profile_location - (Deprecated) Value will be Null -# + contributors_enabled - (Deprecated) Value will be Null -# + profile_image_url - (Deprecated) Value will be Null -# + profile_background_color - (Deprecated) Value will be Null -# + profile_background_image_url - (Deprecated) Value will be Null -# + profile_background_image_url_https - (Deprecated) Value will be Null -# + profile_background_tile - (Deprecated) Value will be Null -# + profile_link_color - (Deprecated) Value will be Null -# + profile_sidebar_border_color - (Deprecated) Value will be Null -# + profile_sidebar_fill_color - (Deprecated) Value will be Null -# + profile_text_color - (Deprecated) Value will be Null -# + profile_use_background_image - (Deprecated) Value will be Null -# + is_translator - (Deprecated) Value will be Null -# + is_translation_enabled - (Deprecated) Value will be Null -# + translator_type - (Deprecated) Value will be Null -public type User record { - int id; - string id_str; - string name; - string screen_name; - string? location?; - string? description?; - boolean protected?; - boolean verified?; - string? url?; - int followers_count?; - int friends_count?; - int listed_count?; - int favourites_count?; - int statuses_count?; - string created_at?; - string profile_banner_url?; - string profile_image_url_https?; - boolean default_profile?; - boolean default_profile_image?; - string[]? withheld_in_countries?; - string? withheld_scope?; - string? utc_offset?; - string? time_zone?; - string? lang?; - boolean? geo_enabled?; - string? following?; - string? follow_request_sent?; - string? notifications?; - string? has_extended_profile?; - string? profile_location?; - boolean? contributors_enabled?; - string? profile_image_url?; - string? profile_background_color?; - string? profile_background_image_url?; - string? profile_background_image_url_https?; - boolean? profile_background_tile?; - string? profile_link_color?; - string? profile_sidebar_border_color?; - string? profile_sidebar_fill_color?; - string? profile_text_color?; - boolean? profile_use_background_image?; - boolean? is_translator?; - boolean? is_translation_enabled?; - string? translator_type?; -}; - -# Define the geo location details. -# -# + latitude - Latitude of the location -# + longitude - Longitude of the location -public type GeoLocation record { - float latitude?; - float longitude?; -}; diff --git a/ballerina/modules/listener/resources/twitter.svg b/ballerina/modules/listener/resources/twitter.svg deleted file mode 100644 index d6c57d6..0000000 --- a/ballerina/modules/listener/resources/twitter.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - E3E79301-AE23-4A31-BD7D-F6EF4696EC89 - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ballerina/modules/listener/utils.bal b/ballerina/modules/listener/utils.bal deleted file mode 100644 index ddbb58e..0000000 --- a/ballerina/modules/listener/utils.bal +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/crypto; -import ballerina/http; -import ballerina/regex; -import ballerina/time; -import ballerina/url; -import ballerina/uuid; - -isolated function registerWebHookURL(string apiKey, string apiSecret, string accessToken, string accessTokenSecret, string callback, string environmentName) returns @tainted error? { - http:Client httpClient = check new ("https://api.twitter.com"); - http:Request request = new; - - string encodedValue = check url:encode(callback, UTF_8); - request.setJsonPayload({"url":encodedValue}); - string resourcePath = "/1.1/account_activity/all/" + environmentName + "/webhooks.json"; - - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(apiKey, accessToken, nonce, timeStamp); - var requestHeaders = createRequestHeaders(request, POST, resourcePath, apiKey, apiSecret, - accessToken, accessTokenSecret, oauthString, nonce, timeStamp); - - if (requestHeaders is error) { - error err = error(TWITTER_ERROR, message = "Error occurred while encoding"); - return err; - } else { - http:Response httpResponse = check httpClient->post(resourcePath, request); - var response = httpResponse.getJsonPayload(); - if (response is json) { - return; - } else { - return error(TWITTER_ERROR, message = "Error in registering Webhook"); - } - } -} - -isolated function addSubscription(string apiKey, string apiSecret, string accessToken, string accessTokenSecret, string environmentName) returns @tainted error? { - http:Client httpClient = check new ("https://api.twitter.com"); - http:Request request = new; - string resourcePath = "/1.1/account_activity/all/" + environmentName + "/subscriptions.json"; - - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - string oauthString = getOAuthParameters(apiKey, accessToken, nonce, timeStamp); - var requestHeaders = createRequestHeaders(request, POST, resourcePath, apiKey, apiSecret, - accessToken, accessTokenSecret, oauthString, nonce, timeStamp); - - if (requestHeaders is error) { - error err = error(TWITTER_ERROR, message = "Error occurred while encoding"); - return err; - } else { - http:Response httpResponse = check httpClient->post(resourcePath, request); - var response = httpResponse.getJsonPayload(); - if (response is json) { - return; - } else { - return error(TWITTER_ERROR, message = "Error in adding Subscription"); - } - } -} - -isolated function deleteWebHookURL(string apiKey, string apiSecret, string accessToken, string accessTokenSecret, string webhookId, string environmentName) returns @tainted error? { - http:Client httpClient = check new ("https://api.twitter.com"); - http:Request request = new; - string resourcePath = "/1.1/account_activity/all/" + environmentName + "/webhooks/" + webhookId + ".json"; - string oauthString = ""; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - oauthString = oauthString + getOAuthParameters(apiKey, accessToken, nonce, timeStamp); - var requestHeaders = createRequestHeaders(request, POST, resourcePath, apiKey, apiSecret, - accessToken, accessTokenSecret, oauthString, nonce, timeStamp); - - if (requestHeaders is error) { - error err = error(TWITTER_ERROR, message = "Error occurred while encoding"); - return err; - } else { - http:Response|error httpResponse = httpClient->delete(resourcePath, request); - if (httpResponse is http:Response) { - return null; - } - } -} - -isolated function deleteSubscription(string apiKey, string apiSecret, string accessToken, string accessTokenSecret, string environmentName) returns @tainted error? { - http:Client httpClient = check new ("https://api.twitter.com"); - http:Request request = new; - string resourcePath = "/1.1/account_activity/all/" + environmentName + "/subscriptions.json"; - string oauthString = ""; - string nonce = uuid:createType1AsString(); - [int, decimal] & readonly currentTime = time:utcNow(); - string timeStamp = currentTime[0].toString(); - oauthString = oauthString + getOAuthParameters(apiKey, accessToken, nonce, timeStamp); - var requestHeaders = createRequestHeaders(request, POST, resourcePath, apiKey, apiSecret, - accessToken, accessTokenSecret, oauthString, nonce, timeStamp); - - if (requestHeaders is error) { - error err = error(TWITTER_ERROR, message = "Error occurred while encoding"); - return err; - } else { - http:Response|error httpResponse = httpClient->delete(resourcePath, request); - if (httpResponse is http:Response) { - return null; - } - } -} - -isolated function getWebHookId(json webHookResult) returns @tainted string { - json|error webHookId = webHookResult.id; - if (webHookId is json) { - return webHookId.toString(); - } else { - return ""; - } -} - -isolated function getOAuthParameters(string consumerKey, string accessToken, string nonce, string timeStamp) returns string { - string paramStr = "oauth_consumer_key=" + consumerKey + "&oauth_nonce=" + nonce + - "&oauth_signature_method=HMAC-SHA1&oauth_timeStamp=" + timeStamp + "&oauth_token=" + accessToken - + "&oauth_version=1.0&"; - return paramStr; -} - -isolated function createRequestHeaders(http:Request request, string httpMethod, string resourcePath, string consumerKey, - string consumerSecret, string accessToken, string accessTokenSecret, string paramStr, string nonce, string timeStamp) returns error? { - string serviceEndpoint = "https://api.twitter.com" + resourcePath; - string paramString = paramStr.substring(0, paramStr.length() - 1); - string encodedServiceEPValue = check url:encode(serviceEndpoint, UTF_8); - string encodedParamStrValue = check url:encode(paramString, UTF_8); - string encodedConsumerSecretValue = check url:encode(consumerSecret, UTF_8); - string encodedAccessTokenSecretValue = check url:encode(accessTokenSecret, UTF_8); - - //Create a signature - string baseString = httpMethod + "&" + encodedServiceEPValue + "&" + encodedParamStrValue; - byte[] baseStringByte = baseString.toBytes(); - string keyStr = encodedConsumerSecretValue + "&" + encodedAccessTokenSecretValue; - byte[] keyArrByte = keyStr.toBytes(); - string signature = (check crypto:hmacSha1(baseStringByte, keyArrByte)).toBase64(); - - string encodedSignatureValue = check url:encode(signature, UTF_8); - string encodedaccessTokenValue = check url:encode(accessToken, UTF_8); - - string oauthHeaderString = "OAuth oauth_consumer_key=\"" + consumerKey + - "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timeStamp=\"" + timeStamp + - "\",oauth_nonce=\"" + nonce + "\",oauth_version=\"1.0\",oauth_signature=\"" + - encodedSignatureValue + "\",oauth_token=\"" + encodedaccessTokenValue + "\""; - request.setHeader("Authorization", regex:replaceAll(oauthHeaderString, "\\\\", "")); - return (); -} - -# Retrieves whether the particular remote method is available. -# -# + methodName - Name of the required method -# + methods - All available methods -# + return - `true` if method available or else `false` -isolated function isMethodAvailable(string methodName, string[] methods) returns boolean { - boolean isAvailable = methods.indexOf(methodName) is int; - if (isAvailable) { - var index = methods.indexOf(methodName); - if (index is int) { - _ = methods.remove(index); - } - } - return isAvailable; -} diff --git a/ballerina/pull_request_template.md b/ballerina/pull_request_template.md deleted file mode 100644 index 9b32185..0000000 --- a/ballerina/pull_request_template.md +++ /dev/null @@ -1,52 +0,0 @@ -## Purpose -> Describe the problems, issues, or needs driving this feature/fix and include links to related issues in the following format: Resolves issue1, issue2, etc. - -## Goals -> Describe the solutions that this feature/fix will introduce to resolve the problems described above - -## Approach -> Describe how you are implementing the solutions. Include an animated GIF or screenshot if the change affects the UI (email documentation@wso2.com to review all UI text). Include a link to a Markdown file or Google doc if the feature write-up is too long to paste here. - -## User stories -> Summary of user stories addressed by this change> - -## Release note -> Brief description of the new feature or bug fix as it will appear in the release notes - -## Documentation -> Link(s) to product documentation that addresses the changes of this PR. If no doc impact, enter “N/A” plus brief explanation of why there’s no doc impact - -## Training -> Link to the PR for changes to the training content in https://github.com/wso2/WSO2-Training, if applicable - -## Certification -> Type “Sent” when you have provided new/updated certification questions, plus four answers for each question (correct answer highlighted in bold), based on this change. Certification questions/answers should be sent to certification@wso2.com and NOT pasted in this PR. If there is no impact on certification exams, type “N/A” and explain why. - -## Marketing -> Link to drafts of marketing content that will describe and promote this feature, including product page changes, technical articles, blog posts, videos, etc., if applicable - -## Automation tests - - Unit tests - > Code coverage information - - Integration tests - > Details about the test cases and coverage - -## Security checks - - Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines? yes/no - - Ran FindSecurityBugs plugin and verified report? yes/no - - Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets? yes/no - -## Samples -> Provide high-level details about the samples related to this feature - -## Related PRs -> List any other related PRs - -## Migrations (if applicable) -> Describe migration steps and platforms on which migration has been tested - -## Test environment -> List all JDK versions, operating systems, databases, and browser/versions on which this feature/fix was tested - -## Learning -> Describe the research phase and any blog posts, patterns, libraries, or add-ons you used to solve the problem. \ No newline at end of file diff --git a/ballerina/tests/test.bal b/ballerina/tests/test.bal deleted file mode 100644 index d2365eb..0000000 --- a/ballerina/tests/test.bal +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/log; -import ballerina/os; -import ballerina/regex; -import ballerina/test; -import ballerina/time; - -configurable string apiKey = os:getEnv("API_KEY"); -configurable string apiSecret = os:getEnv("API_SECRET"); -configurable string accessToken = os:getEnv("ACCESS_TOKEN"); -configurable string accessTokenSecret = os:getEnv("ACCESS_TOKEN_SECRET"); - -int tweetID = 0; -int replytweetID = 0; -int userID = 0; -string screenName = ""; - -ConnectionConfig twitterConfig = { - apiKey: apiKey, - apiSecret: apiSecret, - accessToken: accessToken, - accessTokenSecret: accessTokenSecret -}; - -Client twitterClient = check new(twitterConfig); - -@test:Config { - enable: false -} -function testTweet() returns error? { - log:printInfo("testTweet"); - [int, decimal] & readonly currentTime = time:utcNow(); - string currentTimeStamp = currentTime[0].toString(); - string status = "Learn Ballerina " + currentTimeStamp; - UpdateTweetOptions updateTweetOptions = {}; - Tweet tweetResponse = check twitterClient->tweet(status, "https://ballerina.io/learn/by-example/introduction/", - updateTweetOptions); - tweetID = <@untainted> tweetResponse.id; - userID = <@untainted> tweetResponse.user.id; - screenName = <@untainted> tweetResponse.user.screen_name; - log:printInfo(tweetResponse.toString()); - test:assertTrue((tweetResponse.id != 0), "Failed to call tweet()"); -} - -@test:Config { - dependsOn: [testTweet], - enable: false -} -function testReplyTweet() returns error? { - log:printInfo("testReplyTweet"); - [int, decimal] & readonly currentTime = time:utcNow(); - string currentTimeStamp = currentTime[0].toString(); - string status = "Reply Learn Ballerina " + currentTimeStamp; - Tweet tweetResponse = check twitterClient->replyTweet(status, tweetID); - replytweetID = <@untainted> tweetResponse.id; - log:printInfo(tweetResponse.toString()); - test:assertTrue(regex:matches(tweetResponse.text, status), "Failed to call replyTweet()"); -} - -@test:Config { - dependsOn: [testReplyTweet], - enable: false -} -function testReTweet() returns error? { - log:printInfo("testReTweet"); - Tweet tweetResponse = check twitterClient->retweet(tweetID); - boolean? retweetStatus = tweetResponse?.retweeted; - if (retweetStatus is boolean) { - log:printInfo(tweetResponse.toString()); - test:assertTrue(retweetStatus, "Failed to call retweet()"); - } else { - test:assertFail("Tweet is not retweeted"); - } -} - -@test:Config { - dependsOn: [testReTweet, testShowStatus], - enable: false -} -function testDeleteReTweet() returns error? { - log:printInfo("testDeleteReTweet"); - Tweet tweetResponse = check twitterClient->deleteRetweet(tweetID); - test:assertEquals(tweetResponse.id, tweetID, "Failed to call deleteRetweet()"); -} - -@test:Config { - enable: false -} -function testSearch() returns error? { - log:printInfo("testSearch"); - string queryStr = "SriLanka"; - SearchOptions request = { - count: 10 - }; - Tweet[] tweetResponse = check twitterClient->search(queryStr, request); - test:assertTrue(tweetResponse.length() > 0, "Failed to call search()"); -} - -@test:Config { - dependsOn: [testSearch, testTweet], - enable: false -} -function testShowStatus() returns error? { - log:printInfo("testShowStatus"); - Tweet tweetResponse = check twitterClient->showStatus(tweetID); - log:printInfo(tweetResponse.toString()); - test:assertEquals(tweetResponse.id, tweetID, "Failed to call showStatus()"); -} - -@test:Config { - dependsOn: [testShowStatus], - enable: false -} -function testGetUserTimeline() returns error? { - log:printInfo("testGetUserTimeline"); - Tweet[] tweetResponse = check twitterClient->getUserTimeline(5); - log:printInfo(tweetResponse.toString()); -} - -@test:Config { - dependsOn: [testGetUserTimeline], - enable: false -} -function testGetUserTweets() returns error? { - log:printInfo("testGetUserTweets"); - Tweet[] tweetResponse = check twitterClient->getUserTweets(screenName); - foreach Tweet tweet in tweetResponse { - log:printInfo(tweet.toString()); - } -} - -@test:Config { - dependsOn: [testGetUserTweets], - enable: false -} -function testGetLast10Tweets() returns error? { - log:printInfo("testGetLast10Tweets"); - Tweet[] tweetResponse = check twitterClient->getLast10Tweets(trimUser=true); - foreach Tweet tweet in tweetResponse { - log:printInfo(tweet.toString()); - } -} - -@test:Config { - dependsOn: [testGetLast10Tweets, testTweet], - enable: false -} -function testGetUser() returns error? { - log:printInfo("testGetUser"); - User userResponse = check twitterClient->getUser(userID); - test:assertEquals(userResponse?.id, userID, "Failed to call getUser()"); -} - -@test:Config { - dependsOn: [testGetUser], - enable: false -} -function testGetUserByHandle() returns error? { - log:printInfo("testGetUserByHandle"); - User userResponse = check twitterClient->getUserByHandle(screenName); - test:assertEquals(userResponse?.screen_name, screenName, "Failed to call getUser()"); -} - -@test:Config { - dependsOn: [testTweet], - enable: false -} -function testGetFollowers() returns error? { - log:printInfo("testGetFollowers"); - User[] followers = check twitterClient->getFollowers(userID); - log:printInfo(followers.toString()); -} - -@test:Config { - dependsOn: [testTweet], - enable: false -} -function testGetFollowing() returns error? { - log:printInfo("testGetFollowing"); - User[] following = check twitterClient->getFollowing(userID); - log:printInfo(following.toString()); -} - -// Commenting this as disabling all test cases -// @test:AfterSuite {} -// function afterSuite() returns error? { -// Tweet tweetResponse = check twitterClient->deleteTweet(tweetID); -// test:assertEquals(tweetResponse.id, tweetID, "Failed to call deleteTweet()"); - -// Tweet retweetDeleteResponse = check twitterClient->deleteTweet(replytweetID); -// log:printInfo(retweetDeleteResponse.toString()); -// } diff --git a/ballerina/types.bal b/ballerina/types.bal deleted file mode 100644 index e0440bb..0000000 --- a/ballerina/types.bal +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerinax/'client.config; - -# Client configuration details. -@display {label: "Connection Config"} -public type ConnectionConfig record {| - *config:ConnectionConfig; - never auth?; - # API Key for Twitter - string apiKey; - # API Secret for Twitter - @display { - label: "", - kind: "password" - } - string apiSecret; - # Access token for Twitter - @display { - label: "", - kind: "password" - } - string accessToken; - # Access token secret for Twitter - @display { - label: "", - kind: "password" - } - string accessTokenSecret; -|}; - -# Define a Tweet. -# -# + created_at - Created time of the status -# + id - Id of the status -# + id_str - -# + text - Text message of the status -# + source - Source app of the status -# + truncated - Whether the status is truncated or not -# + entities - Entity of status -# + in_reply_to_status_id - ID of an existing status that update is in reply to -# + in_reply_to_status_id_str - ID of an existing status that update is in reply to in string -# + in_reply_to_user_id - ID of an existing user update is in reply to -# + in_reply_to_user_id_str - ID of an existing user update is in reply to in string -# + in_reply_to_screen_name - Screen name of an existing user update is in reply to in string -# + user - Detail of user post -# + coordinates - Coordinates of location where posted -# + geo - Geo location details (longitude and latitude) -# + place - Location name where posted -# + contributors - Contributors to a tweet -# + is_quote_status - Indicate the quote status -# + favorited - Whether the status is favorited or not -# + retweeted - Whether the status is retweeted or not -# + favorite_count - Count of the favourites -# + retweet_count - Count of the retweeted status -# + possibly_sensitive - Sensitivie or not -# + lang - Language of tweet -public type Tweet record { - string created_at; - int id; - string id_str?; - string text; - boolean truncated?; - json entities?; - json 'source?; - int? in_reply_to_status_id?; - string? in_reply_to_status_id_str?; - int? in_reply_to_user_id?; - string? in_reply_to_user_id_str?; - string? in_reply_to_screen_name?; - User user; - GeoLocation? geo?; - json coordinates?; - json place?; - json contributors?; - boolean is_quote_status?; - int retweet_count?; - int favorite_count?; - boolean favorited?; - boolean retweeted?; - boolean possibly_sensitive?; - string lang?; -}; - -# Define the geo location details. -# -# + latitude - Latitude of the location -# + longitude - Longitude of the location -public type GeoLocation record { - float latitude?; - float longitude?; -}; - -# Define the location details. -# -# + woeid - Where On Earth IDentifier -# + countryName - Country name -# + countryCode - Country code -# + name - Name of the location -# + placeType - Longitude of the location -# + url - Location URL -public type Location record { - int woeid?; - string countryName?; - string countryCode?; - string name?; - PlaceType placeType?; - string url?; -}; - -# Define the place type. -# -# + name - Name of the place -# + code - Location code of the place -public type PlaceType record { - string name?; - int code?; -}; - -# Define Entity. -# -# + hashtags - Hashtags mentioned in the tweet -# + symbols - Symbols exists -# + user_mentions - Users mentioned in the tweet -# + urls - Urls retated to that tweet -public type Entity record { - json hashtags?; - json symbols?; - json user_mentions?; - json urls?; -}; - -# Define User. -# -# + id - Id of user -# + id_str - Id of user in string -# + name - Display name of user -# + screen_name - Screen name of user -# + location - Location of user -# + description - Description about the user -# + url - Urls associated with user -# + followers_count - Count of the followers -# + friends_count - Count of the friends(User's following) -public type User record { - int id; - string id_str; - string name; - string screen_name; - string location?; - string description?; - string? url?; - int followers_count?; - int friends_count?; -}; - -# Define search request options. -# -# + count - Number of tweets to return per page, up to a maximum of 100 -# + geocode - Geo location of tweets by users -# + lang - Restricts tweets to a language -# + locale - Specify the language of the query sent -# + result_type - Type of search results returned -# + until - Return tweets created before the given date -# + since_id - Minimum tweet Id -# + max_id - Maximum tweet Id -# + include_entities - Include entities nodes -public type SearchOptions record { - @display {label: "Tweets Count"} - int count?; - @display {label: "Geo Location"} - string geocode?; - @display {label: "Language"} - string lang?; - @display {label: "Query String Language"} - string locale?; - @display {label: "Result Type"} - string result_type?; - @display {label: "Tweet Date Filter"} - string until?; - @display {label: "Minimum Tweet Id"} - int since_id?; - @display {label: "Maximum Tweet Id"} - int max_id?; - @display {label: "Include Entities Or Not"} - boolean include_entities?; -}; - -# Define update tweet options. -# -# + media_ids - Specify the language of the query sent -# + possibly_sensitive - Whether sensitve ot not -# + lat - Latitude of tweet posted location -# + long - Longitude of tweet posted location -# + place_id - Place Id of tweet posted location -# + display_coordinates - Cordinates related to tweet posted location -# + trim_user - Reduce user details to show(only ID) -public type UpdateTweetOptions record { - @display {label: "Media Id"} - string media_ids?; - @display {label: "Sensitivie Or Not"} - boolean possibly_sensitive?; - @display {label: "Latitude"} - string lat?; - @display {label: "Longitude"} - string long?; - @display {label: "Place Id"} - string place_id?; - @display {label: "Coordinates"} - boolean display_coordinates?; - @display {label: "Trim User or Not"} - boolean trim_user?; -}; diff --git a/ballerina/utils.bal b/ballerina/utils.bal deleted file mode 100644 index 658b647..0000000 --- a/ballerina/utils.bal +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import ballerina/crypto; -import ballerina/http; -import ballerina/regex; -import ballerina/url; - -isolated function handleResponse(http:Response httpResponse) returns @tainted json|error { - json response = check httpResponse.getJsonPayload(); - if (httpResponse.statusCode is http:STATUS_OK) { - return response; - } else { - return error(response.toString()); - } -} - -isolated function handleStatusResponse(http:Response httpResponse) returns @tainted Tweet|error { - json response = check httpResponse.getJsonPayload(); - if (httpResponse.statusCode is http:STATUS_OK) { - return check response.cloneWithType(Tweet); - } else { - return error(response.toString()); - } -} - -isolated function handleStatusArrayResponse(http:Response httpResponse) returns @tainted Tweet[]|error { - json response = check httpResponse.getJsonPayload(); - if (httpResponse.statusCode is http:STATUS_OK) { - Tweet[] statuses = []; - int i = 0; - foreach json jsonStatus in response { - statuses[i] = check jsonStatus.cloneWithType(Tweet); - i = i + 1; - } - return statuses; - } else { - return error(response.toString()); - } -} - -isolated function handleUserResponse(http:Response httpResponse) returns @tainted User|error { - json response = check httpResponse.getJsonPayload(); - if (httpResponse.statusCode is http:STATUS_OK) { - return check response.cloneWithType(User); - } else { - return error(response.toString()); - } -} - -isolated function handleSearchTweetResponse(http:Response httpResponse) returns @tainted Tweet[]|error { - json response = check httpResponse.getJsonPayload(); - if (httpResponse.statusCode is http:STATUS_OK) { - Tweet[] searchResponse = []; - var tweetResponse = response.statuses; - if (tweetResponse is json) { - int i = 0; - foreach json jsonStatus in tweetResponse { - searchResponse[i] = check jsonStatus.cloneWithType(Tweet); - i = i + 1; - } - return searchResponse; - } - else { - return setResponseError(response); - } - } else { - return error(response.toString()); - } -} - -isolated function handleUserArrayResponse(http:Response httpResponse) returns @tainted User[]|error { - json response = check httpResponse.getJsonPayload(); - if (httpResponse.statusCode is http:STATUS_OK) { - User[] userResponse = []; - var userListResponse = response.users; - if (userListResponse is json) { - int i = 0; - foreach json jsonStatus in userListResponse { - userResponse[i] = check jsonStatus.cloneWithType(User); - i = i + 1; - } - return userResponse; - } - else { - return setResponseError(response); - } - } else { - return error(response.toString()); - } -} - -isolated function getOAuthParameters(string consumerKey, string accessToken, string nonce, string timeStamp) returns string { - string paramStr = "oauth_consumer_key=" + consumerKey + "&oauth_nonce=" + nonce + - "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + timeStamp + "&oauth_token=" + accessToken - + "&oauth_version=1.0&"; - return paramStr; -} - -isolated function createRequestHeaders(http:Request request, string httpMethod, string resourcePath, string consumerKey, - string consumerSecret, string accessToken, string accessTokenSecret, string paramStr, string nonce, string timeStamp) returns error? { - string serviceEndpoint = "https://api.twitter.com" + resourcePath; - string paramString = paramStr.substring(0, paramStr.length() - 1); - string encodedServiceEPValue = check url:encode(serviceEndpoint, UTF_8); - string encodedParamStrValue = check url:encode(paramString, UTF_8); - string encodedConsumerSecretValue = check url:encode(consumerSecret, UTF_8); - string encodedAccessTokenSecretValue = check url:encode(accessTokenSecret, UTF_8); - - //Create a signature - string baseString = httpMethod + "&" + encodedServiceEPValue + "&" + encodedParamStrValue; - byte[] baseStringByte = baseString.toBytes(); - string keyStr = encodedConsumerSecretValue + "&" + encodedAccessTokenSecretValue; - byte[] keyArrByte = keyStr.toBytes(); - string signature = (check crypto:hmacSha1(baseStringByte, keyArrByte)).toBase64(); - - string encodedSignatureValue = check url:encode(signature, UTF_8); - string encodedaccessTokenValue = check url:encode(accessToken, UTF_8); - - string oauthHeaderString = "OAuth oauth_consumer_key=\"" + consumerKey + - "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"" + timeStamp + - "\",oauth_nonce=\"" + nonce + "\",oauth_version=\"1.0\",oauth_signature=\"" + - encodedSignatureValue + "\",oauth_token=\"" + encodedaccessTokenValue + "\""; - request.setHeader("Authorization", regex:replaceAll(oauthHeaderString, "\\\\", "")); - return (); -} - -isolated function createRequestHeaderMap(http:Request request, string httpMethod, string resourcePath, string consumerKey, - string consumerSecret, string accessToken, string accessTokenSecret, string paramStr, string nonce, string timeStamp) returns map|error { - string serviceEndpoint = "https://api.twitter.com" + resourcePath; - string paramString = paramStr.substring(0, paramStr.length() - 1); - string encodedServiceEPValue = check url:encode(serviceEndpoint, UTF_8); - string encodedParamStrValue = check url:encode(paramString, UTF_8); - string encodedConsumerSecretValue = check url:encode(consumerSecret, UTF_8); - string encodedAccessTokenSecretValue = check url:encode(accessTokenSecret, UTF_8); - - string baseString = httpMethod + "&" + encodedServiceEPValue + "&" + encodedParamStrValue; - byte[] baseStringByte = baseString.toBytes(); - string keyStr = encodedConsumerSecretValue + "&" + encodedAccessTokenSecretValue; - byte[] keyStringByte = keyStr.toBytes(); - string signature = (check crypto:hmacSha1(baseStringByte, keyStringByte)).toBase64(); - - string encodedSignatureValue = check url:encode(signature, UTF_8); - string encodedaccessTokenValue = check url:encode(accessToken, UTF_8); - - string oauthHeaderString = "OAuth oauth_consumer_key=\"" + consumerKey + - "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"" + timeStamp + - "\",oauth_nonce=\"" + nonce + "\",oauth_version=\"1.0\",oauth_signature=\"" + - encodedSignatureValue + "\",oauth_token=\"" + encodedaccessTokenValue + "\""; - return { - ["Authorization"] : regex:replaceAll(oauthHeaderString, "\\\\", "") - }; -} - -isolated function setResponseError(json jsonResponse) returns error { - json|error errors = check jsonResponse.errors; - error err; - if (errors is json[]) { - err = error(TWITTER_ERROR, message = (check errors[0].message).toString()); - } else if (errors is error) { - err = errors; - } else { - err = error(TWITTER_ERROR); - } - return err; -} diff --git a/build-config/checkstyle/build.gradle b/build-config/checkstyle/build.gradle deleted file mode 100644 index 16a14dd..0000000 --- a/build-config/checkstyle/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.org) - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -plugins { - id "de.undercouch.download" -} - -apply plugin: 'java-library' - -task downloadCheckstyleRuleFiles(type: Download) { - src([ - 'https://raw.githubusercontent.com/wso2/code-quality-tools/v1.4/checkstyle/jdk-17/checkstyle.xml', - 'https://raw.githubusercontent.com/wso2/code-quality-tools/v1.4/checkstyle/jdk-17/suppressions.xml' - ]) - overwrite false - onlyIfNewer true - dest buildDir -} - -jar { - enabled = false -} - -clean { - enabled = false -} - -artifacts.add('default', file("$project.buildDir/checkstyle.xml")) { - builtBy('downloadCheckstyleRuleFiles') -} - -artifacts.add('default', file("$project.buildDir/suppressions.xml")) { - builtBy('downloadCheckstyleRuleFiles') -} diff --git a/build-config/resources/Ballerina.toml b/build-config/resources/Ballerina.toml index 1d0dae4..170363c 100644 --- a/build-config/resources/Ballerina.toml +++ b/build-config/resources/Ballerina.toml @@ -1,23 +1,13 @@ [package] -distribution = "2201.7.0" +distribution = "2201.8.6" org = "ballerinax" name = "twitter" -license= ["Apache-2.0"] -authors = ["Ballerina"] version = "@toml.version@" -export= ["twitter", "twitter.listener"] -repository = "https://github.com/ballerina-platform/module-ballerinax-twitter" -keywords = ["Marketing/Social Media Accounts", "Cost/Freemium"] +license = ["Apache-2.0"] +authors = ["Ballerina"] +keywords = ["test-keywords"] icon = "icon.png" +repository = "https://github.com/ballerina-platform/module-ballerinax-twitter" [build-options] -observability-included=true - -[platform.java11] -graalvmCompatible = true - -[[platform.java11.dependency]] -path = "../native/build/libs/twitter-native-@project.version@.jar" -groupId = "org.ballerinalang.twitter" -artifactId = "java-wrapper" -version = "@project.version@" +observabilityIncluded = true diff --git a/build-config/spotbugs-exclude.xml b/build-config/spotbugs-exclude.xml deleted file mode 100644 index 46891d8..0000000 --- a/build-config/spotbugs-exclude.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/build.gradle b/build.gradle index a9ab03f..74ac90d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,39 @@ /* - * This file was generated by the Gradle 'init' task. + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). * - * This is a general purpose Gradle build. - * Learn how to create Gradle builds at https://guides.gradle.org/creating-new-gradle-builds + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. */ -import org.apache.tools.ant.taskdefs.condition.Os plugins { - id "com.github.spotbugs" version "${githubSpotbugsVersion}" - id "com.github.johnrengelman.shadow" version "${githubJohnrengelmanShadowVersion}" - id "de.undercouch.download" version "${underCouchDownloadVersion}" - id "net.researchgate.release" version "${researchgateReleaseVersion}" + id 'com.github.spotbugs-base' + id 'com.github.johnrengelman.shadow' + id 'de.undercouch.download' + id 'net.researchgate.release' } -description = 'Ballerina - Twitter' - allprojects { group = project.group version = project.version - apply plugin: 'jacoco' apply plugin: 'maven-publish' repositories { mavenLocal() + maven { + url = 'https://maven.wso2.org/nexus/content/repositories/releases/' + } maven { url = 'https://maven.wso2.org/nexus/content/groups/wso2-public/' @@ -34,7 +44,7 @@ allprojects { } maven { - url = 'https://maven.pkg.github.com/ballerina-platform/ballerina-lang' + url = 'https://maven.pkg.github.com/ballerina-platform/*' credentials { username System.getenv("packageUser") password System.getenv("packagePAT") @@ -43,30 +53,24 @@ allprojects { } ext { - snapshotVersion= '-SNAPSHOT' + snapshotVersion = '-SNAPSHOT' timestampedVersionRegex = '.*-\\d{8}-\\d{6}-\\w.*\$' - packageName ='twitter' - balPackageName = 'twitter' } } -def executeBalCommand(String command, String dir) { - try { - exec { - workingDir dir - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - commandLine 'cmd', '/c', "bal.bat ${command} && exit %%ERRORLEVEL%%" - } else { - commandLine 'sh', '-c', "bal ${command}" - } - } - } catch (Exception e) { - println("bal command failed. " + e.message) - throw e - } -} +def moduleVersion = project.version.replace("-SNAPSHOT", "") task build { - dependsOn("${project.packageName}-native:build") - dependsOn("${project.packageName}-ballerina:build") + dependsOn(':twitter-ballerina:build') +} + +release { + buildTasks = ['build'] + failOnSnapshotDependencies = true + versionPropertyFile = 'gradle.properties' + tagTemplate = 'v${version}' + git { + requireBranch = "release-${moduleVersion}" + pushToRemote = 'origin' + } } diff --git a/ballerina/modules/listener/simple_http_service.bal b/docs/license.txt similarity index 70% rename from ballerina/modules/listener/simple_http_service.bal rename to docs/license.txt index 92c646a..921a7a1 100644 --- a/ballerina/modules/listener/simple_http_service.bal +++ b/docs/license.txt @@ -1,6 +1,9 @@ -// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +// AUTO-GENERATED FILE. DO NOT MODIFY. +// This file is auto-generated by the Ballerina OpenAPI tool. + +// Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). // -// WSO2 Inc. licenses this file to you under the Apache License, +// WSO2 LLC. licenses this file to you under the Apache License, // Version 2.0 (the "License"); you may not use this file except // in compliance with the License. // You may obtain a copy of the License at @@ -13,5 +16,3 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. - -public type SimpleHttpService distinct service object {}; diff --git a/gradle.properties b/gradle.properties index 9cc973a..27dae74 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,13 +1,13 @@ org.gradle.caching=true -group=org.ballerinalang.twitter -version=3.3.0 +group=io.ballerina.lib +version=0.1.0-SNAPSHOT -puppycrawlCheckstyleVersion=10.12.1 -checkstyleToolVersion=10.12.1 -githubSpotbugsVersion=5.0.14 -githubJohnrengelmanShadowVersion=8.1.1 -underCouchDownloadVersion=5.4.0 -researchgateReleaseVersion=2.8.0 +checkstylePluginVersion=10.12.0 +spotbugsPluginVersion=5.0.14 +shadowJarPluginVersion=8.1.1 +downloadPluginVersion=5.4.0 +releasePluginVersion=2.8.0 testngVersion=7.6.1 - -ballerinaLangVersion=2201.8.0-20230830-220400-8a7556d8 +eclipseLsp4jVersion=0.12.0 +ballerinaGradlePluginVersion=2.2.4 +ballerinaLangVersion=2201.8.6 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..4ac3234 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,2 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 033e24c4cdf41af1ab109bc7f253b2b887023340..d64cd4917707c1f8861d8cb53dd15194d4248596 100644 GIT binary patch literal 43462 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 literal 63375 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≫L+crb^Bz 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 /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -201,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 6689b85..25da30d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/native/build.gradle b/native/build.gradle deleted file mode 100644 index c9b615e..0000000 --- a/native/build.gradle +++ /dev/null @@ -1,105 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * This is a general purpose Gradle build. - * Learn more about Gradle by exploring our samples at https://docs.gradle.org/6.7.1/samples - */ - -plugins { - id 'java-library' - id 'com.github.spotbugs' - id 'checkstyle' - id 'jacoco' -} - -description = 'Ballerina - Twitter Native' - -configurations { - jacocoRuntime -} - -dependencies { - jacocoRuntime "org.jacoco:org.jacoco.agent:${jacoco.toolVersion}:runtime" - - checkstyle project(":checkstyle") - checkstyle "com.puppycrawl.tools:checkstyle:${puppycrawlCheckstyleVersion}" - implementation group: 'org.ballerinalang', name: 'ballerina-runtime', version: "${ballerinaLangVersion}" - -} - -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} - -sourceCompatibility = JavaVersion.VERSION_17 - -jacoco { - toolVersion = "0.8.10" -} - -test { - testLogging { - showStackTraces = true - showStandardStreams = true - events "failed" - exceptionFormat "full" - } - jacoco { - enabled = true - destinationFile = file("$buildDir/coverage-reports/jacoco.exec") - includeNoLocationClasses = true - } -} - -spotbugsMain { - ignoreFailures = true - effort = "max" - reportLevel = "low" - reportsDir = file("$project.buildDir/reports/spotbugs") - def excludeFile = file("${rootDir}/build-config/spotbugs-exclude.xml") - if (excludeFile.exists()) { - it.excludeFilter = excludeFile - } - reports { - text.enabled = true - } -} - -spotbugsTest { - enabled = false -} - -task validateSpotbugs() { - doLast { - if (spotbugsMain.reports.size() > 0 && - spotbugsMain.reports[0].destination.exists() && - spotbugsMain.reports[0].destination.text.readLines().size() > 0) { - spotbugsMain.reports[0].destination?.eachLine { - println 'Failure: ' + it - } - throw new GradleException("Spotbugs rule violations were found."); - } - } -} - -checkstyle { - toolVersion "${checkstyleToolVersion}" - configFile file("${rootDir}/build-config/checkstyle/build/checkstyle.xml") - configProperties = ["suppressionFile": file("${rootDir}/build-config/checkstyle/build/suppressions.xml")] -} - -tasks.withType(Checkstyle) { - exclude '**/module-info.java' -} - -spotbugsMain.finalizedBy validateSpotbugs -checkstyleMain.dependsOn ':checkstyle:downloadCheckstyleRuleFiles' - -compileJava { - doFirst { - options.compilerArgs = [ - '--module-path', classpath.asPath, - ] - classpath = files() - } -} diff --git a/native/src/main/java/module-info.java b/native/src/main/java/module-info.java deleted file mode 100644 index 74efdac..0000000 --- a/native/src/main/java/module-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.org) - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -module org.ballerinalang.twitter { - requires io.ballerina.runtime; - exports org.ballerinalang.twitter; -} diff --git a/native/src/main/java/org/ballerinalang/twitter/ModuleUtils.java b/native/src/main/java/org/ballerinalang/twitter/ModuleUtils.java deleted file mode 100644 index ae1c50c..0000000 --- a/native/src/main/java/org/ballerinalang/twitter/ModuleUtils.java +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package org.ballerinalang.twitter; - -import io.ballerina.runtime.api.Environment; -import io.ballerina.runtime.api.Module; - -/** - * {@code ModuleUtils} contains the utility methods for the module. - * - * @since 2.0.0 - */ -public class ModuleUtils { - - private static Module websubModule; - - private ModuleUtils() {} - - public static void setModule(Environment environment) { - websubModule = environment.getCurrentModule(); - } - - public static Module getModule() { - return websubModule; - } -} diff --git a/native/src/main/java/org/ballerinalang/twitter/NativeHttpToTwitterAdaptor.java b/native/src/main/java/org/ballerinalang/twitter/NativeHttpToTwitterAdaptor.java deleted file mode 100644 index 64a7f1f..0000000 --- a/native/src/main/java/org/ballerinalang/twitter/NativeHttpToTwitterAdaptor.java +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -// -// WSO2 Inc. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package org.ballerinalang.twitter; - -import io.ballerina.runtime.api.Environment; -import io.ballerina.runtime.api.Future; -import io.ballerina.runtime.api.Module; -import io.ballerina.runtime.api.async.Callback; -import io.ballerina.runtime.api.async.StrandMetadata; -import io.ballerina.runtime.api.creators.ErrorCreator; -import io.ballerina.runtime.api.creators.ValueCreator; -import io.ballerina.runtime.api.types.MethodType; -import io.ballerina.runtime.api.utils.StringUtils; -import io.ballerina.runtime.api.values.BArray; -import io.ballerina.runtime.api.values.BError; -import io.ballerina.runtime.api.values.BMap; -import io.ballerina.runtime.api.values.BObject; -import io.ballerina.runtime.api.values.BString; - -import java.util.ArrayList; - -import static io.ballerina.runtime.api.utils.StringUtils.fromString; - -/** - * This class provides utility methods for interacting with Twitter services. - */ -public class NativeHttpToTwitterAdaptor { - public static final String SERVICE_OBJECT = "TWITTER_SERVICE_OBJECT"; - - public static void externInit(BObject adaptor, BObject service) { - adaptor.addNativeData(SERVICE_OBJECT, service); - } - - public static Object callOnTweet(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnTweet", "onTweet"); - } - - public static Object callOnReply(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnReply", "onReply"); - } - - public static Object callOnReTweet(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnReTweet", "onReTweet"); - } - - public static Object callOnFollower(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnFollower", "onFollower"); - } - - public static Object callOnFavourite(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnFavourite", "onFavourite"); - } - - public static Object callOnDelete(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnDelete", "onDelete"); - } - - public static Object callOnMention(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnMention", "onMention"); - } - - public static Object callOnQuoteTweet(Environment env, BObject adaptor, BMap message) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - return invokeRemoteFunction(env, serviceObj, message, "callOnQuoteTweet", "onQuoteTweet"); - } - - public static BArray getServiceMethodNames(BObject adaptor) { - BObject serviceObj = (BObject) adaptor.getNativeData(SERVICE_OBJECT); - ArrayList methodNamesList = new ArrayList<>(); - for (MethodType method : serviceObj.getType().getMethods()) { - methodNamesList.add(StringUtils.fromString(method.getName())); - } - return ValueCreator.createArrayValue(methodNamesList.toArray(BString[]::new)); - } - - private static Object invokeRemoteFunction(Environment env, BObject bHttpService, BMap message, - String parentFunctionName, String remoteFunctionName) { - Future balFuture = env.markAsync(); - Module module = ModuleUtils.getModule(); - StrandMetadata metadata = new StrandMetadata(module.getOrg(), module.getName(), module.getVersion(), - parentFunctionName); - - Object[] args = new Object[]{message, true}; - env.getRuntime().invokeMethodAsync(bHttpService, remoteFunctionName, null, metadata, new Callback() { - @Override - public void notifySuccess(Object result) { - balFuture.complete(result); - } - - @Override - public void notifyFailure(BError bError) { - BString errorMessage = fromString("service method invocation failed: " + bError.getErrorMessage()); - BError invocationError = ErrorCreator.createError(errorMessage, bError); - balFuture.complete(invocationError); - } - }, args); - return null; - } -} diff --git a/pull_request_template.md b/pull_request_template.md deleted file mode 100644 index 731e098..0000000 --- a/pull_request_template.md +++ /dev/null @@ -1,39 +0,0 @@ -# Description - -Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. - -Fixes # (issue) - -Related Pull Requests (remove if not relevant) -- Pull request 1 -- Pull request 2 - -One line release note: -- One line describing the feature/improvement/fix made by this PR - -## Type of change - -Please delete options that are not relevant. - -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) -- [ ] This change requires a documentation update - -# How Has This Been Tested? - -Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration - -- [ ] Test A -- [ ] Test B - -**Test Configuration**: -* Ballerina Version: -* Operating System: -* Java SDK: - -# Checklist: - -### Security checks - - [ ] Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines? - - [ ] Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets? diff --git a/settings.gradle b/settings.gradle index ff492c9..9870948 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,27 +2,39 @@ * This file was generated by the Gradle 'init' task. * * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/6.5.1/userguide/multi_project_builds.html + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation. */ +pluginManagement { + plugins { + id "com.github.spotbugs-base" version "${spotbugsPluginVersion}" + id "com.github.johnrengelman.shadow" version "${shadowJarPluginVersion}" + id "de.undercouch.download" version "${downloadPluginVersion}" + id "net.researchgate.release" version "${releasePluginVersion}" + id "io.ballerina.plugin" version "${ballerinaGradlePluginVersion}" + } + + repositories { + gradlePluginPortal() + maven { + url = 'https://maven.pkg.github.com/ballerina-platform/*' + credentials { + username System.getenv("packageUser") + password System.getenv("packagePAT") + } + } + } +} + plugins { id "com.gradle.enterprise" version "3.2" } -def projectName = 'twitter' -rootProject.name = "ballerinax-${projectName}" +rootProject.name = 'module-ballerinax-twitter' -include ":checkstyle" -include ":${projectName}-native" -include ":${projectName}-ballerina" -include ":${projectName}-examples" +include ':twitter-ballerina' -project(':checkstyle').projectDir = file("build-config${File.separator}checkstyle") -project(":${projectName}-native").projectDir = file('native') -project(":${projectName}-ballerina").projectDir = file('ballerina') -project(":${projectName}-examples").projectDir = file('examples') +project(':twitter-ballerina').projectDir = file("ballerina") gradleEnterprise { buildScan { From f1c08ace3b4b2d5c9683ef5df9168e4baf68f6c0 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Tue, 18 Jun 2024 20:44:13 +0530 Subject: [PATCH 02/12] Fix build failure --- ballerina/Ballerina.toml | 7 +++++- ballerina/Dependencies.toml | 45 ++++++++++++++++++++++++++++++++++++ ballerina/client.bal | 15 ++++++++++++ ballerina/icon.png | Bin 0 -> 8098 bytes 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 ballerina/Dependencies.toml create mode 100644 ballerina/client.bal create mode 100644 ballerina/icon.png diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index 16e549f..83b9292 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -1,8 +1,13 @@ [package] +distribution = "2201.8.6" org = "ballerinax" name = "twitter" version = "0.1.0" -distribution = "2201.8.6" +license = ["Apache-2.0"] +authors = ["Ballerina"] +keywords = ["test-keywords"] +icon = "icon.png" +repository = "https://github.com/ballerina-platform/module-ballerinax-twitter" [build-options] observabilityIncluded = true diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml new file mode 100644 index 0000000..6bb0dd3 --- /dev/null +++ b/ballerina/Dependencies.toml @@ -0,0 +1,45 @@ +# AUTO-GENERATED FILE. DO NOT MODIFY. + +# This file is auto-generated by Ballerina for managing dependency versions. +# It should not be modified by hand. + +[ballerina] +dependencies-toml-version = "2" +distribution-version = "2201.8.6" + +[[package]] +org = "ballerina" +name = "jballerina.java" +version = "0.0.0" + +[[package]] +org = "ballerina" +name = "observe" +version = "1.2.3" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerinai" +name = "observe" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "observe"} +] +modules = [ + {org = "ballerinai", packageName = "observe", moduleName = "observe"} +] + +[[package]] +org = "ballerinax" +name = "twitter" +version = "0.1.0" +dependencies = [ + {org = "ballerinai", name = "observe"} +] +modules = [ + {org = "ballerinax", packageName = "twitter", moduleName = "twitter"} +] + diff --git a/ballerina/client.bal b/ballerina/client.bal new file mode 100644 index 0000000..66cdc3f --- /dev/null +++ b/ballerina/client.bal @@ -0,0 +1,15 @@ +// Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). +// +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. diff --git a/ballerina/icon.png b/ballerina/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..40d78f26f30eb605e2791776dd7842296b15c2bf GIT binary patch literal 8098 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 literal 0 HcmV?d00001 From 85b34d4ed10a25da3351ffe192d3decf8f2f6e2f Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:35:47 +0530 Subject: [PATCH 03/12] Added CODEOWNERS --- .github/CODEOWNERS.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/CODEOWNERS.txt diff --git a/.github/CODEOWNERS.txt b/.github/CODEOWNERS.txt new file mode 100644 index 0000000..7ac9f1d --- /dev/null +++ b/.github/CODEOWNERS.txt @@ -0,0 +1,7 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. + +# See: https://help.github.com/articles/about-codeowners/ + +# These owners will be the default owners for everything in the repo. +* @indikasampath2000 @abeykoon @kapilraajP From 3e57e59aeaf56c839ad8c3ab2f53f324623d7443 Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:38:38 +0530 Subject: [PATCH 04/12] Update gradle.properties Co-authored-by: Ayesh Almeida <77491511+ayeshLK@users.noreply.github.com> --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 27dae74..6f018a7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.caching=true group=io.ballerina.lib -version=0.1.0-SNAPSHOT +version=4.0.0-SNAPSHOT checkstylePluginVersion=10.12.0 spotbugsPluginVersion=5.0.14 From 8f70fc19bf98476a8ca6f0620234f780297ec6ec Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:38:49 +0530 Subject: [PATCH 05/12] Update build-config/resources/Ballerina.toml Co-authored-by: Ayesh Almeida <77491511+ayeshLK@users.noreply.github.com> --- build-config/resources/Ballerina.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-config/resources/Ballerina.toml b/build-config/resources/Ballerina.toml index 170363c..a6f0aef 100644 --- a/build-config/resources/Ballerina.toml +++ b/build-config/resources/Ballerina.toml @@ -5,7 +5,7 @@ name = "twitter" version = "@toml.version@" license = ["Apache-2.0"] authors = ["Ballerina"] -keywords = ["test-keywords"] +keywords = ["Marketing/Social Media Accounts", "Cost/Freemium"] icon = "icon.png" repository = "https://github.com/ballerina-platform/module-ballerinax-twitter" From 64fa6a9cc3b8b41bcdc2e56e75de312c58045a91 Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 22:03:57 +0530 Subject: [PATCH 06/12] Update .gitattributes Co-authored-by: Ayesh Almeida <77491511+ayeshLK@users.noreply.github.com> --- .gitattributes | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 097f9f9..afd59d8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,4 +6,3 @@ # These are Windows script files and should use crlf *.bat text eol=crlf - From cf8f501c53596ba3d80a2f30950e86cc60615d4f Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 22:04:19 +0530 Subject: [PATCH 07/12] Update ballerina/Ballerina.toml Co-authored-by: Ayesh Almeida <77491511+ayeshLK@users.noreply.github.com> --- ballerina/Ballerina.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index 83b9292..f5ccc9c 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -5,7 +5,7 @@ name = "twitter" version = "0.1.0" license = ["Apache-2.0"] authors = ["Ballerina"] -keywords = ["test-keywords"] +keywords = ["Marketing/Social Media Accounts", "Cost/Freemium"] icon = "icon.png" repository = "https://github.com/ballerina-platform/module-ballerinax-twitter" From cbbba45c01ea891e7bc4bf13483c6f4e2902ce97 Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Tue, 18 Jun 2024 22:05:53 +0530 Subject: [PATCH 08/12] Rename CODEOWNERS.txt to CODEOWNERS --- .github/{CODEOWNERS.txt => CODEOWNERS} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{CODEOWNERS.txt => CODEOWNERS} (100%) diff --git a/.github/CODEOWNERS.txt b/.github/CODEOWNERS similarity index 100% rename from .github/CODEOWNERS.txt rename to .github/CODEOWNERS From 2b6e50abc270f673348ae68d976a68cbc31b9152 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Wed, 19 Jun 2024 10:12:40 +0530 Subject: [PATCH 09/12] [Automated] Update the toml files --- ballerina/Ballerina.toml | 2 +- ballerina/Dependencies.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index f5ccc9c..40789b3 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -2,7 +2,7 @@ distribution = "2201.8.6" org = "ballerinax" name = "twitter" -version = "0.1.0" +version = "4.0.0" license = ["Apache-2.0"] authors = ["Ballerina"] keywords = ["Marketing/Social Media Accounts", "Cost/Freemium"] diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml index 6bb0dd3..de4f86d 100644 --- a/ballerina/Dependencies.toml +++ b/ballerina/Dependencies.toml @@ -35,7 +35,7 @@ modules = [ [[package]] org = "ballerinax" name = "twitter" -version = "0.1.0" +version = "4.0.0" dependencies = [ {org = "ballerinai", name = "observe"} ] From 6e1bb41abed3bae5168511ebda4c077ca5d1e485 Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:29:52 +0530 Subject: [PATCH 10/12] Update Build Source in readme.md --- README.md | 74 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 1375cfe..c3cde4b 100644 --- a/README.md +++ b/README.md @@ -14,25 +14,73 @@ For more information about configuration and operations, go to the module(s). - [`twitter`](twitter/Module.md) ## Building from the source -### Setting up the prerequisites -1. Download and install Java SE Development Kit (JDK) version 17. You can install either [OpenJDK](https://adoptopenjdk.net/) or [Oracle JDK](https://www.oracle.com/java/technologies/downloads/). +### Prerequisites - > **Note:** Set the JAVA_HOME environment variable to the path name of the directory into which you installed JDK. +1. Download and install Java SE Development Kit (JDK) version 17. You can download it from either of the following sources: -2. Download and install [Ballerina Swan Lake](https://ballerina.io/). + * [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) + * [OpenJDK](https://adoptium.net/) -### Building the source -Execute the following commands to build from the source. + > **Note:** After installation, remember to set the `JAVA_HOME` environment variable to the directory where JDK was installed. -* To build the package: - ``` - bal pack ./twitter - ``` -* To run the package after build: - ``` - bal test ./twitter +2. Download and install [Ballerina Swan Lake](https://ballerina.io/). + +3. Download and install [Docker](https://www.docker.com/get-started). + + > **Note**: Ensure that the Docker daemon is running before executing any tests. + +### Build options + +Execute the commands below to build from the source. + +1. To build the package: + + ```bash + ./gradlew clean build + ``` + +2. To run the tests: + + ```bash + ./gradlew clean test + ``` + +3. To build the without the tests: + + ```bash + ./gradlew clean build -x test + ``` + +4. To run tests against different environment: + + ```bash + ./gradlew clean test -Pgroups= + ``` + +5. To debug package with a remote debugger: + + ```bash + ./gradlew clean build -Pdebug= + ``` + +6. To debug with the Ballerina language: + + ```bash + ./gradlew clean build -PbalJavaDebug= + ``` + +7. Publish the generated artifacts to the local Ballerina Central repository: + + ```bash + ./gradlew clean build -PpublishToLocalCentral=true ``` + +8. Publish the generated artifacts to the Ballerina Central repository: + + ```bash + ./gradlew clean build -PpublishToCentral=true + ``` ## Contributing to Ballerina As an open source project, Ballerina welcomes contributions from the community. From 9d1885bd37a9217dd957cad2d31086a47b23b075 Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:58:05 +0530 Subject: [PATCH 11/12] Update ballerina/build.gradle Co-authored-by: Ayesh Almeida <77491511+ayeshLK@users.noreply.github.com> --- ballerina/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ballerina/build.gradle b/ballerina/build.gradle index acd319e..9bd3f94 100644 --- a/ballerina/build.gradle +++ b/ballerina/build.gradle @@ -22,7 +22,7 @@ plugins{ id 'io.ballerina.plugin' } -description = 'twitter - Ballerina' +description = 'Twitter - Ballerina' def packageName = "twitter" def packageOrg = "ballerinax" From 38fd6a4a0d247dfcc186cd2d3d32fbd54030b25b Mon Sep 17 00:00:00 2001 From: Visal Munasinghe <127712545+vish-mv@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:09:13 +0530 Subject: [PATCH 12/12] Update README.md Co-authored-by: Ayesh Almeida <77491511+ayeshLK@users.noreply.github.com> --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index c3cde4b..c13af19 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,14 @@ For more information about configuration and operations, go to the module(s). > **Note**: Ensure that the Docker daemon is running before executing any tests. +4. Export Github Personal access token with read package permissions as follows, + + ```bash + export packageUser= + export packagePAT= + ``` + + ### Build options Execute the commands below to build from the source.